mirror of
https://github.com/brl/mutter.git
synced 2025-02-16 13:24:09 +00:00
window: Delegate map and unmap to subclasses
As of now, the base class MetaWindow is calling into X11 API when mapping and unmapping a window. Even on purely Wayland clients. Fix that by moving those calls to MetaWindow subclasses. On MetaWindowX11, it calls into X11 APIs, and the Wayland implementation is stub. https://gitlab.gnome.org/GNOME/mutter/merge_requests/372
This commit is contained in:
parent
b4d55325d7
commit
43307c6b84
@ -517,6 +517,8 @@ struct _MetaWindowClass
|
||||
|
||||
void (*manage) (MetaWindow *window);
|
||||
void (*unmanage) (MetaWindow *window);
|
||||
void (*map) (MetaWindow *window);
|
||||
void (*unmap) (MetaWindow *window);
|
||||
void (*ping) (MetaWindow *window,
|
||||
guint32 serial);
|
||||
void (*delete) (MetaWindow *window,
|
||||
|
@ -799,6 +799,7 @@ client_window_should_be_mapped (MetaWindow *window)
|
||||
static void
|
||||
sync_client_window_mapped (MetaWindow *window)
|
||||
{
|
||||
MetaWindowClass *window_class = META_WINDOW_GET_CLASS (window);
|
||||
gboolean should_be_mapped = client_window_should_be_mapped (window);
|
||||
|
||||
g_return_if_fail (!window->override_redirect);
|
||||
@ -808,17 +809,15 @@ 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);
|
||||
window_class->map (window);
|
||||
}
|
||||
else
|
||||
{
|
||||
XUnmapWindow (window->display->x11_display->xdisplay, window->xwindow);
|
||||
window_class->unmap (window);
|
||||
window->unmaps_pending ++;
|
||||
}
|
||||
meta_x11_error_trap_pop (window->display->x11_display);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
|
@ -111,6 +111,16 @@ meta_window_wayland_unmanage (MetaWindow *window)
|
||||
meta_display_unregister_wayland_window (window->display, window);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_window_wayland_map (MetaWindow *window)
|
||||
{
|
||||
}
|
||||
|
||||
static void
|
||||
meta_window_wayland_unmap (MetaWindow *window)
|
||||
{
|
||||
}
|
||||
|
||||
static void
|
||||
meta_window_wayland_ping (MetaWindow *window,
|
||||
guint32 serial)
|
||||
@ -618,6 +628,8 @@ meta_window_wayland_class_init (MetaWindowWaylandClass *klass)
|
||||
|
||||
window_class->manage = meta_window_wayland_manage;
|
||||
window_class->unmanage = meta_window_wayland_unmanage;
|
||||
window_class->map = meta_window_wayland_map;
|
||||
window_class->unmap = meta_window_wayland_unmap;
|
||||
window_class->ping = meta_window_wayland_ping;
|
||||
window_class->delete = meta_window_wayland_delete;
|
||||
window_class->kill = meta_window_wayland_kill;
|
||||
|
@ -709,6 +709,28 @@ meta_window_x11_can_ping (MetaWindow *window)
|
||||
return priv->wm_ping;
|
||||
}
|
||||
|
||||
static void
|
||||
meta_window_x11_map (MetaWindow *window)
|
||||
{
|
||||
meta_x11_error_trap_push (window->display->x11_display);
|
||||
|
||||
XMapWindow (window->display->x11_display->xdisplay,
|
||||
window->xwindow);
|
||||
|
||||
meta_x11_error_trap_pop (window->display->x11_display);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_window_x11_unmap (MetaWindow *window)
|
||||
{
|
||||
meta_x11_error_trap_push (window->display->x11_display);
|
||||
|
||||
XUnmapWindow (window->display->x11_display->xdisplay,
|
||||
window->xwindow);
|
||||
|
||||
meta_x11_error_trap_pop (window->display->x11_display);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_window_x11_ping (MetaWindow *window,
|
||||
guint32 serial)
|
||||
@ -1728,6 +1750,8 @@ meta_window_x11_class_init (MetaWindowX11Class *klass)
|
||||
|
||||
window_class->manage = meta_window_x11_manage;
|
||||
window_class->unmanage = meta_window_x11_unmanage;
|
||||
window_class->map = meta_window_x11_map;
|
||||
window_class->unmap = meta_window_x11_unmap;
|
||||
window_class->ping = meta_window_x11_ping;
|
||||
window_class->delete = meta_window_x11_delete;
|
||||
window_class->kill = meta_window_x11_kill;
|
||||
|
Loading…
x
Reference in New Issue
Block a user