diff options
author | Richard Grenville <pyxlcy@gmail.com> | 2012-11-08 19:39:13 +0800 |
---|---|---|
committer | Richard Grenville <pyxlcy@gmail.com> | 2012-11-08 19:45:39 +0800 |
commit | baed7f4b0c211ea2ff04bf9e009ab6e334dad3e4 (patch) | |
tree | 682ca4265a3f8534e2bb8fac33cba599aaccb90e /compton.h | |
parent | 798c631e2b3f08fd3d61b766f71507a896bbbe6f (diff) | |
download | tdebase-baed7f4b0c211ea2ff04bf9e009ab6e334dad3e4.tar.gz tdebase-baed7f4b0c211ea2ff04bf9e009ab6e334dad3e4.zip |
Bug fix: Shape update of opaque windows not handled correctly
- Fix a bug that causes rendering issues if a opaque window changes
shape.
- Remove abundant handling code in paint_preprocess() when generating
border_size as border_size() is no longer relying on
XFixesCreateRegionFromWindow() right now by default.
- Add extra code to print backtrace in DEBUG_ALLOC_REG.
- Move initialization of fade_time closer to first paint.
Diffstat (limited to 'compton.h')
-rw-r--r-- | compton.h | 34 |
1 files changed, 33 insertions, 1 deletions
@@ -89,12 +89,42 @@ #include <GL/glx.h> #endif +static void +print_timestamp(void); + #ifdef DEBUG_ALLOC_REG + +#include <execinfo.h> +#define BACKTRACE_SIZE 5 + +/** + * Print current backtrace, excluding the first two items. + * + * Stolen from glibc manual. + */ +static inline void +print_backtrace(void) { + void *array[BACKTRACE_SIZE]; + size_t size; + char **strings; + + size = backtrace(array, BACKTRACE_SIZE); + strings = backtrace_symbols(array, size); + + for (size_t i = 2; i < size; i++) + printf ("%s\n", strings[i]); + + free(strings); +} + static inline XserverRegion XFixesCreateRegion_(Display *dpy, XRectangle *p, int n, const char *func, int line) { XserverRegion reg = XFixesCreateRegion(dpy, p, n); + print_timestamp(); printf("%#010lx: XFixesCreateRegion() in %s():%d\n", reg, func, line); + print_backtrace(); + fflush(stdout); return reg; } @@ -102,7 +132,9 @@ static inline void XFixesDestroyRegion_(Display *dpy, XserverRegion reg, const char *func, int line) { XFixesDestroyRegion(dpy, reg); + print_timestamp(); printf("%#010lx: XFixesDestroyRegion() in %s():%d\n", reg, func, line); + fflush(stdout); } #define XFixesCreateRegion(dpy, p, n) XFixesCreateRegion_(dpy, p, n, __func__, __LINE__) @@ -668,7 +700,7 @@ get_time_timespec(void) { * * Used for debugging. */ -static inline void +static void print_timestamp(void) { struct timeval tm, diff; |