From 42a526581d1216d835dbbbeab5a7bdb75b349179 Mon Sep 17 00:00:00 2001 From: Jason Gerecke Date: Tue, 10 Oct 2017 09:18:25 -0700 Subject: [PATCH 1/2] clutter/evdev: Add support for BTN_STYLUS3 BTN_STYLUS3 is defined by the Linux 4.15 kernel and is sent when the third button on a stylus is pressed. At the moment, only Wacom's "Pro Pen 3D" has three stylus buttons. Pressing this button triggers a button 8 event to be sent under X11, so we use the same mapping here. https://bugzilla.gnome.org/show_bug.cgi?id=790033 --- clutter/clutter/evdev/clutter-seat-evdev.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/clutter/clutter/evdev/clutter-seat-evdev.c b/clutter/clutter/evdev/clutter-seat-evdev.c index e8524da..f98f85a 100644 --- a/clutter/clutter/evdev/clutter-seat-evdev.c +++ b/clutter/clutter/evdev/clutter-seat-evdev.c @@ -45,6 +45,10 @@ #define DISCRETE_SCROLL_STEP 10.0 +#ifndef BTN_STYLUS3 +#define BTN_STYLUS3 0x149 /* Linux 4.15 */ +#endif + void clutter_seat_evdev_set_libinput_seat (ClutterSeatEvdev *seat, struct libinput_seat *libinput_seat) @@ -492,6 +496,10 @@ clutter_seat_evdev_notify_button (ClutterSeatEvdev *seat, button_nr = CLUTTER_BUTTON_MIDDLE; break; + case 0x149: /* BTN_STYLUS3 */ + button_nr = 8; + break; + default: /* For compatibility reasons, all additional buttons go after the old 4-7 scroll ones */ if (clutter_input_device_get_device_type (input_device) == CLUTTER_TABLET_DEVICE) -- 2.17.0 From c42c5294d0ca3d27001f217974cad72a40ffae60 Mon Sep 17 00:00:00 2001 From: Jason Gerecke Date: Tue, 10 Oct 2017 08:55:41 -0700 Subject: [PATCH 2/2] backends: Add support for Wacom stylus tertiary-button-action The tertiary-button-action (see bug 790028) is a place for g-c-c to store the action which should be performed when a stylus' third button is pressed. Pressing this button is signaled as a BTN_STYLUS3 event from the kernel or X11 button 8. https://bugzilla.gnome.org/show_bug.cgi?id=790033 --- src/backends/meta-input-settings-private.h | 3 ++- src/backends/meta-input-settings.c | 5 +++-- src/backends/native/meta-input-settings-native.c | 5 ++++- src/backends/x11/meta-input-settings-x11.c | 10 ++++++++-- 4 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/backends/meta-input-settings-private.h b/src/backends/meta-input-settings-private.h index 605690e..893d4ec 100644 --- a/src/backends/meta-input-settings-private.h +++ b/src/backends/meta-input-settings-private.h @@ -111,7 +111,8 @@ struct _MetaInputSettingsClass ClutterInputDevice *device, ClutterInputDeviceTool *tool, GDesktopStylusButtonAction primary, - GDesktopStylusButtonAction secondary); + GDesktopStylusButtonAction secondary, + GDesktopStylusButtonAction tertiary); gboolean (* has_two_finger_scroll) (MetaInputSettings *settings, ClutterInputDevice *device); }; diff --git a/src/backends/meta-input-settings.c b/src/backends/meta-input-settings.c index ec0fc9f..989f9e3 100644 --- a/src/backends/meta-input-settings.c +++ b/src/backends/meta-input-settings.c @@ -1453,7 +1453,7 @@ update_stylus_buttonmap (MetaInputSettings *input_settings, ClutterInputDeviceTool *tool) { MetaInputSettingsClass *input_settings_class; - GDesktopStylusButtonAction primary, secondary; + GDesktopStylusButtonAction primary, secondary, tertiary; GSettings *tool_settings; if (clutter_input_device_get_device_type (device) != CLUTTER_TABLET_DEVICE && @@ -1468,10 +1468,11 @@ update_stylus_buttonmap (MetaInputSettings *input_settings, primary = g_settings_get_enum (tool_settings, "button-action"); secondary = g_settings_get_enum (tool_settings, "secondary-button-action"); + tertiary = g_settings_get_enum (tool_settings, "tertiary-button-action"); input_settings_class = META_INPUT_SETTINGS_GET_CLASS (input_settings); input_settings_class->set_stylus_button_map (input_settings, device, tool, - primary, secondary); + primary, secondary, tertiary); } static void diff --git a/src/backends/native/meta-input-settings-native.c b/src/backends/native/meta-input-settings-native.c index beb7217..7450725 100644 --- a/src/backends/native/meta-input-settings-native.c +++ b/src/backends/native/meta-input-settings-native.c @@ -547,12 +547,15 @@ meta_input_settings_native_set_stylus_button_map (MetaInputSettings *se ClutterInputDevice *device, ClutterInputDeviceTool *tool, GDesktopStylusButtonAction primary, - GDesktopStylusButtonAction secondary) + GDesktopStylusButtonAction secondary, + GDesktopStylusButtonAction tertiary) { clutter_evdev_input_device_tool_set_button_code (tool, CLUTTER_BUTTON_MIDDLE, action_to_evcode (primary)); clutter_evdev_input_device_tool_set_button_code (tool, CLUTTER_BUTTON_SECONDARY, action_to_evcode (secondary)); + clutter_evdev_input_device_tool_set_button_code (tool, 8, /* Back */ + action_to_evcode (tertiary)); } static void diff --git a/src/backends/x11/meta-input-settings-x11.c b/src/backends/x11/meta-input-settings-x11.c index 4867b6b..7d5239f 100644 --- a/src/backends/x11/meta-input-settings-x11.c +++ b/src/backends/x11/meta-input-settings-x11.c @@ -1031,7 +1031,8 @@ meta_input_settings_x11_set_stylus_button_map (MetaInputSettings *setti ClutterInputDevice *device, ClutterInputDeviceTool *tool, GDesktopStylusButtonAction primary, - GDesktopStylusButtonAction secondary) + GDesktopStylusButtonAction secondary, + GDesktopStylusButtonAction tertiary) { MetaDisplay *display = meta_get_display (); MetaBackend *backend = meta_get_backend (); @@ -1046,10 +1047,15 @@ meta_input_settings_x11_set_stylus_button_map (MetaInputSettings *setti xdev = device_ensure_xdevice (device); if (xdev) { - guchar map[3] = { + guchar map[8] = { CLUTTER_BUTTON_PRIMARY, action_to_button (primary, CLUTTER_BUTTON_MIDDLE), action_to_button (secondary, CLUTTER_BUTTON_SECONDARY), + 4, + 5, + 6, + 7, + action_to_button (tertiary, 8), /* "Back" */ }; XSetDeviceButtonMapping (xdisplay, xdev, map, G_N_ELEMENTS (map)); -- 2.17.0