From e7da88890d75174ec5b81d3dd5ae88b234a6f831 Mon Sep 17 00:00:00 2001 From: Richard Grenville Date: Tue, 18 Sep 2012 11:28:09 +0800 Subject: [PATCH] Bug fix: Issue #23, notify-osd not rendered More details in the issue report. - Add ClientMessage detection to ev_name() and ev_window(), although we don't actually handle the event. --- src/compton.c | 41 ++++++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/src/compton.c b/src/compton.c index 389b857b..d620a7e6 100644 --- a/src/compton.c +++ b/src/compton.c @@ -1055,6 +1055,10 @@ paint_all(Display *dpy, XserverRegion region) { continue; } +#ifdef DEBUG_REPAINT + printf(" %#010lx", w->id); +#endif + if (!w->picture) { XRenderPictureAttributes pa; XRenderPictFormat *format; @@ -1074,10 +1078,6 @@ paint_all(Display *dpy, XserverRegion region) { dpy, draw, format, CPSubwindowMode, &pa); } -#ifdef DEBUG_REPAINT - printf(" %#010lx", w->id); -#endif - if (!w->border_size) { w->border_size = border_size(dpy, w); } @@ -1433,22 +1433,21 @@ map_win(Display *dpy, Window id, w->id, wintype_name(w->window_type)); #endif - /* select before reading the property - so that no property changes are lost */ - if (!override_redirect) { - // Detect client window here instead of in add_win() as the client - // window should have been prepared at this point - if (!(w->client_win)) { - Window cw = find_client_win(dpy, w->id); - if (cw) { - mark_client_win(dpy, w, cw); - } - } + // Call XSelectInput() before reading properties so that no property + // changes are lost + XSelectInput(dpy, id, determine_evmask(dpy, id, WIN_EVMODE_FRAME)); + + // Notify compton when the shape of a window changes + if (shape_exists) { + XShapeSelectInput(dpy, id, ShapeNotifyMask); + } - XSelectInput(dpy, id, determine_evmask(dpy, id, WIN_EVMODE_FRAME)); - // Notify compton when the shape of a window changes - if (shape_exists) { - XShapeSelectInput(dpy, id, ShapeNotifyMask); + // Detect client window here instead of in add_win() as the client + // window should have been prepared at this point + if (!(w->client_win)) { + Window cw = find_client_win(dpy, w->id); + if (cw) { + mark_client_win(dpy, w, cw); } } @@ -2247,6 +2246,8 @@ ev_name(XEvent *ev) { return "Expose"; case PropertyNotify: return "PropertyNotify"; + case ClientMessage: + return "ClientMessage"; default: if (ev->type == damage_event + XDamageNotify) { return "Damage"; @@ -2284,6 +2285,8 @@ ev_window(XEvent *ev) { return ev->xexpose.window; case PropertyNotify: return ev->xproperty.window; + case ClientMessage: + return ev->xclient.window; default: if (ev->type == damage_event + XDamageNotify) { return ((XDamageNotifyEvent *)ev)->drawable;