[gtk/wip/nacho/tool-api] seat: improve api to take into account the tool type




commit 45ec3fc389195044beb89ade4bfc3d307709f304
Author: Ignacio Casal Quinteiro <qignacio amazon com>
Date:   Thu Jan 7 12:27:26 2021 +0100

    seat: improve api to take into account the tool type
    
    Otherwise if we have several tools with the same serial
    and hardware id we might match the wrong tool.

 gdk/gdkseat.c                  |  9 +++++----
 gdk/gdkseatdefault.c           |  2 +-
 gdk/gdkseatprivate.h           |  7 ++++---
 gdk/x11/gdkdevicemanager-xi2.c | 11 ++++++-----
 4 files changed, 16 insertions(+), 13 deletions(-)
---
diff --git a/gdk/gdkseat.c b/gdk/gdkseat.c
index 75ef348a2d..83af3b88a4 100644
--- a/gdk/gdkseat.c
+++ b/gdk/gdkseat.c
@@ -436,9 +436,10 @@ gdk_seat_tool_removed (GdkSeat       *seat,
 }
 
 GdkDeviceTool *
-gdk_seat_get_tool (GdkSeat *seat,
-                   guint64  serial,
-                   guint64  hw_id)
+gdk_seat_get_tool (GdkSeat          *seat,
+                   guint64           serial,
+                   guint64           hw_id,
+                   GdkDeviceToolType type)
 {
   GdkDeviceTool *match = NULL;
   GList *tools, *l;
@@ -449,7 +450,7 @@ gdk_seat_get_tool (GdkSeat *seat,
     {
       GdkDeviceTool *tool = l->data;
 
-      if (tool->serial == serial && tool->hw_id == hw_id)
+      if (tool->serial == serial && tool->hw_id == hw_id && tool->type == type)
         {
           match = tool;
           break;
diff --git a/gdk/gdkseatdefault.c b/gdk/gdkseatdefault.c
index c9595bafdf..2226d36da1 100644
--- a/gdk/gdkseatdefault.c
+++ b/gdk/gdkseatdefault.c
@@ -442,7 +442,7 @@ gdk_seat_default_remove_tool (GdkSeatDefault *seat,
 
   priv = gdk_seat_default_get_instance_private (seat);
 
-  if (tool != gdk_seat_get_tool (GDK_SEAT (seat), tool->serial, tool->hw_id))
+  if (tool != gdk_seat_get_tool (GDK_SEAT (seat), tool->serial, tool->hw_id, tool->type))
     return;
 
   g_signal_emit_by_name (seat, "tool-removed", tool);
diff --git a/gdk/gdkseatprivate.h b/gdk/gdkseatprivate.h
index 12453896ad..228740dbaf 100644
--- a/gdk/gdkseatprivate.h
+++ b/gdk/gdkseatprivate.h
@@ -75,9 +75,10 @@ void gdk_seat_tool_removed   (GdkSeat       *seat,
                               GdkDeviceTool *tool);
 
 GdkDeviceTool *
-     gdk_seat_get_tool       (GdkSeat   *seat,
-                              guint64    serial,
-                              guint64    hw_id);
+     gdk_seat_get_tool       (GdkSeat          *seat,
+                              guint64           serial,
+                              guint64           hw_id,
+                              GdkDeviceToolType type);
 
 GdkGrabStatus  gdk_seat_grab             (GdkSeat                *seat,
                                           GdkSurface              *surface,
diff --git a/gdk/x11/gdkdevicemanager-xi2.c b/gdk/x11/gdkdevicemanager-xi2.c
index 3165205a5f..07073ee395 100644
--- a/gdk/x11/gdkdevicemanager-xi2.c
+++ b/gdk/x11/gdkdevicemanager-xi2.c
@@ -1097,15 +1097,16 @@ handle_property_change (GdkX11DeviceManagerXI2 *device_manager,
       if (ev->what != XIPropertyDeleted &&
           device_get_tool_serial_and_id (device, &serial_id, &tool_id))
         {
+          GdkDeviceToolType tool_type;
+
           seat = gdk_device_get_seat (device);
-          tool = gdk_seat_get_tool (seat, serial_id, tool_id);
+          tool_type = device_get_tool_type (device);
 
-          if (!tool && serial_id > 0)
+          if (tool_type != GDK_DEVICE_TOOL_TYPE_UNKNOWN)
             {
-              GdkDeviceToolType tool_type;
+              tool = gdk_seat_get_tool (seat, serial_id, tool_id, tool_type);
 
-              tool_type = device_get_tool_type (device);
-              if (tool_type != GDK_DEVICE_TOOL_TYPE_UNKNOWN)
+              if (!tool && serial_id > 0)
                 {
                   tool = gdk_device_tool_new (serial_id, tool_id, tool_type, 0);
                   gdk_seat_default_add_tool (GDK_SEAT_DEFAULT (seat), tool);


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