[mutter/wip/carlosg/xwayland-on-demand: 17/27] 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/xwayland-on-demand: 17/27] x11: Move X11 calls to map/unmap a MetaWindow to MetaWindowX11
- Date: Tue, 16 Apr 2019 17:22:56 +0000 (UTC)
commit de22bcc5a078750f57fa135c0c8401d43530c632
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.
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 06be5aad8..eb497659f 100644
--- a/src/core/window-private.h
+++ b/src/core/window-private.h
@@ -581,6 +581,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 5454a79a5..e944ce207 100644
--- a/src/core/window.c
+++ b/src/core/window.c
@@ -301,6 +301,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)
{
@@ -470,6 +480,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",
@@ -809,17 +821,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]