[mutter/wip/carlosg/release-virtual-buttons] backends/native: Unset the correct button codes when a virtual device is destroyed



commit e3fdff6f8f94d8f1a36f2db76b53705eaff790a5
Author: Carlos Garnacho <carlosg gnome org>
Date:   Thu May 7 18:20:32 2020 +0200

    backends/native: Unset the correct button codes when a virtual device is destroyed
    
    We were iterating through evcodes, but using API that expects Clutter button
    numbers. Instead of transforming those to Clutter numbers to have those translated
    back, use the inner seat API that already takes evcodes.
    
    Fixes stuck buttons keys after a virtual device is destroyed while those are
    pressed.
    
    https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1239

 .../native/meta-virtual-input-device-native.c       | 21 +++++++++++++--------
 1 file changed, 13 insertions(+), 8 deletions(-)
---
diff --git a/src/backends/native/meta-virtual-input-device-native.c 
b/src/backends/native/meta-virtual-input-device-native.c
index 9e99c3a5f..c1a45a195 100644
--- a/src/backends/native/meta-virtual-input-device-native.c
+++ b/src/backends/native/meta-virtual-input-device-native.c
@@ -129,20 +129,25 @@ release_pressed_buttons (ClutterVirtualInputDevice *virtual_device)
       switch (get_button_type (code))
         {
         case EVDEV_BUTTON_TYPE_KEY:
-          clutter_virtual_input_device_notify_key (virtual_device,
-                                                   time_us,
-                                                   code,
-                                                   CLUTTER_KEY_STATE_RELEASED);
+          meta_seat_native_notify_key (virtual_evdev->seat,
+                                       virtual_evdev->device,
+                                       time_us,
+                                       code,
+                                       CLUTTER_KEY_STATE_RELEASED,
+                                       TRUE);
           break;
         case EVDEV_BUTTON_TYPE_BUTTON:
-          clutter_virtual_input_device_notify_button (virtual_device,
-                                                      time_us,
-                                                      code,
-                                                      CLUTTER_BUTTON_STATE_RELEASED);
+          meta_seat_native_notify_button (virtual_evdev->seat,
+                                          virtual_evdev->device,
+                                          time_us,
+                                          code,
+                                          CLUTTER_BUTTON_STATE_RELEASED);
           break;
         case EVDEV_BUTTON_TYPE_NONE:
           g_assert_not_reached ();
         }
+
+      update_button_count (virtual_evdev, code, 0);
     }
 }
 


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