[mutter/wip/tablet-protocol-v2: 43/48] wayland: Store mode switch button in MetaWaylandTabletPad



commit 6b0a3bd991ce14212e9e075aea2f65bacdb95565
Author: Carlos Garnacho <carlosg gnome org>
Date:   Fri May 13 14:59:46 2016 +0200

    wayland: Store mode switch button in MetaWaylandTabletPad
    
    Fetch this info from libwacom.

 src/wayland/meta-wayland-tablet-pad.c |   22 ++++++++++++++++++++++
 src/wayland/meta-wayland-tablet-pad.h |    1 +
 2 files changed, 23 insertions(+), 0 deletions(-)
---
diff --git a/src/wayland/meta-wayland-tablet-pad.c b/src/wayland/meta-wayland-tablet-pad.c
index bc7c5d1..0e4af32 100644
--- a/src/wayland/meta-wayland-tablet-pad.c
+++ b/src/wayland/meta-wayland-tablet-pad.c
@@ -60,6 +60,21 @@ pad_handle_focus_surface_destroy (struct wl_listener *listener,
 }
 
 #ifdef HAVE_LIBWACOM
+static gint
+get_mode_switch_button (WacomDevice      *wacom_device,
+                        WacomButtonFlags  flags)
+{
+  gint i, n_buttons = libwacom_get_num_buttons (wacom_device);
+
+  for (i = 0; i < n_buttons; i++)
+    {
+      if (libwacom_get_button_flag (wacom_device, 'A' + i) & flags)
+        return i;
+    }
+
+  return -1;
+}
+
 static void
 meta_wayland_tablet_pad_fill_wacom_info (MetaWaylandTabletPad *pad)
 {
@@ -76,19 +91,26 @@ meta_wayland_tablet_pad_fill_wacom_info (MetaWaylandTabletPad *pad)
   if (libwacom_get_ring_num_modes (wacom_device) > n_modes)
     {
       n_modes = libwacom_get_ring_num_modes (wacom_device);
+      mode_switch_button =
+        get_mode_switch_button (wacom_device, WACOM_BUTTON_RING_MODESWITCH);
     }
 
   if (libwacom_get_ring2_num_modes (wacom_device))
     {
       n_modes = libwacom_get_ring2_num_modes (wacom_device);
+      mode_switch_button =
+        get_mode_switch_button (wacom_device, WACOM_BUTTON_RING2_MODESWITCH);
     }
 
   if (libwacom_get_strips_num_modes (wacom_device))
     {
       n_modes = libwacom_get_strips_num_modes (wacom_device);
+      mode_switch_button =
+        get_mode_switch_button (wacom_device, WACOM_BUTTON_TOUCHSTRIPS_MODESWITCH);
     }
 
   pad->n_modes = n_modes;
+  pad->mode_switch_button = mode_switch_button;
 }
 #endif
 
diff --git a/src/wayland/meta-wayland-tablet-pad.h b/src/wayland/meta-wayland-tablet-pad.h
index c3c173c..3a9f419 100644
--- a/src/wayland/meta-wayland-tablet-pad.h
+++ b/src/wayland/meta-wayland-tablet-pad.h
@@ -43,6 +43,7 @@ struct _MetaWaylandTabletPad
 
   uint32_t n_modes;
   uint32_t current_mode;
+  uint32_t mode_switch_button;
 
   GList *strips;
   GList *rings;


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