[mutter] window/x11: Use G_DECLARE_DERIVABLE_TYPE()



commit 0f8f607e4c502a87d8f5aedf7de6944c50689e5f
Author: Jonas Ådahl <jadahl gmail com>
Date:   Tue Aug 20 21:38:35 2019 +0200

    window/x11: Use G_DECLARE_DERIVABLE_TYPE()
    
    This removes the MetaWindowX11::priv pointer. It is replaced with a
    meta_window_x11_get_private() helper function, and another method to get
    the client rect without going through MetaWindowX11Private.
    
    https://gitlab.gnome.org/GNOME/mutter/merge_requests/798

 src/ui/frames.c              | 16 ++++++++++------
 src/x11/window-props.c       | 14 +++++++-------
 src/x11/window-x11-private.h | 19 +++----------------
 src/x11/window-x11.c         | 15 ++++++++++++++-
 src/x11/window-x11.h         | 25 ++++++++++++++-----------
 5 files changed, 48 insertions(+), 41 deletions(-)
---
diff --git a/src/ui/frames.c b/src/ui/frames.c
index 0f3bcbd2b..58d653543 100644
--- a/src/ui/frames.c
+++ b/src/ui/frames.c
@@ -417,7 +417,7 @@ meta_ui_frame_calc_geometry (MetaUIFrame       *frame,
   MetaFrameType type;
   MetaButtonLayout button_layout;
   MetaWindowX11 *window_x11 = META_WINDOW_X11 (frame->meta_window);
-  MetaWindowX11Private *priv = window_x11->priv;
+  MetaRectangle client_rect;
 
   flags = meta_frame_get_flags (frame->meta_window->frame);
   type = meta_window_get_frame_type (frame->meta_window);
@@ -426,13 +426,15 @@ meta_ui_frame_calc_geometry (MetaUIFrame       *frame,
 
   meta_prefs_get_button_layout (&button_layout);
 
+  client_rect = meta_window_x11_get_client_rect (window_x11);
+
   meta_theme_calc_geometry (meta_theme_get_default (),
                             frame->style_info,
                             type,
                             frame->text_height,
                             flags,
-                            priv->client_rect.width,
-                            priv->client_rect.height,
+                            client_rect.width,
+                            client_rect.height,
                             &button_layout,
                             fgeom);
 }
@@ -1520,7 +1522,7 @@ meta_ui_frame_paint (MetaUIFrame  *frame,
   int button_type = -1;
   MetaButtonLayout button_layout;
   MetaWindowX11 *window_x11 = META_WINDOW_X11 (frame->meta_window);
-  MetaWindowX11Private *priv = window_x11->priv;
+  MetaRectangle client_rect;
 
   for (i = 0; i < META_BUTTON_TYPE_LAST; i++)
     button_states[i] = META_BUTTON_STATE_NORMAL;
@@ -1558,13 +1560,15 @@ meta_ui_frame_paint (MetaUIFrame  *frame,
 
   meta_prefs_get_button_layout (&button_layout);
 
+  client_rect = meta_window_x11_get_client_rect (window_x11);
+
   meta_theme_draw_frame (meta_theme_get_default (),
                          frame->style_info,
                          cr,
                          type,
                          flags,
-                         priv->client_rect.width,
-                         priv->client_rect.height,
+                         client_rect.width,
+                         client_rect.height,
                          frame->text_layout,
                          frame->text_height,
                          &button_layout,
diff --git a/src/x11/window-props.c b/src/x11/window-props.c
index 3cad2cd1d..0596166cb 100644
--- a/src/x11/window-props.c
+++ b/src/x11/window-props.c
@@ -249,7 +249,7 @@ reload_net_wm_window_type (MetaWindow    *window,
 {
   MetaX11Display *x11_display = window->display->x11_display;
   MetaWindowX11 *window_x11 = META_WINDOW_X11 (window);
-  MetaWindowX11Private *priv = window_x11->priv;
+  MetaWindowX11Private *priv = meta_window_x11_get_private (window_x11);
 
   if (value->type != META_PROP_VALUE_INVALID)
     {
@@ -291,7 +291,7 @@ reload_icon (MetaWindow    *window,
              Atom           atom)
 {
   MetaWindowX11 *window_x11 = META_WINDOW_X11 (window);
-  MetaWindowX11Private *priv = window_x11->priv;
+  MetaWindowX11Private *priv = meta_window_x11_get_private (window_x11);
 
   meta_icon_cache_property_changed (&priv->icon_cache,
                                     window->display->x11_display,
@@ -596,7 +596,7 @@ set_window_title (MetaWindow *window,
                   const char *title)
 {
   MetaWindowX11 *window_x11 = META_WINDOW_X11 (window);
-  MetaWindowX11Private *priv = window_x11->priv;
+  MetaWindowX11Private *priv = meta_window_x11_get_private (window_x11);
 
   char *new_title = NULL;
 
@@ -619,7 +619,7 @@ reload_net_wm_name (MetaWindow    *window,
                     gboolean       initial)
 {
   MetaWindowX11 *window_x11 = META_WINDOW_X11 (window);
-  MetaWindowX11Private *priv = window_x11->priv;
+  MetaWindowX11Private *priv = meta_window_x11_get_private (window_x11);
 
   if (value->type != META_PROP_VALUE_INVALID)
     {
@@ -644,7 +644,7 @@ reload_wm_name (MetaWindow    *window,
                 gboolean       initial)
 {
   MetaWindowX11 *window_x11 = META_WINDOW_X11 (window);
-  MetaWindowX11Private *priv = window_x11->priv;
+  MetaWindowX11Private *priv = meta_window_x11_get_private (window_x11);
 
   if (priv->using_net_wm_name)
     {
@@ -784,7 +784,7 @@ reload_net_wm_state (MetaWindow    *window,
 {
   MetaX11Display *x11_display = window->display->x11_display;
   MetaWindowX11 *window_x11 = META_WINDOW_X11 (window);
-  MetaWindowX11Private *priv = window_x11->priv;
+  MetaWindowX11Private *priv = meta_window_x11_get_private (window_x11);
 
   int i;
 
@@ -1565,7 +1565,7 @@ reload_wm_hints (MetaWindow    *window,
                  gboolean       initial)
 {
   MetaWindowX11 *window_x11 = META_WINDOW_X11 (window);
-  MetaWindowX11Private *priv = window_x11->priv;
+  MetaWindowX11Private *priv = meta_window_x11_get_private (window_x11);
   Window old_group_leader;
   gboolean urgent;
 
diff --git a/src/x11/window-x11-private.h b/src/x11/window-x11-private.h
index 906d44546..2ffaa85d4 100644
--- a/src/x11/window-x11-private.h
+++ b/src/x11/window-x11-private.h
@@ -25,27 +25,12 @@
 
 #include "core/window-private.h"
 #include "x11/iconcache.h"
+#include "x11/window-x11.h"
 
 G_BEGIN_DECLS
 
 typedef struct _MetaWindowX11Private MetaWindowX11Private;
 
-struct _MetaWindowX11Class
-{
-  MetaWindowClass parent_class;
-
-  void (*freeze_commits) (MetaWindow *window);
-  void (*thaw_commits)   (MetaWindow *window);
-  gboolean (*always_update_shape) (MetaWindow *window);
-};
-
-struct _MetaWindowX11
-{
-  MetaWindow parent;
-
-  MetaWindowX11Private *priv;
-};
-
 struct _MetaWindowX11Private
 {
   /* TRUE if the client forced these on */
@@ -81,6 +66,8 @@ struct _MetaWindowX11Private
   gboolean thaw_after_paint;
 };
 
+MetaWindowX11Private * meta_window_x11_get_private (MetaWindowX11 *window_x11);
+
 G_END_DECLS
 
 #endif
diff --git a/src/x11/window-x11.c b/src/x11/window-x11.c
index ed56bca5f..4d850943d 100644
--- a/src/x11/window-x11.c
+++ b/src/x11/window-x11.c
@@ -73,7 +73,12 @@ meta_window_x11_maybe_focus_delayed (MetaWindow *window,
 static void
 meta_window_x11_init (MetaWindowX11 *window_x11)
 {
-  window_x11->priv = meta_window_x11_get_instance_private (window_x11);
+}
+
+MetaWindowX11Private *
+meta_window_x11_get_private (MetaWindowX11 *window_x11)
+{
+  return meta_window_x11_get_instance_private (window_x11);
 }
 
 static void
@@ -4108,3 +4113,11 @@ meta_window_x11_surface_rect_to_client_rect (MetaWindow    *window,
   client_rect->width -= borders.total.left + borders.total.right;
   client_rect->height -= borders.total.top + borders.total.bottom;
 }
+
+MetaRectangle
+meta_window_x11_get_client_rect (MetaWindowX11 *window_x11)
+{
+  MetaWindowX11Private *priv = meta_window_x11_get_instance_private (window_x11);
+
+  return priv->client_rect;
+}
diff --git a/src/x11/window-x11.h b/src/x11/window-x11.h
index d41d0d156..591d8f951 100644
--- a/src/x11/window-x11.h
+++ b/src/x11/window-x11.h
@@ -25,24 +25,24 @@
 
 #include <X11/Xlib.h>
 
+#include "core/window-private.h"
 #include "meta/compositor.h"
 #include "meta/window.h"
 
 G_BEGIN_DECLS
 
-#define META_TYPE_WINDOW_X11            (meta_window_x11_get_type())
-#define META_WINDOW_X11(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), META_TYPE_WINDOW_X11, 
MetaWindowX11))
-#define META_WINDOW_X11_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass),  META_TYPE_WINDOW_X11, 
MetaWindowX11Class))
-#define META_IS_WINDOW_X11(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), META_TYPE_WINDOW_X11))
-#define META_IS_WINDOW_X11_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),  META_TYPE_WINDOW_X11))
-#define META_WINDOW_X11_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj),  META_TYPE_WINDOW_X11, 
MetaWindowX11Class))
+#define META_TYPE_WINDOW_X11 (meta_window_x11_get_type())
+G_DECLARE_DERIVABLE_TYPE (MetaWindowX11, meta_window_x11,
+                          META, WINDOW_X11, MetaWindow)
 
-GType meta_window_x11_get_type (void);
+struct _MetaWindowX11Class
+{
+  MetaWindowClass parent_class;
 
-typedef struct _MetaWindowX11      MetaWindowX11;
-typedef struct _MetaWindowX11Class MetaWindowX11Class;
-
-G_DEFINE_AUTOPTR_CLEANUP_FUNC (MetaWindowX11, g_object_unref)
+  void (*freeze_commits) (MetaWindow *window);
+  void (*thaw_commits)   (MetaWindow *window);
+  gboolean (*always_update_shape) (MetaWindow *window);
+};
 
 MetaWindow * meta_window_x11_new           (MetaDisplay        *display,
                                             Window              xwindow,
@@ -95,4 +95,7 @@ void meta_window_x11_surface_rect_to_frame_rect  (MetaWindow    *window,
 void meta_window_x11_surface_rect_to_client_rect (MetaWindow    *window,
                                                   MetaRectangle *surface_rect,
                                                   MetaRectangle *client_rect);
+
+MetaRectangle meta_window_x11_get_client_rect    (MetaWindowX11 *window_x11);
+
 #endif


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