[mutter/wip/carlosg/x11less-preparations: 5/18] x11: Move X11 calls to map/unmap a MetaWindow to MetaWindowX11



commit aaf2badf20b999dff14530f7698052a8a0137a3a
Author: Carlos Garnacho <carlosg gnome org>
Date:   Sun Dec 30 13:55:52 2018 +0100

    x11: Move X11 calls to map/unmap a MetaWindow to MetaWindowX11
    
    Add 2 vmethods so that MetaWindowX11 may handle the X11 calls itself.
    
    https://gitlab.gnome.org/GNOME/mutter/merge_requests/420

 src/core/window-private.h |  3 +++
 src/core/window.c         | 25 +++++++++++++++----------
 src/x11/window-x11.c      | 27 +++++++++++++++++++++++++++
 3 files changed, 45 insertions(+), 10 deletions(-)
---
diff --git a/src/core/window-private.h b/src/core/window-private.h
index b9f1fcea3..e268c5eb8 100644
--- a/src/core/window-private.h
+++ b/src/core/window-private.h
@@ -570,6 +570,9 @@ struct _MetaWindowClass
   gboolean (*is_stackable)        (MetaWindow *window);
   gboolean (*can_ping)            (MetaWindow *window);
   gboolean (*are_updates_frozen)  (MetaWindow *window);
+
+  void (* map)   (MetaWindow *window);
+  void (* unmap) (MetaWindow *window);
 };
 
 /* These differ from window->has_foo_func in that they consider
diff --git a/src/core/window.c b/src/core/window.c
index f9c96fe91..ebd5eac1f 100644
--- a/src/core/window.c
+++ b/src/core/window.c
@@ -300,6 +300,16 @@ meta_window_real_get_client_pid (MetaWindow *window)
   return 0;
 }
 
+static void
+meta_window_real_map (MetaWindow *window)
+{
+}
+
+static void
+meta_window_real_unmap (MetaWindow *window)
+{
+}
+
 static void
 meta_window_finalize (GObject *object)
 {
@@ -469,6 +479,8 @@ meta_window_class_init (MetaWindowClass *klass)
   klass->get_default_skip_hints = meta_window_real_get_default_skip_hints;
   klass->update_icon = meta_window_real_update_icon;
   klass->get_client_pid = meta_window_real_get_client_pid;
+  klass->map = meta_window_real_map;
+  klass->unmap = meta_window_real_unmap;
 
   obj_props[PROP_TITLE] =
     g_param_spec_string ("title",
@@ -808,17 +820,10 @@ sync_client_window_mapped (MetaWindow *window)
 
   window->mapped = should_be_mapped;
 
-  meta_x11_error_trap_push (window->display->x11_display);
-  if (should_be_mapped)
-    {
-      XMapWindow (window->display->x11_display->xdisplay, window->xwindow);
-    }
+  if (window->mapped)
+    META_WINDOW_GET_CLASS (window)->map (window);
   else
-    {
-      XUnmapWindow (window->display->x11_display->xdisplay, window->xwindow);
-      window->unmaps_pending ++;
-    }
-  meta_x11_error_trap_pop (window->display->x11_display);
+    META_WINDOW_GET_CLASS (window)->unmap (window);
 }
 
 static gboolean
diff --git a/src/x11/window-x11.c b/src/x11/window-x11.c
index 6f3675cbc..dade54037 100644
--- a/src/x11/window-x11.c
+++ b/src/x11/window-x11.c
@@ -1706,6 +1706,31 @@ meta_window_x11_are_updates_frozen (MetaWindow *window)
   return FALSE;
 }
 
+static void
+meta_window_x11_map (MetaWindow *window)
+{
+  MetaX11Display *x11_display = window->display->x11_display;
+
+  meta_x11_error_trap_push (x11_display);
+  XMapWindow (x11_display->xdisplay, window->xwindow);
+  meta_x11_error_trap_pop (x11_display);
+
+  META_WINDOW_CLASS (meta_window_x11_parent_class)->map (window);
+}
+
+static void
+meta_window_x11_unmap (MetaWindow *window)
+{
+  MetaX11Display *x11_display = window->display->x11_display;
+
+  meta_x11_error_trap_push (x11_display);
+  XUnmapWindow (x11_display->xdisplay, window->xwindow);
+  meta_x11_error_trap_pop (x11_display);
+  window->unmaps_pending ++;
+
+  META_WINDOW_CLASS (meta_window_x11_parent_class)->unmap (window);
+}
+
 static void
 meta_window_x11_class_init (MetaWindowX11Class *klass)
 {
@@ -1733,6 +1758,8 @@ meta_window_x11_class_init (MetaWindowX11Class *klass)
   window_class->is_stackable = meta_window_x11_is_stackable;
   window_class->can_ping = meta_window_x11_can_ping;
   window_class->are_updates_frozen = meta_window_x11_are_updates_frozen;
+  window_class->map = meta_window_x11_map;
+  window_class->unmap = meta_window_x11_unmap;
 }
 
 void


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