[metacity] compositor-xrender: use window-type property



commit d2cae232b3472a08559e4ef7ad9c2255df63fdc7
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date:   Sat Oct 19 19:14:27 2019 +0300

    compositor-xrender: use window-type property

 src/compositor/meta-compositor-xrender.c | 47 ++++++++++++++++++++++++--------
 1 file 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;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]