From f57b0726a02ef48948c64e5c6bf0a477cc6420aa Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Tue, 13 May 2014 15:49:03 -0400 Subject: [PATCH] cursor-tracker: Remove the grab cursor We expect that meta_screen_set_cursor while grabbed will properly set the cursor on the root window. Make sure this works by simply always using the root cursor when we have an active grab. --- src/backends/meta-cursor-tracker-private.h | 16 ---------------- src/backends/meta-cursor-tracker.c | 21 +++++---------------- src/core/display.c | 13 ++----------- 3 files changed, 7 insertions(+), 43 deletions(-) diff --git a/src/backends/meta-cursor-tracker-private.h b/src/backends/meta-cursor-tracker-private.h index 1ec4aff2d..20faa4111 100644 --- a/src/backends/meta-cursor-tracker-private.h +++ b/src/backends/meta-cursor-tracker-private.h @@ -37,22 +37,8 @@ struct _MetaCursorTracker { gboolean is_showing; - /* The cursor tracker stores the cursor for the current grab - * operation, the cursor for the window with pointer focus, and - * the cursor for the root window, which contains either the - * default arrow cursor or the 'busy' hourglass if we're launching - * an app. - * - * We choose the first one available -- if there's a grab cursor, - * we choose that cursor, if there's window cursor, we choose that, - * otherwise we choose the root cursor. - * - * The displayed_cursor contains the chosen cursor. - */ MetaCursorReference *displayed_cursor; - MetaCursorReference *grab_cursor; - /* Wayland clients can set a NULL buffer as their cursor * explicitly, which means that we shouldn't display anything. * So, we can't simply store a NULL in window_cursor to @@ -74,8 +60,6 @@ struct _MetaCursorTrackerClass { gboolean meta_cursor_tracker_handle_xevent (MetaCursorTracker *tracker, XEvent *xevent); -void meta_cursor_tracker_set_grab_cursor (MetaCursorTracker *tracker, - MetaCursorReference *cursor); void meta_cursor_tracker_set_window_cursor (MetaCursorTracker *tracker, MetaCursorReference *cursor); void meta_cursor_tracker_unset_window_cursor (MetaCursorTracker *tracker); diff --git a/src/backends/meta-cursor-tracker.c b/src/backends/meta-cursor-tracker.c index ac2d96542..6005e5965 100644 --- a/src/backends/meta-cursor-tracker.c +++ b/src/backends/meta-cursor-tracker.c @@ -63,11 +63,11 @@ get_displayed_cursor (MetaCursorTracker *tracker) if (!tracker->is_showing) return NULL; - if (tracker->grab_cursor) - return tracker->grab_cursor; - - if (tracker->has_window_cursor) - return tracker->window_cursor; + if (tracker->screen->display->grab_op == META_GRAB_OP_NONE) + { + if (tracker->has_window_cursor) + return tracker->window_cursor; + } return tracker->root_cursor; } @@ -374,17 +374,6 @@ meta_cursor_tracker_get_hot (MetaCursorTracker *tracker, } } -void -meta_cursor_tracker_set_grab_cursor (MetaCursorTracker *tracker, - MetaCursorReference *cursor) -{ - g_clear_pointer (&tracker->grab_cursor, meta_cursor_reference_unref); - if (cursor) - tracker->grab_cursor = meta_cursor_reference_ref (cursor); - - sync_cursor (tracker); -} - void meta_cursor_tracker_set_window_cursor (MetaCursorTracker *tracker, MetaCursorReference *cursor) diff --git a/src/core/display.c b/src/core/display.c index 464ddf974..bb5946886 100644 --- a/src/core/display.c +++ b/src/core/display.c @@ -1702,14 +1702,8 @@ meta_display_set_grab_op_cursor (MetaDisplay *display, { /* Set root cursor */ MetaBackend *backend = meta_get_backend (); - MetaCursorTracker *tracker = meta_cursor_tracker_get_for_screen (display->screen); - MetaCursor cursor = meta_cursor_for_grab_op (op); - MetaCursorReference *cursor_ref; - cursor_ref = meta_cursor_reference_from_theme (cursor); - meta_cursor_tracker_set_grab_cursor (tracker, cursor_ref); - if (cursor_ref) - meta_cursor_reference_unref (cursor_ref); + meta_screen_set_cursor (display->screen, meta_cursor_for_grab_op (op)); if (meta_backend_grab_device (backend, META_VIRTUAL_CORE_POINTER_ID, timestamp)) display->grab_have_pointer = TRUE; @@ -1862,8 +1856,6 @@ void meta_display_end_grab_op (MetaDisplay *display, guint32 timestamp) { - MetaCursorTracker *tracker; - meta_topic (META_DEBUG_WINDOW_OPS, "Ending grab op %u at time %u\n", display->grab_op, timestamp); @@ -1904,8 +1896,7 @@ meta_display_end_grab_op (MetaDisplay *display, meta_window_ungrab_all_keys (display->grab_window, timestamp); } - tracker = meta_cursor_tracker_get_for_screen (display->screen); - meta_cursor_tracker_set_grab_cursor (tracker, NULL); + meta_screen_set_cursor (display->screen, META_CURSOR_DEFAULT); display->grab_timestamp = 0; display->grab_window = NULL;