wayland: Translate pen buttons into button events
authorCarlos Garnacho <carlosg@gnome.org>
Mon, 22 Jun 2015 16:28:46 +0000 (18:28 +0200)
committerCarlos Garnacho <carlosg@gnome.org>
Wed, 6 Apr 2016 14:12:12 +0000 (16:12 +0200)
up/down already take GDK_BUTTON_PRIMARY, we translate BTN_STYLUS(2)
into GDK_BUTTON_MIDDLE/SECONDARY.

gdk/wayland/gdkdevice-wayland.c

index f3f0397d67258cc8fe19656253aef5439bb8eb99..f21ed62a8621f34d0d12ff7a4620525877e0e33e 100644 (file)
@@ -40,6 +40,7 @@
 
 #include <sys/time.h>
 #include <sys/mman.h>
+#include <linux/input.h>
 
 #define BUTTON_BASE (BTN_LEFT - 1) /* Used to translate to 1-indexed buttons */
 
@@ -3286,6 +3287,40 @@ tablet_tool_handle_tilt (void                      *data,
                        xtilt, ytilt));
 }
 
+static void
+tablet_tool_handle_button (void                      *data,
+                           struct zwp_tablet_tool_v1 *wp_tablet_tool,
+                           uint32_t                   serial,
+                           uint32_t                   button,
+                           uint32_t                   state)
+{
+  GdkWaylandTabletToolData *tool = data;
+  GdkWaylandTabletData *tablet = tool->current_tablet;
+  GdkEventType evtype;
+  guint n_button;
+
+  if (!tablet->pointer_info.focus)
+    return;
+
+  tablet->pointer_info.press_serial = serial;
+
+  if (button == BTN_STYLUS)
+    n_button = GDK_BUTTON_SECONDARY;
+  else if (button == BTN_STYLUS2)
+    n_button = GDK_BUTTON_MIDDLE;
+  else
+    return;
+
+  if (state == ZWP_TABLET_TOOL_V1_BUTTON_STATE_PRESSED)
+    evtype = GDK_BUTTON_PRESS;
+  else if (state == ZWP_TABLET_TOOL_V1_BUTTON_STATE_RELEASED)
+    evtype = GDK_BUTTON_RELEASE;
+  else
+    return;
+
+  tablet_create_button_event_frame (tablet, evtype, n_button);
+}
+
 static void
 tablet_tool_handle_rotation (void                      *data,
                              struct zwp_tablet_tool_v1 *wp_tablet_tool,
@@ -3353,11 +3388,6 @@ tablet_tool_handle_frame (void                      *data,
   gdk_wayland_tablet_flush_frame_event (tablet, time);
 }
 
-static void
-tablet_handler_placeholder ()
-{
-}
-
 static const struct zwp_tablet_tool_v1_listener tablet_tool_listener = {
   tablet_tool_handle_type,
   tablet_tool_handle_hardware_serial,
@@ -3376,7 +3406,7 @@ static const struct zwp_tablet_tool_v1_listener tablet_tool_listener = {
   tablet_tool_handle_rotation,
   tablet_tool_handle_slider,
   tablet_tool_handle_wheel,
-  tablet_handler_placeholder, /* button_state */
+  tablet_tool_handle_button,
   tablet_tool_handle_frame,
 };