diff options
author | Daniel van Vugt <daniel.van.vugt@canonical.com> | 2020-10-22 15:48:08 +0800 |
---|---|---|
committer | Georges Basile Stavracas Neto <georges.stavracas@gmail.com> | 2020-10-28 15:40:56 +0000 |
commit | ebe8cd3704c21ce7f5c135e44e6d5bd046026931 (patch) | |
tree | dbe0d98f9e5447ca3c87dca5ec039cfebeaf4a23 | |
parent | 232dcad64ffca14344706d8b7f76918d74d4382e (diff) | |
download | mutter-ebe8cd3704c21ce7f5c135e44e6d5bd046026931.tar.gz |
cursor-tracker: Check if coordinates are NULL
To avoid a SEGV on X11. Passing NULL coordinates is perfectly valid if
you are only seeking to get the `mods`.
Fixes: https://gitlab.gnome.org/GNOME/mutter/-/issues/1484
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1519
-rw-r--r-- | src/backends/meta-cursor-tracker.c | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/src/backends/meta-cursor-tracker.c b/src/backends/meta-cursor-tracker.c index 90fc1b6a9..943949d4a 100644 --- a/src/backends/meta-cursor-tracker.c +++ b/src/backends/meta-cursor-tracker.c @@ -465,18 +465,26 @@ meta_cursor_tracker_update_position (MetaCursorTracker *tracker, } static void -get_pointer_position_gdk (int *x, - int *y, - int *mods) +get_pointer_position_gdk (graphene_point_t *point, + int *mods) { GdkSeat *gseat; GdkDevice *gdevice; GdkScreen *gscreen; + int x, y; gseat = gdk_display_get_default_seat (gdk_display_get_default ()); gdevice = gdk_seat_get_pointer (gseat); - gdk_device_get_position (gdevice, &gscreen, x, y); + /* Even if point is NULL we need this to get gscreen */ + gdk_device_get_position (gdevice, &gscreen, &x, &y); + + if (point) + { + point->x = x; + point->y = y; + } + if (mods) gdk_device_get_state (gdevice, gdk_screen_get_root_window (gscreen), @@ -509,17 +517,9 @@ meta_cursor_tracker_get_pointer (MetaCursorTracker *tracker, we forward to xwayland. */ if (meta_is_wayland_compositor ()) - { - get_pointer_position_clutter (coords, (int*)mods); - } + get_pointer_position_clutter (coords, (int *) mods); else - { - int x, y; - - get_pointer_position_gdk (&x, &y, (int*)mods); - coords->x = x; - coords->y = y; - } + get_pointer_position_gdk (coords, (int *) mods); } void |