summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlberts Muktupāvels <alberts.muktupavels@gmail.com>2019-10-19 19:14:27 +0300
committerAlberts Muktupāvels <alberts.muktupavels@gmail.com>2019-10-19 19:14:27 +0300
commitd2cae232b3472a08559e4ef7ad9c2255df63fdc7 (patch)
treeac7ec1d5504020be9ea7287beac7dcdcf12c7c6a
parent5419d63cb3173bbb5aef9b4e757fa548a63dc0dc (diff)
downloadmetacity-d2cae232b3472a08559e4ef7ad9c2255df63fdc7.tar.gz
compositor-xrender: use window-type property
-rw-r--r--src/compositor/meta-compositor-xrender.c47
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;