From 317b734dcc626e285bbb68adcf5a82eac4a4dab6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20=C3=85dahl?= Date: Tue, 29 Nov 2016 20:30:22 +0800 Subject: [PATCH] Move cursor tracker ownership to the backend Let the backend initialize the cursor tracker, and change all call sites to get the cursor tracker from the backend instead of from the screen. It wasn't associated with the screen anyway, so the API was missleading. https://bugzilla.gnome.org/show_bug.cgi?id=777732 --- src/backends/meta-backend-private.h | 1 + src/backends/meta-backend.c | 18 +++++++++++++++--- src/backends/meta-cursor-tracker.c | 16 +++++----------- src/backends/native/meta-backend-native.c | 4 ++-- src/core/events.c | 3 ++- src/core/screen.c | 19 +++++++++++-------- src/core/window.c | 6 +++--- src/wayland/meta-wayland-pointer.c | 9 ++++++--- 8 files changed, 45 insertions(+), 31 deletions(-) diff --git a/src/backends/meta-backend-private.h b/src/backends/meta-backend-private.h index 07b7af1cf..b26aaec60 100644 --- a/src/backends/meta-backend-private.h +++ b/src/backends/meta-backend-private.h @@ -116,6 +116,7 @@ ClutterBackend * meta_backend_get_clutter_backend (MetaBackend *backend); MetaIdleMonitor * meta_backend_get_idle_monitor (MetaBackend *backend, int device_id); MetaMonitorManager * meta_backend_get_monitor_manager (MetaBackend *backend); +MetaCursorTracker * meta_backend_get_cursor_tracker (MetaBackend *backend); MetaCursorRenderer * meta_backend_get_cursor_renderer (MetaBackend *backend); MetaRenderer * meta_backend_get_renderer (MetaBackend *backend); MetaEgl * meta_backend_get_egl (MetaBackend *backend); diff --git a/src/backends/meta-backend.c b/src/backends/meta-backend.c index ac6bd308f..22b691e10 100644 --- a/src/backends/meta-backend.c +++ b/src/backends/meta-backend.c @@ -62,6 +62,7 @@ meta_get_backend (void) struct _MetaBackendPrivate { MetaMonitorManager *monitor_manager; + MetaCursorTracker *cursor_tracker; MetaCursorRenderer *cursor_renderer; MetaInputSettings *input_settings; MetaRenderer *renderer; @@ -246,7 +247,8 @@ on_device_removed (ClutterDeviceManager *device_manager, */ if (backend->current_device_id == device_id) { - MetaCursorTracker *cursor_tracker = meta_cursor_tracker_get_for_screen (NULL); + MetaBackendPrivate *priv = meta_backend_get_instance_private (backend); + MetaCursorTracker *cursor_tracker = priv->cursor_tracker; gboolean has_touchscreen, has_pointing_device; ClutterInputDeviceType device_type; @@ -319,7 +321,7 @@ meta_backend_real_post_init (MetaBackend *backend) has_touchscreen |= device_is_slave_touchscreen (device); } - cursor_tracker = meta_cursor_tracker_get_for_screen (NULL); + cursor_tracker = priv->cursor_tracker; meta_cursor_tracker_set_pointer_visible (cursor_tracker, !has_touchscreen); g_slist_free (devices); @@ -424,6 +426,8 @@ meta_backend_initable_init (GInitable *initable, return FALSE; } + priv->cursor_tracker = g_object_new (META_TYPE_CURSOR_TRACKER, NULL); + return TRUE; } @@ -466,6 +470,14 @@ meta_backend_get_monitor_manager (MetaBackend *backend) return priv->monitor_manager; } +MetaCursorTracker * +meta_backend_get_cursor_tracker (MetaBackend *backend) +{ + MetaBackendPrivate *priv = meta_backend_get_instance_private (backend); + + return priv->cursor_tracker; +} + /** * meta_backend_get_cursor_renderer: (skip) */ @@ -582,8 +594,8 @@ meta_backend_get_stage (MetaBackend *backend) static gboolean update_last_device (MetaBackend *backend) { - MetaCursorTracker *cursor_tracker = meta_cursor_tracker_get_for_screen (NULL); MetaBackendPrivate *priv = meta_backend_get_instance_private (backend); + MetaCursorTracker *cursor_tracker = priv->cursor_tracker; ClutterInputDeviceType device_type; ClutterDeviceManager *manager; ClutterInputDevice *device; diff --git a/src/backends/meta-cursor-tracker.c b/src/backends/meta-cursor-tracker.c index e07042501..3e1d76bd7 100644 --- a/src/backends/meta-cursor-tracker.c +++ b/src/backends/meta-cursor-tracker.c @@ -130,14 +130,6 @@ meta_cursor_tracker_class_init (MetaCursorTrackerClass *klass) G_TYPE_NONE, 0); } -static MetaCursorTracker * -meta_cursor_tracker_new (void) -{ - return g_object_new (META_TYPE_CURSOR_TRACKER, NULL); -} - -static MetaCursorTracker *_cursor_tracker; - /** * meta_cursor_tracker_get_for_screen: * @screen: the #MetaScreen @@ -149,10 +141,12 @@ static MetaCursorTracker *_cursor_tracker; MetaCursorTracker * meta_cursor_tracker_get_for_screen (MetaScreen *screen) { - if (!_cursor_tracker) - _cursor_tracker = meta_cursor_tracker_new (); + MetaBackend *backend = meta_get_backend (); + MetaCursorTracker *tracker = meta_backend_get_cursor_tracker (backend); - return _cursor_tracker; + g_assert (tracker); + + return tracker; } static void diff --git a/src/backends/native/meta-backend-native.c b/src/backends/native/meta-backend-native.c index b23aec1a0..7b53ccd8c 100644 --- a/src/backends/native/meta-backend-native.c +++ b/src/backends/native/meta-backend-native.c @@ -318,7 +318,7 @@ meta_backend_native_warp_pointer (MetaBackend *backend, { ClutterDeviceManager *manager = clutter_device_manager_get_default (); ClutterInputDevice *device = clutter_device_manager_get_core_device (manager, CLUTTER_POINTER_DEVICE); - MetaCursorTracker *tracker = meta_cursor_tracker_get_for_screen (NULL); + MetaCursorTracker *cursor_tracker = meta_backend_get_cursor_tracker (backend); /* XXX */ guint32 time_ = 0; @@ -327,7 +327,7 @@ meta_backend_native_warp_pointer (MetaBackend *backend, clutter_evdev_warp_pointer (device, time_, x, y); /* Warp displayed pointer cursor. */ - meta_cursor_tracker_update_position (tracker, x, y); + meta_cursor_tracker_update_position (cursor_tracker, x, y); } static void diff --git a/src/core/events.c b/src/core/events.c index 6b808c87c..6bf75c38e 100644 --- a/src/core/events.c +++ b/src/core/events.c @@ -253,7 +253,8 @@ meta_display_handle_event (MetaDisplay *display, } else { - MetaCursorTracker *cursor_tracker = meta_cursor_tracker_get_for_screen (NULL); + MetaCursorTracker *cursor_tracker = + meta_backend_get_cursor_tracker (backend); meta_cursor_tracker_update_position (cursor_tracker, event->motion.x, diff --git a/src/core/screen.c b/src/core/screen.c index 0b360e820..172ad3970 100644 --- a/src/core/screen.c +++ b/src/core/screen.c @@ -1263,14 +1263,15 @@ meta_screen_update_cursor (MetaScreen *screen) MetaCursor cursor = screen->current_cursor; Cursor xcursor; MetaCursorSprite *cursor_sprite; - MetaCursorTracker *tracker = meta_cursor_tracker_get_for_screen (screen); + MetaBackend *backend = meta_get_backend (); + MetaCursorTracker *cursor_tracker = meta_backend_get_cursor_tracker (backend); cursor_sprite = meta_cursor_sprite_from_theme (cursor); if (meta_is_wayland_compositor ()) manage_root_cursor_sprite_scale (screen, cursor_sprite); - meta_cursor_tracker_set_root_cursor (tracker, cursor_sprite); + meta_cursor_tracker_set_root_cursor (cursor_tracker, cursor_sprite); g_object_unref (cursor_sprite); /* Set a cursor for X11 applications that don't specify their own */ @@ -1378,7 +1379,8 @@ MetaWindow* meta_screen_get_mouse_window (MetaScreen *screen, MetaWindow *not_this_one) { - MetaCursorTracker *tracker = meta_cursor_tracker_get_for_screen (screen); + MetaBackend *backend = meta_get_backend (); + MetaCursorTracker *cursor_tracker = meta_backend_get_cursor_tracker (backend); MetaWindow *window; int x, y; @@ -1386,7 +1388,7 @@ meta_screen_get_mouse_window (MetaScreen *screen, meta_topic (META_DEBUG_FOCUS, "Focusing mouse window excluding %s\n", not_this_one->desc); - meta_cursor_tracker_get_pointer (tracker, &x, &y, NULL); + meta_cursor_tracker_get_pointer (cursor_tracker, &x, &y, NULL); window = meta_stack_get_default_focus_window_at_point (screen->stack, screen->active_workspace, @@ -1665,7 +1667,7 @@ meta_screen_get_current_monitor (MetaScreen *screen) MetaBackend *backend = meta_get_backend (); MetaMonitorManager *monitor_manager = meta_backend_get_monitor_manager (backend); - MetaCursorTracker *tracker = meta_cursor_tracker_get_for_screen (screen); + MetaCursorTracker *cursor_tracker = meta_backend_get_cursor_tracker (backend); int n_logical_monitors = meta_monitor_manager_get_num_logical_monitors (monitor_manager); @@ -1679,7 +1681,7 @@ meta_screen_get_current_monitor (MetaScreen *screen) { int x, y; - meta_cursor_tracker_get_pointer (tracker, &x, &y, NULL); + meta_cursor_tracker_get_pointer (cursor_tracker, &x, &y, NULL); meta_screen_get_current_monitor_for_pos (screen, x, y); } @@ -2968,9 +2970,10 @@ gboolean meta_screen_handle_xevent (MetaScreen *screen, XEvent *xevent) { - MetaCursorTracker *tracker = meta_cursor_tracker_get_for_screen (screen); + MetaBackend *backend = meta_get_backend (); + MetaCursorTracker *cursor_tracker = meta_backend_get_cursor_tracker (backend); - if (meta_cursor_tracker_handle_xevent (tracker, xevent)) + if (meta_cursor_tracker_handle_xevent (cursor_tracker, xevent)) return TRUE; return FALSE; diff --git a/src/core/window.c b/src/core/window.c index c3ac43534..9db1b25d3 100644 --- a/src/core/window.c +++ b/src/core/window.c @@ -7691,15 +7691,15 @@ window_focus_on_pointer_rest_callback (gpointer data) MetaFocusData *focus_data = data; MetaWindow *window = focus_data->window; MetaDisplay *display = window->display; - MetaScreen *screen = window->screen; - MetaCursorTracker *tracker = meta_cursor_tracker_get_for_screen (screen); + MetaBackend *backend = meta_get_backend (); + MetaCursorTracker *cursor_tracker = meta_backend_get_cursor_tracker (backend); int root_x, root_y; guint32 timestamp; if (meta_prefs_get_focus_mode () == G_DESKTOP_FOCUS_MODE_CLICK) goto out; - meta_cursor_tracker_get_pointer (tracker, &root_x, &root_y, NULL); + meta_cursor_tracker_get_pointer (cursor_tracker, &root_x, &root_y, NULL); if (root_x != focus_data->pointer_x || root_y != focus_data->pointer_y) diff --git a/src/wayland/meta-wayland-pointer.c b/src/wayland/meta-wayland-pointer.c index 986a61ccb..4578f3ee1 100644 --- a/src/wayland/meta-wayland-pointer.c +++ b/src/wayland/meta-wayland-pointer.c @@ -480,7 +480,8 @@ meta_wayland_pointer_on_cursor_changed (MetaCursorTracker *cursor_tracker, void meta_wayland_pointer_enable (MetaWaylandPointer *pointer) { - MetaCursorTracker *cursor_tracker = meta_cursor_tracker_get_for_screen (NULL); + MetaBackend *backend = meta_get_backend (); + MetaCursorTracker *cursor_tracker = meta_backend_get_cursor_tracker (backend); ClutterDeviceManager *manager; pointer->pointer_clients = @@ -503,7 +504,8 @@ meta_wayland_pointer_enable (MetaWaylandPointer *pointer) void meta_wayland_pointer_disable (MetaWaylandPointer *pointer) { - MetaCursorTracker *cursor_tracker = meta_cursor_tracker_get_for_screen (NULL); + MetaBackend *backend = meta_get_backend (); + MetaCursorTracker *cursor_tracker = meta_backend_get_cursor_tracker (backend); g_signal_handlers_disconnect_by_func (cursor_tracker, (gpointer) meta_wayland_pointer_on_cursor_changed, @@ -965,7 +967,8 @@ meta_wayland_pointer_get_relative_coordinates (MetaWaylandPointer *pointer, void meta_wayland_pointer_update_cursor_surface (MetaWaylandPointer *pointer) { - MetaCursorTracker *cursor_tracker = meta_cursor_tracker_get_for_screen (NULL); + MetaBackend *backend = meta_get_backend (); + MetaCursorTracker *cursor_tracker = meta_backend_get_cursor_tracker (backend); if (pointer->current) {