[gtk+/wip/wayland-tablet: 631/632] wayland: Translate pen buttons into button events



commit e3fe8b3ac0e8e7eb6bc8a4179f3d99a013712bca
Author: Carlos Garnacho <carlosg gnome org>
Date:   Mon Jun 22 18:28:46 2015 +0200

    wayland: Translate pen buttons into button events
    
    up/down already take GDK_BUTTON_PRIMARY, we translate BTN_STYLUS(2)
    into GDK_BUTTON_MIDDLE/SECONDARY.

 gdk/wayland/gdkdevice-wayland.c |   42 +++++++++++++++++++++++++++++++++-----
 1 files changed, 36 insertions(+), 6 deletions(-)
---
diff --git a/gdk/wayland/gdkdevice-wayland.c b/gdk/wayland/gdkdevice-wayland.c
index 9b94c4a..5b2a9e0 100644
--- a/gdk/wayland/gdkdevice-wayland.c
+++ b/gdk/wayland/gdkdevice-wayland.c
@@ -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 */
 
@@ -3235,6 +3236,40 @@ tablet_tool_handle_tilt (void                      *data,
 }
 
 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_frame (void                      *data,
                           struct zwp_tablet_tool_v1 *wl_tablet_tool,
                           uint32_t                   time)
@@ -3258,11 +3293,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_hwserial,
@@ -3278,7 +3308,7 @@ static const struct zwp_tablet_tool_v1_listener tablet_tool_listener = {
   tablet_tool_handle_pressure,
   tablet_tool_handle_distance,
   tablet_tool_handle_tilt,
-  tablet_handler_placeholder, /* button_state */
+  tablet_tool_handle_button,
   tablet_tool_handle_frame,
 };
 


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