Add mouse button bindings
Adds support for bindings like: bindsym button3 floating toggle bindsym $mod+button3 floating toggle
This commit is contained in:
parent
02d1ae7e27
commit
400998d6d2
|
@ -1,7 +1,9 @@
|
||||||
#include <xkbcommon/xkbcommon.h>
|
#include <xkbcommon/xkbcommon.h>
|
||||||
#include <xkbcommon/xkbcommon-names.h>
|
#include <xkbcommon/xkbcommon-names.h>
|
||||||
|
#include <strings.h>
|
||||||
#include "sway/commands.h"
|
#include "sway/commands.h"
|
||||||
#include "sway/config.h"
|
#include "sway/config.h"
|
||||||
|
#include "sway/input_state.h"
|
||||||
#include "list.h"
|
#include "list.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "stringop.h"
|
#include "stringop.h"
|
||||||
|
@ -52,6 +54,12 @@ struct cmd_results *cmd_bindsym(int argc, char **argv) {
|
||||||
// Check for xkb key
|
// Check for xkb key
|
||||||
xkb_keysym_t sym = xkb_keysym_from_name(split->items[i],
|
xkb_keysym_t sym = xkb_keysym_from_name(split->items[i],
|
||||||
XKB_KEYSYM_CASE_INSENSITIVE);
|
XKB_KEYSYM_CASE_INSENSITIVE);
|
||||||
|
|
||||||
|
// Check for mouse binding
|
||||||
|
if (strncasecmp(split->items[i], "button", strlen("button")) == 0 &&
|
||||||
|
strlen(split->items[i]) == strlen("button0")) {
|
||||||
|
sym = ((char *)split->items[i])[strlen("button")] - '1' + M_LEFT_CLICK;
|
||||||
|
}
|
||||||
if (!sym) {
|
if (!sym) {
|
||||||
free_sway_binding(binding);
|
free_sway_binding(binding);
|
||||||
free_flat_list(split);
|
free_flat_list(split);
|
||||||
|
|
|
@ -917,6 +917,26 @@ static bool handle_pointer_button(wlc_handle view, uint32_t time, const struct w
|
||||||
// Update view pointer is on
|
// Update view pointer is on
|
||||||
pointer_state.view = container_under_pointer();
|
pointer_state.view = container_under_pointer();
|
||||||
|
|
||||||
|
struct sway_mode *mode = config->current_mode;
|
||||||
|
// handle bindings
|
||||||
|
for (int i = 0; i < mode->bindings->length; ++i) {
|
||||||
|
struct sway_binding *binding = mode->bindings->items[i];
|
||||||
|
if ((modifiers->mods ^ binding->modifiers) == 0) {
|
||||||
|
switch (state) {
|
||||||
|
case WLC_BUTTON_STATE_PRESSED: {
|
||||||
|
if (!binding->release && handle_bindsym(binding, button, 0)) {
|
||||||
|
return EVENT_HANDLED;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case WLC_BUTTON_STATE_RELEASED:
|
||||||
|
if (binding->release && handle_bindsym(binding, button, 0)) {
|
||||||
|
return EVENT_HANDLED;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Update pointer_state
|
// Update pointer_state
|
||||||
switch (button) {
|
switch (button) {
|
||||||
case M_LEFT_CLICK:
|
case M_LEFT_CLICK:
|
||||||
|
|
Loading…
Reference in a new issue