[metacity] compositor-xrender: move shaded_surface to MetaSurface



commit c07a7688cfca7eef26b546479abf2da5f2de6db3
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date:   Fri Oct 18 16:52:01 2019 +0300

    compositor-xrender: move shaded_surface to MetaSurface

 src/compositor/meta-compositor-xrender.c | 53 +---------------------
 src/compositor/meta-surface.c            | 77 +++++++++++++++++++++++++-------
 2 files changed, 63 insertions(+), 67 deletions(-)
---
diff --git a/src/compositor/meta-compositor-xrender.c b/src/compositor/meta-compositor-xrender.c
index 72680c2e..b3cfc1d5 100644
--- a/src/compositor/meta-compositor-xrender.c
+++ b/src/compositor/meta-compositor-xrender.c
@@ -104,12 +104,6 @@ typedef struct _MetaCompWindow
   int shadow_dy;
   int shadow_width;
   int shadow_height;
-
-  /* This is a copy of the original unshaded window so that we can still see
-   * what the window looked like when it is needed for the _get_window_surface
-   * function.
-   */
-  cairo_surface_t *shaded_surface;
 } MetaCompWindow;
 
 struct _MetaCompositorXRender
@@ -1282,15 +1276,7 @@ free_win (MetaCompWindow *cw,
     }
 
   if (destroy)
-    {
-      if (cw->shaded_surface != NULL)
-        {
-          cairo_surface_destroy (cw->shaded_surface);
-          cw->shaded_surface = NULL;
-        }
-
-      g_free (cw);
-    }
+    g_free (cw);
 
   meta_error_trap_pop (display);
 }
@@ -1407,25 +1393,6 @@ notify_decorated_cb (MetaWindow            *window,
   add_repair (xrender);
 }
 
-static void
-notify_shaded_cb (MetaWindow  *window,
-                  GParamSpec  *pspec,
-                  MetaSurface *surface)
-{
-  MetaCompWindow *cw;
-
-  cw = g_object_get_data (G_OBJECT (surface), "cw");
-
-  if (cw->shaded_surface != NULL)
-    {
-      cairo_surface_destroy (cw->shaded_surface);
-      cw->shaded_surface = NULL;
-    }
-
-  if (meta_window_is_shaded (cw->window))
-    cw->shaded_surface = meta_surface_get_image (surface);
-}
-
 /* event processors must all be called with an error trap in place */
 static void
 process_property_notify (MetaCompositorXRender *xrender,
@@ -1741,10 +1708,6 @@ meta_compositor_xrender_add_window (MetaCompositor *compositor,
                            G_CALLBACK (notify_decorated_cb),
                            xrender, 0);
 
-  g_signal_connect_object (window, "notify::shaded",
-                           G_CALLBACK (notify_shaded_cb),
-                           surface, 0);
-
   cw->damaged = FALSE;
 
   cw->extents = None;
@@ -1759,8 +1722,6 @@ meta_compositor_xrender_add_window (MetaCompositor *compositor,
   else
     cw->shadow_type = META_SHADOW_MEDIUM;
 
-  cw->shaded_surface = NULL;
-
   determine_mode (xrender, cw);
   cw->needs_shadow = window_has_shadow (xrender, cw);
 
@@ -1912,18 +1873,6 @@ static cairo_surface_t *
 meta_compositor_xrender_get_window_surface (MetaCompositor *compositor,
                                             MetaSurface    *surface)
 {
-  MetaCompWindow *cw;
-
-  cw = g_object_get_data (G_OBJECT (surface), "cw");
-
-  if (meta_window_is_shaded (cw->window))
-    {
-      if (cw->shaded_surface != NULL)
-        return cairo_surface_reference (cw->shaded_surface);
-      else
-        return NULL;
-    }
-
   return meta_surface_get_image (surface);
 }
 
diff --git a/src/compositor/meta-surface.c b/src/compositor/meta-surface.c
index ca976e36..1ea15c45 100644
--- a/src/compositor/meta-surface.c
+++ b/src/compositor/meta-surface.c
@@ -28,27 +28,33 @@
 
 typedef struct
 {
-  MetaCompositor *compositor;
-  MetaWindow     *window;
+  MetaCompositor  *compositor;
+  MetaWindow      *window;
 
-  MetaDisplay    *display;
-  Display        *xdisplay;
+  MetaDisplay     *display;
+  Display         *xdisplay;
 
-  Damage          damage;
-  gboolean        damage_received;
+  Damage           damage;
+  gboolean         damage_received;
 
-  Pixmap          pixmap;
+  Pixmap           pixmap;
 
-  int             x;
-  int             y;
-  int             width;
-  int             height;
+  int              x;
+  int              y;
+  int              width;
+  int              height;
 
-  XserverRegion   shape_region;
-  gboolean        shape_region_changed;
+  XserverRegion    shape_region;
+  gboolean         shape_region_changed;
 
-  XserverRegion   opaque_region;
-  gboolean        opaque_region_changed;
+  XserverRegion    opaque_region;
+  gboolean         opaque_region_changed;
+
+  /* This is a copy of the original unshaded window so that we can still see
+   * what the window looked like when it is needed for the _get_window_surface
+   * function.
+   */
+  cairo_surface_t *shaded_surface;
 } MetaSurfacePrivate;
 
 enum
@@ -307,6 +313,25 @@ notify_decorated_cb (MetaWindow  *window,
   create_damage (self);
 }
 
+static void
+notify_shaded_cb (MetaWindow  *window,
+                  GParamSpec  *pspec,
+                  MetaSurface *self)
+{
+  MetaSurfacePrivate *priv;
+
+  priv = meta_surface_get_instance_private (self);
+
+  if (priv->shaded_surface != NULL)
+    {
+      cairo_surface_destroy (priv->shaded_surface);
+      priv->shaded_surface = NULL;
+    }
+
+  if (meta_window_is_shaded (priv->window))
+    priv->shaded_surface = META_SURFACE_GET_CLASS (self)->get_image (self);
+}
+
 static void
 meta_surface_constructed (GObject *object)
 {
@@ -327,6 +352,10 @@ meta_surface_constructed (GObject *object)
   g_signal_connect_object (priv->window, "notify::decorated",
                            G_CALLBACK (notify_decorated_cb),
                            self, 0);
+
+  g_signal_connect_object (priv->window, "notify::shaded",
+                           G_CALLBACK (notify_shaded_cb),
+                           self, 0);
 }
 
 static void
@@ -362,6 +391,12 @@ meta_surface_finalize (GObject *object)
       priv->opaque_region = None;
     }
 
+  if (priv->shaded_surface != NULL)
+    {
+      cairo_surface_destroy (priv->shaded_surface);
+      priv->shaded_surface = NULL;
+    }
+
   G_OBJECT_CLASS (meta_surface_parent_class)->finalize (object);
 }
 
@@ -555,6 +590,18 @@ meta_surface_get_shape_region (MetaSurface *self)
 cairo_surface_t *
 meta_surface_get_image (MetaSurface *self)
 {
+  MetaSurfacePrivate *priv;
+
+  priv = meta_surface_get_instance_private (self);
+
+  if (meta_window_is_shaded (priv->window))
+    {
+      if (priv->shaded_surface != NULL)
+        return cairo_surface_reference (priv->shaded_surface);
+      else
+        return NULL;
+    }
+
   return META_SURFACE_GET_CLASS (self)->get_image (self);
 }
 


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