From 56e181309eb6ee8a83277af983434ba385895d9f Mon Sep 17 00:00:00 2001 From: Richard Grenville Date: Tue, 30 Oct 2012 18:11:30 +0800 Subject: [PATCH] Misc: Small adjustments - Minor change of code in configure_win() for a slight performance boost in some cases. - Discovered there are a lot of X errors that I basically cannot fix, caused by the asynchronous nature of Xlib... - Correct the position of the timestamps in DEBUG_REPAINT. This might have negative effects for debugging X errors, though. --- src/compton.c | 43 +++++++++++++++++++------------------------ 1 file changed, 19 insertions(+), 24 deletions(-) diff --git a/src/compton.c b/src/compton.c index 012e9d3..52dd58a 100644 --- a/src/compton.c +++ b/src/compton.c @@ -1261,6 +1261,9 @@ border_size(Display *dpy, win *w) { border = XFixesCreateRegionFromWindow( dpy, w->id, WindowRegionBounding); + if (!border) + return None; + /* translate this */ XFixesTranslateRegion(dpy, border, w->a.x + w->a.border_width, @@ -1607,10 +1610,6 @@ paint_all(Display *dpy, XserverRegion region, win *t) { root_width, root_height); #endif -#ifdef DEBUG_REPAINT - printf("paint:"); -#endif - if (t && t->reg_ignore) { // Calculate the region upon which the root window is to be painted // based on the ignore region of the lowest window, if available @@ -1631,10 +1630,6 @@ paint_all(Display *dpy, XserverRegion region, win *t) { reg_tmp2 = XFixesCreateRegion(dpy, NULL, 0); for (w = t; w; w = w->prev_trans) { -#ifdef DEBUG_REPAINT - printf(" %#010lx", w->id); -#endif - // Painting shadow if (w->shadow) { // Shadow is to be painted based on the ignore region of current @@ -1694,10 +1689,6 @@ paint_all(Display *dpy, XserverRegion region, win *t) { check_fade_fin(dpy, w); } -#ifdef DEBUG_REPAINT - printf("\n"); -#endif - // Free up all temporary regions XFixesDestroyRegion(dpy, region); XFixesDestroyRegion(dpy, reg_tmp); @@ -1730,16 +1721,18 @@ paint_all(Display *dpy, XserverRegion region, win *t) { XFlush(dpy); #ifdef DEBUG_REPAINT - // It prints the timestamp in the wrong line, but... print_timestamp(); struct timespec now = get_time_timespec(); struct timespec diff = { 0 }; timespec_subtract(&diff, &now, &last_paint); printf("[ %5ld:%09ld ] ", diff.tv_sec, diff.tv_nsec); last_paint = now; + printf("paint:"); + for (w = t; w; w = w->prev_trans) + printf(" %#010lx", w->id); + putchar('\n'); fflush(stdout); #endif - } static void @@ -2403,20 +2396,22 @@ restack_win(Display *dpy, win *w, Window new_above) { static void configure_win(Display *dpy, XConfigureEvent *ce) { + if (ce->window == root) { + if (tgt_buffer) { + XRenderFreePicture(dpy, tgt_buffer); + tgt_buffer = None; + } + root_width = ce->width; + root_height = ce->height; + + return; + } + win *w = find_win(dpy, ce->window); XserverRegion damage = None; - if (!w) { - if (ce->window == root) { - if (tgt_buffer) { - XRenderFreePicture(dpy, tgt_buffer); - tgt_buffer = None; - } - root_width = ce->width; - root_height = ce->height; - } + if (!w) return; - } if (w->a.map_state == IsUnmapped) { /* save the configure event for when the window maps */