summaryrefslogtreecommitdiffstats
path: root/sway
diff options
context:
space:
mode:
authorLibravatar Drew DeVault <sir@cmpwn.com>2018-07-13 04:07:11 -0700
committerLibravatar GitHub <noreply@github.com>2018-07-13 04:07:11 -0700
commitbcdf04d79c28866d971dc968a2497f7d95ec1aae (patch)
tree874386abb337c953b60ee2efe0a799d9dfb010ee /sway
parentMerge pull request #2255 from emersion/xwayland-floating-borders (diff)
parentadd error handling for scroll button out of range (diff)
downloadsway-bcdf04d79c28866d971dc968a2497f7d95ec1aae.tar.gz
sway-bcdf04d79c28866d971dc968a2497f7d95ec1aae.tar.zst
sway-bcdf04d79c28866d971dc968a2497f7d95ec1aae.zip
Merge pull request #2252 from rkubosz/scroll-button-option
feature: scroll button option for input devices
Diffstat (limited to 'sway')
-rw-r--r--sway/commands/input.c1
-rw-r--r--sway/commands/input/scroll_button.c44
-rw-r--r--sway/config/input.c4
-rw-r--r--sway/input/input-manager.c6
-rw-r--r--sway/meson.build1
-rw-r--r--sway/sway-input.5.scd5
6 files changed, 61 insertions, 0 deletions
diff --git a/sway/commands/input.c b/sway/commands/input.c
index 574e1f8c..e7906b0e 100644
--- a/sway/commands/input.c
+++ b/sway/commands/input.c
@@ -20,6 +20,7 @@ static struct cmd_handler input_handlers[] = {
20 { "pointer_accel", input_cmd_pointer_accel }, 20 { "pointer_accel", input_cmd_pointer_accel },
21 { "repeat_delay", input_cmd_repeat_delay }, 21 { "repeat_delay", input_cmd_repeat_delay },
22 { "repeat_rate", input_cmd_repeat_rate }, 22 { "repeat_rate", input_cmd_repeat_rate },
23 { "scroll_button", input_cmd_scroll_button },
23 { "scroll_method", input_cmd_scroll_method }, 24 { "scroll_method", input_cmd_scroll_method },
24 { "tap", input_cmd_tap }, 25 { "tap", input_cmd_tap },
25 { "xkb_layout", input_cmd_xkb_layout }, 26 { "xkb_layout", input_cmd_xkb_layout },
diff --git a/sway/commands/input/scroll_button.c b/sway/commands/input/scroll_button.c
new file mode 100644
index 00000000..350fcca2
--- /dev/null
+++ b/sway/commands/input/scroll_button.c
@@ -0,0 +1,44 @@
1#include <string.h>
2#include <strings.h>
3#include <errno.h>
4#include "sway/config.h"
5#include "sway/commands.h"
6#include "sway/input/input-manager.h"
7
8struct cmd_results *input_cmd_scroll_button(int argc, char **argv) {
9 struct cmd_results *error = NULL;
10 if ((error = checkarg(argc, "scroll_button", EXPECTED_AT_LEAST, 1))) {
11 return error;
12 }
13 struct input_config *current_input_config =
14 config->handler_context.input_config;
15 if (!current_input_config) {
16 return cmd_results_new(CMD_FAILURE, "scroll_button",
17 "No input device defined.");
18 }
19 struct input_config *new_config =
20 new_input_config(current_input_config->identifier);
21
22 errno = 0;
23 char *endptr;
24 int scroll_button = strtol(*argv, &endptr, 10);
25 if (endptr == *argv && scroll_button == 0) {
26 free_input_config(new_config);
27 return cmd_results_new(CMD_INVALID, "scroll_button",
28 "Scroll button identifier must be an integer.");
29 }
30 if (errno == ERANGE) {
31 free_input_config(new_config);
32 return cmd_results_new(CMD_INVALID, "scroll_button",
33 "Scroll button identifier out of range.");
34 }
35 if (scroll_button < 0) {
36 free_input_config(new_config);
37 return cmd_results_new(CMD_INVALID, "scroll_button",
38 "Scroll button identifier cannot be negative.");
39 }
40 new_config->scroll_button = scroll_button;
41
42 apply_input_config(new_config);
43 return cmd_results_new(CMD_SUCCESS, NULL, NULL);
44}
diff --git a/sway/config/input.c b/sway/config/input.c
index 9840df18..cbd7d5f0 100644
--- a/sway/config/input.c
+++ b/sway/config/input.c
@@ -27,6 +27,7 @@ struct input_config *new_input_config(const char* identifier) {
27 input->natural_scroll = INT_MIN; 27 input->natural_scroll = INT_MIN;
28 input->accel_profile = INT_MIN; 28 input->accel_profile = INT_MIN;
29 input->pointer_accel = FLT_MIN; 29 input->pointer_accel = FLT_MIN;
30 input->scroll_button = INT_MIN;
30 input->scroll_method = INT_MIN; 31 input->scroll_method = INT_MIN;
31 input->left_handed = INT_MIN; 32 input->left_handed = INT_MIN;
32 input->repeat_delay = INT_MIN; 33 input->repeat_delay = INT_MIN;
@@ -70,6 +71,9 @@ void merge_input_config(struct input_config *dst, struct input_config *src) {
70 if (src->scroll_method != INT_MIN) { 71 if (src->scroll_method != INT_MIN) {
71 dst->scroll_method = src->scroll_method; 72 dst->scroll_method = src->scroll_method;
72 } 73 }
74 if (src->scroll_button != INT_MIN) {
75 dst->scroll_button = src->scroll_button;
76 }
73 if (src->send_events != INT_MIN) { 77 if (src->send_events != INT_MIN) {
74 dst->send_events = src->send_events; 78 dst->send_events = src->send_events;
75 } 79 }
diff --git a/sway/input/input-manager.c b/sway/input/input-manager.c
index daaf1fb6..b18989d0 100644
--- a/sway/input/input-manager.c
+++ b/sway/input/input-manager.c
@@ -158,6 +158,12 @@ static void input_manager_libinput_config_pointer(
158 libinput_device_config_accel_set_speed(libinput_device, 158 libinput_device_config_accel_set_speed(libinput_device,
159 ic->pointer_accel); 159 ic->pointer_accel);
160 } 160 }
161 if (ic->scroll_button != INT_MIN) {
162 wlr_log(WLR_DEBUG, "libinput_config_pointer(%s) scroll_set_button(%d)",
163 ic->identifier, ic->scroll_button);
164 libinput_device_config_scroll_set_button(libinput_device,
165 ic->scroll_button);
166 }
161 if (ic->scroll_method != INT_MIN) { 167 if (ic->scroll_method != INT_MIN) {
162 wlr_log(WLR_DEBUG, "libinput_config_pointer(%s) scroll_set_method(%d)", 168 wlr_log(WLR_DEBUG, "libinput_config_pointer(%s) scroll_set_method(%d)",
163 ic->identifier, ic->scroll_method); 169 ic->identifier, ic->scroll_method);
diff --git a/sway/meson.build b/sway/meson.build
index 72192917..6fc78db3 100644
--- a/sway/meson.build
+++ b/sway/meson.build
@@ -118,6 +118,7 @@ sway_sources = files(
118 'commands/input/pointer_accel.c', 118 'commands/input/pointer_accel.c',
119 'commands/input/repeat_delay.c', 119 'commands/input/repeat_delay.c',
120 'commands/input/repeat_rate.c', 120 'commands/input/repeat_rate.c',
121 'commands/input/scroll_button.c',
121 'commands/input/scroll_method.c', 122 'commands/input/scroll_method.c',
122 'commands/input/tap.c', 123 'commands/input/tap.c',
123 'commands/input/xkb_layout.c', 124 'commands/input/xkb_layout.c',
diff --git a/sway/sway-input.5.scd b/sway/sway-input.5.scd
index cf7a6385..4bc66394 100644
--- a/sway/sway-input.5.scd
+++ b/sway/sway-input.5.scd
@@ -92,6 +92,11 @@ For more information on these xkb configuration options, see
92*input* <identifier> scroll\_method none|two\_finger|edge|on\_button\_down 92*input* <identifier> scroll\_method none|two\_finger|edge|on\_button\_down
93 Changes the scroll method for the specified input device. 93 Changes the scroll method for the specified input device.
94 94
95*input* <identifier> scroll\_button <button\_identifier>
96 Sets button used for scroll\_method on\_button\_down. The button identifier
97 can be obtained from `libinput debug-events`.
98 If set to 0, it disables the scroll\_button on\_button\_down.
99
95*input* <identifier> tap enabled|disabled 100*input* <identifier> tap enabled|disabled
96 Enables or disables tap for specified input device. 101 Enables or disables tap for specified input device.
97 102