summaryrefslogtreecommitdiff
path: root/src/wayland/meta-xwayland.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/wayland/meta-xwayland.c')
-rw-r--r--src/wayland/meta-xwayland.c81
1 files changed, 54 insertions, 27 deletions
diff --git a/src/wayland/meta-xwayland.c b/src/wayland/meta-xwayland.c
index a937f0ec8..fc447d2e9 100644
--- a/src/wayland/meta-xwayland.c
+++ b/src/wayland/meta-xwayland.c
@@ -71,6 +71,16 @@ static void meta_xwayland_stop_xserver (MetaXWaylandManager *manager);
static void
meta_xwayland_set_primary_output (MetaX11Display *x11_display);
+static MetaMonitorManager *
+monitor_manager_from_x11_display (MetaX11Display *x11_display)
+{
+ MetaDisplay *display = meta_x11_display_get_display (x11_display);
+ MetaContext *context = meta_display_get_context (display);
+ MetaBackend *backend = meta_context_get_backend (context);
+
+ return meta_backend_get_monitor_manager (backend);
+}
+
void
meta_xwayland_associate_window_with_surface (MetaWindow *window,
MetaWaylandSurface *surface)
@@ -118,7 +128,10 @@ void
meta_xwayland_handle_wl_surface_id (MetaWindow *window,
guint32 surface_id)
{
- MetaWaylandCompositor *compositor = meta_wayland_compositor_get_default ();
+ MetaDisplay *display = meta_window_get_display (window);
+ MetaContext *context = meta_display_get_context (display);
+ MetaWaylandCompositor *compositor =
+ meta_context_get_wayland_compositor (context);
MetaXWaylandManager *manager = &compositor->xwayland_manager;
if (!associate_window_with_surface_id (manager, window, surface_id))
@@ -134,7 +147,7 @@ meta_xwayland_handle_wl_surface_id (MetaWindow *window,
gboolean
meta_xwayland_is_xwayland_surface (MetaWaylandSurface *surface)
{
- MetaWaylandCompositor *compositor = meta_wayland_compositor_get_default ();
+ MetaWaylandCompositor *compositor = surface->compositor;
MetaXWaylandManager *manager = &compositor->xwayland_manager;
return surface->resource != NULL &&
@@ -399,9 +412,11 @@ xserver_died (GObject *source,
GAsyncResult *result,
gpointer user_data)
{
- MetaWaylandCompositor *compositor;
+ MetaXWaylandManager *manager = user_data;
+ MetaWaylandCompositor *compositor = manager->compositor;
+ MetaContext *context = meta_wayland_compositor_get_context (compositor);
+ MetaDisplay *display = meta_context_get_display (context);
GSubprocess *proc = G_SUBPROCESS (source);
- MetaDisplay *display = meta_get_display ();
g_autoptr (GError) error = NULL;
MetaX11DisplayPolicy x11_display_policy;
@@ -413,7 +428,6 @@ xserver_died (GObject *source,
g_warning ("Failed to finish waiting for Xwayland: %s", error->message);
}
- compositor = meta_wayland_compositor_get_default ();
x11_display_policy =
meta_context_get_x11_display_policy (compositor->context);
if (!g_subprocess_get_successful (proc))
@@ -446,7 +460,9 @@ xserver_died (GObject *source,
static void
meta_xwayland_terminate (MetaXWaylandManager *manager)
{
- MetaDisplay *display = meta_get_display ();
+ MetaContext *context =
+ meta_wayland_compositor_get_context (manager->compositor);
+ MetaDisplay *display = meta_context_get_display (context);
meta_display_shutdown_x11 (display);
meta_xwayland_stop_xserver (manager);
@@ -777,20 +793,20 @@ meta_xwayland_start_xserver (MetaXWaylandManager *manager,
GAsyncReadyCallback callback,
gpointer user_data)
{
+ MetaWaylandCompositor *compositor = manager->compositor;
+ MetaContext *context = meta_wayland_compositor_get_context (compositor);
+ MetaBackend *backend = meta_context_get_backend (context);
int xwayland_client_fd[2];
int displayfd[2];
g_autoptr(GSubprocessLauncher) launcher = NULL;
GSubprocessFlags flags;
GError *error = NULL;
g_autoptr (GTask) task = NULL;
- MetaBackend *backend;
MetaSettings *settings;
const char *args[32];
int xwayland_disable_extensions;
int i, j;
#ifdef HAVE_XWAYLAND_TERMINATE_DELAY
- MetaWaylandCompositor *compositor =
- meta_wayland_compositor_get_default ();
MetaX11DisplayPolicy x11_display_policy =
meta_context_get_x11_display_policy (compositor->context);
#endif
@@ -838,7 +854,6 @@ meta_xwayland_start_xserver (MetaXWaylandManager *manager,
flags |= G_SUBPROCESS_FLAGS_STDERR_SILENCE;
}
- backend = meta_get_backend ();
settings = meta_backend_get_settings (backend);
xwayland_disable_extensions =
meta_settings_get_xwayland_disable_extensions (settings);
@@ -931,7 +946,7 @@ meta_xwayland_start_xserver (MetaXWaylandManager *manager,
manager->xserver_died_cancellable = g_cancellable_new ();
g_subprocess_wait_async (manager->proc, manager->xserver_died_cancellable,
- xserver_died, NULL);
+ xserver_died, manager);
g_unix_fd_add (displayfd[0], G_IO_IN, on_displayfd_ready,
g_steal_pointer (&task));
manager->client = wl_client_create (manager->wayland_display,
@@ -955,7 +970,9 @@ xdisplay_connection_activity_cb (gint fd,
gpointer user_data)
{
MetaXWaylandManager *manager = user_data;
- MetaDisplay *display = meta_get_display ();
+ MetaContext *context =
+ meta_wayland_compositor_get_context (manager->compositor);
+ MetaDisplay *display = meta_context_get_display (context);
meta_display_init_x11 (display, NULL,
(GAsyncReadyCallback) on_init_x11_cb, NULL);
@@ -1042,9 +1059,13 @@ meta_xwayland_init (MetaXWaylandManager *manager,
}
static void
-monitors_changed_cb (MetaMonitorManager *monitor_manager)
+monitors_changed_cb (MetaMonitorManager *monitor_manager,
+ MetaXWaylandManager *manager)
{
- MetaX11Display *x11_display = meta_get_display ()->x11_display;
+ MetaContext *context =
+ meta_wayland_compositor_get_context (manager->compositor);
+ MetaDisplay *display = meta_context_get_display (context);
+ MetaX11Display *x11_display = display->x11_display;
meta_xwayland_set_primary_output (x11_display);
}
@@ -1054,18 +1075,21 @@ on_x11_display_closing (MetaDisplay *display,
MetaXWaylandManager *manager)
{
MetaX11Display *x11_display = meta_display_get_x11_display (display);
+ MetaMonitorManager *monitor_manager =
+ monitor_manager_from_x11_display (x11_display);
meta_xwayland_shutdown_dnd (manager, x11_display);
- g_signal_handlers_disconnect_by_func (meta_monitor_manager_get (),
+ g_signal_handlers_disconnect_by_func (monitor_manager,
monitors_changed_cb,
- NULL);
+ manager);
}
static void
meta_xwayland_init_xrandr (MetaXWaylandManager *manager,
MetaX11Display *x11_display)
{
- MetaMonitorManager *monitor_manager = meta_monitor_manager_get ();
+ MetaMonitorManager *monitor_manager =
+ monitor_manager_from_x11_display (x11_display);
Display *xdisplay = meta_x11_display_get_xdisplay (x11_display);
manager->has_xrandr = XRRQueryExtension (xdisplay,
@@ -1079,7 +1103,7 @@ meta_xwayland_init_xrandr (MetaXWaylandManager *manager,
RRCrtcChangeNotifyMask | RROutputChangeNotifyMask);
g_signal_connect (monitor_manager, "monitors-changed",
- G_CALLBACK (monitors_changed_cb), NULL);
+ G_CALLBACK (monitors_changed_cb), manager);
meta_xwayland_set_primary_output (x11_display);
}
@@ -1129,7 +1153,9 @@ meta_xwayland_connection_release (MetaXWaylandConnection *connection)
void
meta_xwayland_shutdown (MetaXWaylandManager *manager)
{
- MetaDisplay *display = meta_get_display ();
+ MetaContext *context =
+ meta_wayland_compositor_get_context (manager->compositor);
+ MetaDisplay *display = meta_context_get_display (context);
MetaX11Display *x11_display;
char path[256];
@@ -1175,12 +1201,12 @@ static void
meta_xwayland_set_primary_output (MetaX11Display *x11_display)
{
Display *xdisplay = meta_x11_display_get_xdisplay (x11_display);
+ MetaMonitorManager *monitor_manager =
+ monitor_manager_from_x11_display (x11_display);
XRRScreenResources *resources;
- MetaMonitorManager *monitor_manager;
MetaLogicalMonitor *primary_monitor;
int i;
- monitor_manager = meta_monitor_manager_get ();
primary_monitor =
meta_monitor_manager_get_primary_logical_monitor (monitor_manager);
@@ -1232,17 +1258,18 @@ meta_xwayland_set_primary_output (MetaX11Display *x11_display)
}
gboolean
-meta_xwayland_handle_xevent (XEvent *event)
+meta_xwayland_manager_handle_xevent (MetaXWaylandManager *manager,
+ XEvent *event)
{
- MetaWaylandCompositor *compositor = meta_wayland_compositor_get_default ();
- MetaXWaylandManager *manager = &compositor->xwayland_manager;
-
- if (meta_xwayland_dnd_handle_event (event))
+ if (meta_xwayland_dnd_handle_xevent (manager, event))
return TRUE;
if (manager->has_xrandr && event->type == manager->rr_event_base + RRNotify)
{
- MetaX11Display *x11_display = meta_get_display ()->x11_display;
+ MetaContext *context =
+ meta_wayland_compositor_get_context (manager->compositor);
+ MetaDisplay *display = meta_context_get_display (context);
+ MetaX11Display *x11_display = meta_display_get_x11_display (display);
meta_xwayland_set_primary_output (x11_display);
return TRUE;