diff options
author | Alberts Muktupāvels <alberts.muktupavels@gmail.com> | 2019-10-19 19:14:27 +0300 |
---|---|---|
committer | Alberts Muktupāvels <alberts.muktupavels@gmail.com> | 2019-10-19 19:14:27 +0300 |
commit | d2cae232b3472a08559e4ef7ad9c2255df63fdc7 (patch) | |
tree | ac7ec1d5504020be9ea7287beac7dcdcf12c7c6a | |
parent | 5419d63cb3173bbb5aef9b4e757fa548a63dc0dc (diff) | |
download | metacity-d2cae232b3472a08559e4ef7ad9c2255df63fdc7.tar.gz |
compositor-xrender: use window-type property
-rw-r--r-- | src/compositor/meta-compositor-xrender.c | 47 |
1 files changed, 36 insertions, 11 deletions
diff --git a/src/compositor/meta-compositor-xrender.c b/src/compositor/meta-compositor-xrender.c index 8b5ace43..009a93e8 100644 --- a/src/compositor/meta-compositor-xrender.c +++ b/src/compositor/meta-compositor-xrender.c @@ -1278,6 +1278,38 @@ notify_decorated_cb (MetaWindow *window, meta_compositor_queue_redraw (compositor); } +static void +notify_window_type_cb (MetaWindow *window, + GParamSpec *pspec, + MetaCompositorXRender *xrender) +{ + MetaCompositor *compositor; + MetaCompWindow *cw; + + compositor = META_COMPOSITOR (xrender); + cw = find_comp_window_by_window (xrender, window); + + if (cw == NULL) + return; + + if (cw->extents != None) + { + meta_compositor_add_damage (compositor, "notify_window_type_cb", cw->extents); + XFixesDestroyRegion (xrender->xdisplay, cw->extents); + cw->extents = None; + } + + if (cw->shadow != None) + { + XRenderFreePicture (xrender->xdisplay, cw->shadow); + cw->shadow = None; + } + + cw->needs_shadow = window_has_shadow (xrender, cw); + + meta_compositor_queue_redraw (compositor); +} + /* event processors must all be called with an error trap in place */ static void process_property_notify (MetaCompositorXRender *xrender, @@ -1308,17 +1340,6 @@ process_property_notify (MetaCompositorXRender *xrender, return; } } - - if (event->atom == display->atom__NET_WM_WINDOW_TYPE) - { - MetaCompWindow *cw = find_comp_window_by_xwindow (xrender, event->window); - - if (!cw) - return; - - cw->needs_shadow = window_has_shadow (xrender, cw); - return; - } } static void @@ -1577,6 +1598,10 @@ meta_compositor_xrender_add_window (MetaCompositor *compositor, G_CALLBACK (notify_decorated_cb), xrender, 0); + g_signal_connect_object (window, "notify::window-type", + G_CALLBACK (notify_window_type_cb), + xrender, 0); + cw->extents = None; cw->shadow = None; cw->shadow_dx = 0; |