[mutter/wip/carlosg/x11less-preparations: 8/18] x11: Move X11 calls to map/unmap a MetaWindow to MetaWindowX11
- From: Jonas Ådahl <jadahl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter/wip/carlosg/x11less-preparations: 8/18] x11: Move X11 calls to map/unmap a MetaWindow to MetaWindowX11
- Date: Fri, 24 May 2019 15:31:13 +0000 (UTC)
commit 5e0523cc8bbcc639a48071d4021716319e356582
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 | 13 +++----------
src/wayland/meta-window-wayland.c | 12 ++++++++++++
src/x11/window-x11.c | 23 +++++++++++++++++++++++
4 files changed, 41 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 c37afa36b..abd56bfe9 100644
--- a/src/core/window.c
+++ b/src/core/window.c
@@ -809,17 +809,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/wayland/meta-window-wayland.c b/src/wayland/meta-window-wayland.c
index c7c3785d8..0b0f6bb66 100644
--- a/src/wayland/meta-window-wayland.c
+++ b/src/wayland/meta-window-wayland.c
@@ -611,6 +611,16 @@ meta_window_wayland_are_updates_frozen (MetaWindow *window)
return !wl_window->has_been_shown;
}
+static void
+meta_window_wayland_map (MetaWindow *window)
+{
+}
+
+static void
+meta_window_wayland_unmap (MetaWindow *window)
+{
+}
+
static void
meta_window_wayland_class_init (MetaWindowWaylandClass *klass)
{
@@ -634,6 +644,8 @@ meta_window_wayland_class_init (MetaWindowWaylandClass *klass)
window_class->is_stackable = meta_window_wayland_is_stackable;
window_class->can_ping = meta_window_wayland_can_ping;
window_class->are_updates_frozen = meta_window_wayland_are_updates_frozen;
+ window_class->map = meta_window_wayland_map;
+ window_class->unmap = meta_window_wayland_unmap;
}
MetaWindow *
diff --git a/src/x11/window-x11.c b/src/x11/window-x11.c
index edb378ae9..fd19766bb 100644
--- a/src/x11/window-x11.c
+++ b/src/x11/window-x11.c
@@ -1706,6 +1706,27 @@ 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);
+}
+
+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 ++;
+}
+
static void
meta_window_x11_class_init (MetaWindowX11Class *klass)
{
@@ -1733,6 +1754,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]