summaryrefslogtreecommitdiffstats
path: root/compton.h
diff options
context:
space:
mode:
authorRichard Grenville <[email protected]>2012-11-08 19:39:13 +0800
committerRichard Grenville <[email protected]>2012-11-08 19:45:39 +0800
commitbaed7f4b0c211ea2ff04bf9e009ab6e334dad3e4 (patch)
tree682ca4265a3f8534e2bb8fac33cba599aaccb90e /compton.h
parent798c631e2b3f08fd3d61b766f71507a896bbbe6f (diff)
downloadtdebase-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.h34
1 files changed, 33 insertions, 1 deletions
diff --git a/compton.h b/compton.h
index b3a051630..d7ec6a437 100644
--- a/compton.h
+++ b/compton.h
@@ -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;