[mutter] backend: Only show cursor when showing stage if pointer is present



commit c8089f07a33ea22fdc6d8b57f40e8edc6e9927b2
Author: Jonas Ã…dahl <jadahl gmail com>
Date:   Thu Jan 28 15:08:15 2021 +0100

    backend: Only show cursor when showing stage if pointer is present
    
    This avoids showing the cursor when initially there is no pointer
    device, nor touchscreen device.
    
    Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1698>

 src/backends/meta-backend.c | 23 ++++++++++++++++++++++-
 1 file changed, 22 insertions(+), 1 deletion(-)
---
diff --git a/src/backends/meta-backend.c b/src/backends/meta-backend.c
index e0249160db..4eb0a8e7de 100644
--- a/src/backends/meta-backend.c
+++ b/src/backends/meta-backend.c
@@ -456,6 +456,9 @@ on_device_added (ClutterSeat        *seat,
 
   if (device_type == CLUTTER_TOUCHSCREEN_DEVICE)
     meta_cursor_tracker_set_pointer_visible (priv->cursor_tracker, FALSE);
+  else if (device_type == CLUTTER_POINTER_DEVICE &&
+           !clutter_seat_has_touchscreen (seat))
+    meta_cursor_tracker_set_pointer_visible (priv->cursor_tracker, TRUE);
 
   if (device_type == CLUTTER_TOUCHSCREEN_DEVICE ||
       device_type == CLUTTER_TABLET_DEVICE ||
@@ -566,8 +569,26 @@ static void
 on_stage_shown_cb (MetaBackend *backend)
 {
   MetaBackendPrivate *priv = meta_backend_get_instance_private (backend);
+  ClutterSeat *seat = clutter_backend_get_default_seat (priv->clutter_backend);
+  g_autoptr (GList) devices = NULL;
+  const GList *l;
+
+  devices = clutter_seat_list_devices (seat);
+  for (l = devices; l; l = l->next)
+    {
+      ClutterInputDevice *device = l->data;
+
+      if (clutter_input_device_get_device_mode (device) ==
+          CLUTTER_INPUT_MODE_LOGICAL)
+        continue;
 
-  meta_cursor_tracker_set_pointer_visible (priv->cursor_tracker, TRUE);
+      if (clutter_input_device_get_device_type (device) !=
+          CLUTTER_POINTER_DEVICE)
+        continue;
+
+      meta_cursor_tracker_set_pointer_visible (priv->cursor_tracker, TRUE);
+      break;
+    }
 }
 
 static void


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]