Skip to content

Commit

Permalink
Use container under cursor for mouse bindings
Browse files Browse the repository at this point in the history
This matches i3's behavior of executing mouse bindings in regards to the
container under the cursor instead of what is focused.
  • Loading branch information
RedSoxFan authored and ddevault committed Feb 18, 2019
1 parent 0940a46 commit a1b9aa1
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 9 deletions.
20 changes: 17 additions & 3 deletions sway/commands/bind.c
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
#define _POSIX_C_SOURCE 200809L
#include <libevdev/libevdev.h>
#include <linux/input-event-codes.h>
#include <xkbcommon/xkbcommon.h>
#include <xkbcommon/xkbcommon-names.h>
#include <string.h>
#include <strings.h>
#include <xkbcommon/xkbcommon.h>
#include <xkbcommon/xkbcommon-names.h>
#include <wlr/types/wlr_cursor.h>
#include "sway/commands.h"
#include "sway/config.h"
#include "sway/input/cursor.h"
Expand Down Expand Up @@ -330,7 +331,20 @@ struct cmd_results *cmd_bindcode(int argc, char **argv) {
void seat_execute_command(struct sway_seat *seat, struct sway_binding *binding) {
sway_log(SWAY_DEBUG, "running command for binding: %s", binding->command);

list_t *res_list = execute_command(binding->command, seat, NULL);
struct sway_container *con = NULL;
if (binding->type == BINDING_MOUSESYM
|| binding->type == BINDING_MOUSECODE) {
struct wlr_surface *surface = NULL;
double sx, sy;
struct sway_node *node = node_at_coords(seat,
seat->cursor->cursor->x, seat->cursor->cursor->y,
&surface, &sx, &sy);
if (node && node->type == N_CONTAINER) {
con = node->sway_container;
}
}

list_t *res_list = execute_command(binding->command, seat, con);
bool success = true;
for (int i = 0; i < res_list->length; ++i) {
struct cmd_results *results = res_list->items[i];
Expand Down
13 changes: 7 additions & 6 deletions sway/sway.5.scd
Original file line number Diff line number Diff line change
Expand Up @@ -293,12 +293,13 @@ runtime.
overwrite a binding, swaynag will give you a warning. To silence this, use
the _--no-warn_ flag.

Mouse buttons can either be specified in the form _button[1-9]_ or by using
the name of the event code (ex _BTN\_LEFT_ or _BTN\_RIGHT_). For the former
option, the buttons will be mapped to their values in X11 (1=left, 2=middle,
3=right, 4=scroll up, 5=scroll down, 6=scroll left, 7=scroll right, 8=back,
9=forward). For the latter option, you can find the event names using
_libinput debug-events_.
Mouse bindings operate on the container under the cursor instead of the
container that has focus. Mouse buttons can either be specified in the form
_button[1-9]_ or by using the name of the event code (ex _BTN\_LEFT_ or
_BTN\_RIGHT_). For the former option, the buttons will be mapped to their
values in X11 (1=left, 2=middle, 3=right, 4=scroll up, 5=scroll down,
6=scroll left, 7=scroll right, 8=back, 9=forward). For the latter option,
you can find the event names using _libinput debug-events_.

_--whole-window_, _--border_, and _--exclude-titlebar_ are mouse-only options
which affect the region in which the mouse bindings can be triggered. By
Expand Down

0 comments on commit a1b9aa1

Please sign in to comment.