diff options
author | Drew DeVault <sir@cmpwn.com> | 2019-01-13 20:40:00 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-01-13 20:40:00 -0500 |
commit | db1631b67dd463f6516275ac4387712e39f9a384 (patch) | |
tree | 4dfb666777353f2d6bc77ec24d1a1b2b808925e0 | |
parent | 23ab56bbf746e7aa4a940caa343d447a969fa37e (diff) | |
parent | 4e6bd53abf900020bbc38ceddb7b7505be4fb96d (diff) |
Merge pull request #3342 from RedSoxFan/scroll-buttons-improved
Improve mouse button parsing: input scroll_button
-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 @@ -#include <string.h> -#include <strings.h> -#include <errno.h> +#include <libevdev/libevdev.h> #include "sway/config.h" #include "sway/commands.h" -#include "sway/input/input-manager.h" +#include "sway/input/cursor.h" struct cmd_results *input_cmd_scroll_button(int argc, char **argv) { struct cmd_results *error = NULL; @@ -16,22 +14,26 @@ struct cmd_results *input_cmd_scroll_button(int argc, char **argv) { "No input device defined."); } - errno = 0; - char *endptr; - int scroll_button = strtol(*argv, &endptr, 10); - if (endptr == *argv && scroll_button == 0) { - return cmd_results_new(CMD_INVALID, "scroll_button", - "Scroll button identifier must be an integer."); + if (strcmp(*argv, "disable") == 0) { + ic->scroll_button = 0; + return cmd_results_new(CMD_SUCCESS, NULL, NULL); } - if (errno == ERANGE) { + + char *message = NULL; + uint32_t button = get_mouse_button(*argv, &message); + if (message) { + error = cmd_results_new(CMD_INVALID, "scroll_button", message); + free(message); + return error; + } else if (button == SWAY_SCROLL_UP || button == SWAY_SCROLL_DOWN + || button == SWAY_SCROLL_LEFT || button == SWAY_SCROLL_RIGHT) { return cmd_results_new(CMD_INVALID, "scroll_button", - "Scroll button identifier out of range."); - } - if (scroll_button < 0) { + "X11 axis buttons are not supported for scroll_button"); + } else if (!button) { return cmd_results_new(CMD_INVALID, "scroll_button", - "Scroll button identifier cannot be negative."); + "Unknown button %s", *argv); } - ic->scroll_button = scroll_button; + ic->scroll_button = button; return cmd_results_new(CMD_SUCCESS, NULL, NULL); } diff --git a/sway/input/cursor.c b/sway/input/cursor.c index 06294b8b..c65548c3 100644 --- a/sway/input/cursor.c +++ b/sway/input/cursor.c @@ -1227,7 +1227,7 @@ uint32_t get_mouse_bindcode(const char *name, char **error) { uint32_t get_mouse_button(const char *name, char **error) { uint32_t button = get_mouse_bindsym(name, error); - if (!button && !error) { + if (!button && !*error) { button = get_mouse_bindcode(name, error); } return button; diff --git a/sway/sway-input.5.scd b/sway/sway-input.5.scd index c54babaa..7d1a7169 100644 --- a/sway/sway-input.5.scd +++ b/sway/sway-input.5.scd @@ -108,10 +108,11 @@ The following commands may only be used in the configuration file. *input* <identifier> repeat\_rate <characters per second> Sets the frequency of key repeats once the repeat\_delay has passed. -*input* <identifier> scroll\_button <button\_identifier> - Sets button used for scroll\_method on\_button\_down. The button identifier - can be obtained from `libinput debug-events`. - If set to 0, it disables the scroll\_button on\_button\_down. +*input* <identifier> scroll\_button disable|button[1-3,8,9]|<event-code-or-name> + Sets the button used for scroll\_method on\_button\_down. The button can + be given as an event name or code, which can be obtained from `libinput + debug-events`, or as a x11 mouse button (button[1-3,8,9]). If set to + _disable_, it disables the scroll\_method on\_button\_down. *input* <identifier> scroll\_factor <floating point value> Changes the scroll factor for the specified input device. Scroll speed will |