diff options
Diffstat (limited to 'src/wayland/meta-xwayland.c')
-rw-r--r-- | src/wayland/meta-xwayland.c | 81 |
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; |