aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDrew DeVault <sir@cmpwn.com>2019-01-13 20:40:00 -0500
committerGitHub <noreply@github.com>2019-01-13 20:40:00 -0500
commitdb1631b67dd463f6516275ac4387712e39f9a384 (patch)
tree4dfb666777353f2d6bc77ec24d1a1b2b808925e0
parent23ab56bbf746e7aa4a940caa343d447a969fa37e (diff)
parent4e6bd53abf900020bbc38ceddb7b7505be4fb96d (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.c34
-rw-r--r--sway/input/cursor.c2
-rw-r--r--sway/sway-input.5.scd9
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