diff options
author | Brian Ashworth <bosrsf04@gmail.com> | 2019-01-10 12:45:52 -0500 |
---|---|---|
committer | Brian Ashworth <bosrsf04@gmail.com> | 2019-01-10 12:45:52 -0500 |
commit | 4e6bd53abf900020bbc38ceddb7b7505be4fb96d (patch) | |
tree | be52327cbf9f415527143cfe36597f52fa0f9f63 | |
parent | Merge pull request #3400 from ianyfan/config-brace (diff) | |
download | sway-4e6bd53abf900020bbc38ceddb7b7505be4fb96d.tar.gz sway-4e6bd53abf900020bbc38ceddb7b7505be4fb96d.tar.zst sway-4e6bd53abf900020bbc38ceddb7b7505be4fb96d.zip |
input_cmd_scroll_button: utilize mouse btn helpers
This modifies `input_cmd_scroll_button` to utilize the mouse button
helper `get_mouse_button` when parsing the button. x11 axis buttons are
not supported with this command and `CMD_INVALID` will be returned, but
all other x11 buttons, button event names, and button event codes should
be working
-rw-r--r-- | sway/commands/input/scroll_button.c | 34 | ||||
-rw-r--r-- | sway/input/cursor.c | 2 | ||||
-rw-r--r-- | sway/sway-input.5.scd | 9 |
3 files changed, 24 insertions, 21 deletions
diff --git a/sway/commands/input/scroll_button.c b/sway/commands/input/scroll_button.c index 1958f23c..d82a1fe1 100644 --- a/sway/commands/input/scroll_button.c +++ b/sway/commands/input/scroll_button.c | |||
@@ -1,9 +1,7 @@ | |||
1 | #include <string.h> | 1 | #include <libevdev/libevdev.h> |
2 | #include <strings.h> | ||
3 | #include <errno.h> | ||
4 | #include "sway/config.h" | 2 | #include "sway/config.h" |
5 | #include "sway/commands.h" | 3 | #include "sway/commands.h" |
6 | #include "sway/input/input-manager.h" | 4 | #include "sway/input/cursor.h" |
7 | 5 | ||
8 | struct cmd_results *input_cmd_scroll_button(int argc, char **argv) { | 6 | struct cmd_results *input_cmd_scroll_button(int argc, char **argv) { |
9 | struct cmd_results *error = NULL; | 7 | struct cmd_results *error = NULL; |
@@ -16,22 +14,26 @@ struct cmd_results *input_cmd_scroll_button(int argc, char **argv) { | |||
16 | "No input device defined."); | 14 | "No input device defined."); |
17 | } | 15 | } |
18 | 16 | ||
19 | errno = 0; | 17 | if (strcmp(*argv, "disable") == 0) { |
20 | char *endptr; | 18 | ic->scroll_button = 0; |
21 | int scroll_button = strtol(*argv, &endptr, 10); | 19 | return cmd_results_new(CMD_SUCCESS, NULL, NULL); |
22 | if (endptr == *argv && scroll_button == 0) { | ||
23 | return cmd_results_new(CMD_INVALID, "scroll_button", | ||
24 | "Scroll button identifier must be an integer."); | ||
25 | } | 20 | } |
26 | if (errno == ERANGE) { | 21 | |
22 | char *message = NULL; | ||
23 | uint32_t button = get_mouse_button(*argv, &message); | ||
24 | if (message) { | ||
25 | error = cmd_results_new(CMD_INVALID, "scroll_button", message); | ||
26 | free(message); | ||
27 | return error; | ||
28 | } else if (button == SWAY_SCROLL_UP || button == SWAY_SCROLL_DOWN | ||
29 | || button == SWAY_SCROLL_LEFT || button == SWAY_SCROLL_RIGHT) { | ||
27 | return cmd_results_new(CMD_INVALID, "scroll_button", | 30 | return cmd_results_new(CMD_INVALID, "scroll_button", |
28 | "Scroll button identifier out of range."); | 31 | "X11 axis buttons are not supported for scroll_button"); |
29 | } | 32 | } else if (!button) { |
30 | if (scroll_button < 0) { | ||
31 | return cmd_results_new(CMD_INVALID, "scroll_button", | 33 | return cmd_results_new(CMD_INVALID, "scroll_button", |
32 | "Scroll button identifier cannot be negative."); | 34 | "Unknown button %s", *argv); |
33 | } | 35 | } |
34 | ic->scroll_button = scroll_button; | 36 | ic->scroll_button = button; |
35 | 37 | ||
36 | return cmd_results_new(CMD_SUCCESS, NULL, NULL); | 38 | return cmd_results_new(CMD_SUCCESS, NULL, NULL); |
37 | } | 39 | } |
diff --git a/sway/input/cursor.c b/sway/input/cursor.c index 9af7ef57..a69cccb4 100644 --- a/sway/input/cursor.c +++ b/sway/input/cursor.c | |||
@@ -1593,7 +1593,7 @@ uint32_t get_mouse_bindcode(const char *name, char **error) { | |||
1593 | 1593 | ||
1594 | uint32_t get_mouse_button(const char *name, char **error) { | 1594 | uint32_t get_mouse_button(const char *name, char **error) { |
1595 | uint32_t button = get_mouse_bindsym(name, error); | 1595 | uint32_t button = get_mouse_bindsym(name, error); |
1596 | if (!button && !error) { | 1596 | if (!button && !*error) { |
1597 | button = get_mouse_bindcode(name, error); | 1597 | button = get_mouse_bindcode(name, error); |
1598 | } | 1598 | } |
1599 | return button; | 1599 | return button; |
diff --git a/sway/sway-input.5.scd b/sway/sway-input.5.scd index 820194a9..1b2255b8 100644 --- a/sway/sway-input.5.scd +++ b/sway/sway-input.5.scd | |||
@@ -105,10 +105,11 @@ The following commands may only be used in the configuration file. | |||
105 | *input* <identifier> repeat\_rate <characters per second> | 105 | *input* <identifier> repeat\_rate <characters per second> |
106 | Sets the frequency of key repeats once the repeat\_delay has passed. | 106 | Sets the frequency of key repeats once the repeat\_delay has passed. |
107 | 107 | ||
108 | *input* <identifier> scroll\_button <button\_identifier> | 108 | *input* <identifier> scroll\_button disable|button[1-3,8,9]|<event-code-or-name> |
109 | Sets button used for scroll\_method on\_button\_down. The button identifier | 109 | Sets the button used for scroll\_method on\_button\_down. The button can |
110 | can be obtained from `libinput debug-events`. | 110 | be given as an event name or code, which can be obtained from `libinput |
111 | If set to 0, it disables the scroll\_button on\_button\_down. | 111 | debug-events`, or as a x11 mouse button (button[1-3,8,9]). If set to |
112 | _disable_, it disables the scroll\_method on\_button\_down. | ||
112 | 113 | ||
113 | *input* <identifier> scroll\_factor <floating point value> | 114 | *input* <identifier> scroll\_factor <floating point value> |
114 | Changes the scroll factor for the specified input device. Scroll speed will | 115 | Changes the scroll factor for the specified input device. Scroll speed will |