aboutsummaryrefslogtreecommitdiff
path: root/sway/commands
diff options
context:
space:
mode:
authorBrian Ashworth <bosrsf04@gmail.com>2019-02-17 20:33:37 -0500
committerBrian Ashworth <bosrsf04@gmail.com>2019-02-17 20:33:37 -0500
commit041594d2ab4fb6f8de2055d3704da5f54146c44e (patch)
tree98ad97cbeac9c87f49385fb33338a81b49d84441 /sway/commands
parentfaf15ee733681f14797d8b47078854a00f03f8fc (diff)
downloadsway-041594d2ab4fb6f8de2055d3704da5f54146c44e.tar.xz
Use container under cursor for mouse bindings
This matches i3's behavior of executing mouse bindings in regards to the container under the cursor instead of what is focused.
Diffstat (limited to 'sway/commands')
-rw-r--r--sway/commands/bind.c20
1 files changed, 17 insertions, 3 deletions
diff --git a/sway/commands/bind.c b/sway/commands/bind.c
index 59116d67..172e6b8a 100644
--- a/sway/commands/bind.c
+++ b/sway/commands/bind.c
@@ -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"
@@ -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];