diff --git a/gdk/gdkseat.c b/gdk/gdkseat.c index aa120f298b..6edd383206 100644 --- a/gdk/gdkseat.c +++ b/gdk/gdkseat.c @@ -434,14 +434,15 @@ gdk_seat_tool_removed (GdkSeat *seat, GdkDeviceTool * gdk_seat_get_tool (GdkSeat *seat, - guint64 serial) + guint64 serial, + guint64 hw_id) { GdkSeatClass *seat_class; g_return_val_if_fail (GDK_IS_SEAT (seat), NULL); seat_class = GDK_SEAT_GET_CLASS (seat); - return seat_class->get_tool (seat, serial); + return seat_class->get_tool (seat, serial, hw_id); } /** diff --git a/gdk/gdkseatdefault.c b/gdk/gdkseatdefault.c index 2de1c36c5f..14dbb75f97 100644 --- a/gdk/gdkseatdefault.c +++ b/gdk/gdkseatdefault.c @@ -282,7 +282,8 @@ gdk_seat_default_get_slaves (GdkSeat *seat, static GdkDeviceTool * gdk_seat_default_get_tool (GdkSeat *seat, - guint64 serial) + guint64 serial, + guint64 hw_id) { GdkSeatDefaultPrivate *priv; GdkDeviceTool *tool; @@ -297,7 +298,7 @@ gdk_seat_default_get_tool (GdkSeat *seat, { tool = g_ptr_array_index (priv->tools, i); - if (tool->serial == serial) + if (tool->serial == serial && tool->hw_id == hw_id) return tool; } @@ -457,8 +458,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), - gdk_device_tool_get_serial (tool))) + if (tool != gdk_seat_get_tool (GDK_SEAT (seat), tool->serial, tool->hw_id)) return; g_signal_emit_by_name (seat, "tool-removed", tool); diff --git a/gdk/gdkseatprivate.h b/gdk/gdkseatprivate.h index 97127dbfae..eaeecec8ff 100644 --- a/gdk/gdkseatprivate.h +++ b/gdk/gdkseatprivate.h @@ -57,7 +57,8 @@ struct _GdkSeatClass GdkSeatCapabilities capabilities); GdkDeviceTool * (* get_tool) (GdkSeat *seat, - guint64 serial); + guint64 serial, + guint64 tool_id); GList * (* get_master_pointers) (GdkSeat *seat, GdkSeatCapabilities capabilities); }; @@ -74,6 +75,7 @@ void gdk_seat_tool_removed (GdkSeat *seat, GdkDeviceTool * gdk_seat_get_tool (GdkSeat *seat, - guint64 serial); + guint64 serial, + guint64 hw_id); #endif /* __GDK_SEAT_PRIVATE_H__ */ diff --git a/gdk/x11/gdkdevicemanager-xi2.c b/gdk/x11/gdkdevicemanager-xi2.c index 8c1cc41a70..01d51d3d3a 100644 --- a/gdk/x11/gdkdevicemanager-xi2.c +++ b/gdk/x11/gdkdevicemanager-xi2.c @@ -1096,7 +1096,7 @@ handle_property_change (GdkX11DeviceManagerXI2 *device_manager, device_get_tool_serial_and_id (device, &serial_id, &tool_id)) { seat = gdk_device_get_seat (device); - tool = gdk_seat_get_tool (seat, serial_id); + tool = gdk_seat_get_tool (seat, serial_id, tool_id); if (!tool && serial_id > 0) {