[mutter/wip/carlosg/x11less-preparations: 5/18] x11: Move X11 calls to map/unmap a MetaWindow to MetaWindowX11
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter/wip/carlosg/x11less-preparations: 5/18] x11: Move X11 calls to map/unmap a MetaWindow to MetaWindowX11
- Date: Mon, 25 Feb 2019 18:09:27 +0000 (UTC)
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]