backend-x11: Use a mode switch to determine whether we're nested or not
The "meta_is_wayland_compositor" checks were getting a bit difficult to read.
This commit is contained in:
parent
d593a61b39
commit
6aead0c67c
@ -46,6 +46,14 @@
|
|||||||
#include "display-private.h"
|
#include "display-private.h"
|
||||||
#include "compositor/compositor-private.h"
|
#include "compositor/compositor-private.h"
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
/* We're a traditional CM running under the host. */
|
||||||
|
META_BACKEND_X11_MODE_COMPOSITOR,
|
||||||
|
|
||||||
|
/* We're a nested X11 client */
|
||||||
|
META_BACKEND_X11_MODE_NESTED,
|
||||||
|
} MetaBackendX11Mode;
|
||||||
|
|
||||||
struct _MetaBackendX11Private
|
struct _MetaBackendX11Private
|
||||||
{
|
{
|
||||||
/* The host X11 display */
|
/* The host X11 display */
|
||||||
@ -53,6 +61,8 @@ struct _MetaBackendX11Private
|
|||||||
xcb_connection_t *xcb;
|
xcb_connection_t *xcb;
|
||||||
GSource *source;
|
GSource *source;
|
||||||
|
|
||||||
|
MetaBackendX11Mode mode;
|
||||||
|
|
||||||
int xsync_event_base;
|
int xsync_event_base;
|
||||||
int xsync_error_base;
|
int xsync_error_base;
|
||||||
|
|
||||||
@ -102,7 +112,7 @@ translate_device_event (MetaBackendX11 *x11,
|
|||||||
/* This codepath should only ever trigger as an X11 compositor,
|
/* This codepath should only ever trigger as an X11 compositor,
|
||||||
* and never under nested, as under nested all backend events
|
* and never under nested, as under nested all backend events
|
||||||
* should be reported with respect to the stage window. */
|
* should be reported with respect to the stage window. */
|
||||||
g_assert (!meta_is_wayland_compositor ());
|
g_assert (priv->mode == META_BACKEND_X11_MODE_COMPOSITOR);
|
||||||
|
|
||||||
device_event->event = stage_window;
|
device_event->event = stage_window;
|
||||||
|
|
||||||
@ -461,13 +471,18 @@ meta_backend_x11_create_idle_monitor (MetaBackend *backend,
|
|||||||
static MetaMonitorManager *
|
static MetaMonitorManager *
|
||||||
meta_backend_x11_create_monitor_manager (MetaBackend *backend)
|
meta_backend_x11_create_monitor_manager (MetaBackend *backend)
|
||||||
{
|
{
|
||||||
/* If we're a Wayland compositor using the X11 backend,
|
MetaBackendX11 *x11 = META_BACKEND_X11 (backend);
|
||||||
* we're a nested configuration, so return the dummy
|
MetaBackendX11Private *priv = meta_backend_x11_get_instance_private (x11);
|
||||||
* monitor setup. */
|
|
||||||
if (meta_is_wayland_compositor ())
|
|
||||||
return g_object_new (META_TYPE_MONITOR_MANAGER_DUMMY, NULL);
|
|
||||||
|
|
||||||
return g_object_new (META_TYPE_MONITOR_MANAGER_XRANDR, NULL);
|
switch (priv->mode)
|
||||||
|
{
|
||||||
|
case META_BACKEND_X11_MODE_COMPOSITOR:
|
||||||
|
return g_object_new (META_TYPE_MONITOR_MANAGER_XRANDR, NULL);
|
||||||
|
case META_BACKEND_X11_MODE_NESTED:
|
||||||
|
return g_object_new (META_TYPE_MONITOR_MANAGER_DUMMY, NULL);
|
||||||
|
default:
|
||||||
|
g_assert_not_reached ();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static MetaCursorRenderer *
|
static MetaCursorRenderer *
|
||||||
@ -721,7 +736,10 @@ static void
|
|||||||
meta_backend_x11_update_screen_size (MetaBackend *backend,
|
meta_backend_x11_update_screen_size (MetaBackend *backend,
|
||||||
int width, int height)
|
int width, int height)
|
||||||
{
|
{
|
||||||
if (meta_is_wayland_compositor ())
|
MetaBackendX11 *x11 = META_BACKEND_X11 (backend);
|
||||||
|
MetaBackendX11Private *priv = meta_backend_x11_get_instance_private (x11);
|
||||||
|
|
||||||
|
if (priv->mode == META_BACKEND_X11_MODE_NESTED)
|
||||||
{
|
{
|
||||||
/* For a nested wayland session, we want to go through Clutter to update the
|
/* For a nested wayland session, we want to go through Clutter to update the
|
||||||
* toplevel window size, rather than doing it directly.
|
* toplevel window size, rather than doing it directly.
|
||||||
@ -783,8 +801,15 @@ meta_backend_x11_class_init (MetaBackendX11Class *klass)
|
|||||||
static void
|
static void
|
||||||
meta_backend_x11_init (MetaBackendX11 *x11)
|
meta_backend_x11_init (MetaBackendX11 *x11)
|
||||||
{
|
{
|
||||||
|
MetaBackendX11Private *priv = meta_backend_x11_get_instance_private (x11);
|
||||||
|
|
||||||
/* We do X11 event retrieval ourselves */
|
/* We do X11 event retrieval ourselves */
|
||||||
clutter_x11_disable_event_retrieval ();
|
clutter_x11_disable_event_retrieval ();
|
||||||
|
|
||||||
|
if (meta_is_wayland_compositor ())
|
||||||
|
priv->mode = META_BACKEND_X11_MODE_NESTED;
|
||||||
|
else
|
||||||
|
priv->mode = META_BACKEND_X11_MODE_COMPOSITOR;
|
||||||
}
|
}
|
||||||
|
|
||||||
Display *
|
Display *
|
||||||
|
Loading…
x
Reference in New Issue
Block a user