aboutsummaryrefslogtreecommitdiffstats
path: root/sway
diff options
context:
space:
mode:
authorLibravatar Ferdinand Schober <ferdinand.schober@fau.de>2022-09-19 23:20:02 +0200
committerLibravatar Simon Ser <contact@emersion.fr>2022-10-09 10:07:51 +0200
commitd5659948f1105b99d08542de7c370ba908b8cec8 (patch)
tree46c7f81e6d3c657d411fbfdff060722956b35147 /sway
parentImprove Japanese translation (diff)
downloadsway-d5659948f1105b99d08542de7c370ba908b8cec8.tar.gz
sway-d5659948f1105b99d08542de7c370ba908b8cec8.tar.zst
sway-d5659948f1105b99d08542de7c370ba908b8cec8.zip
allow pointer_constraints on layer_shell surfaces
Diffstat (limited to 'sway')
-rw-r--r--sway/input/cursor.c9
-rw-r--r--sway/input/seat.c12
2 files changed, 15 insertions, 6 deletions
diff --git a/sway/input/cursor.c b/sway/input/cursor.c
index 2ee63124..78a221d8 100644
--- a/sway/input/cursor.c
+++ b/sway/input/cursor.c
@@ -1372,12 +1372,9 @@ void handle_pointer_constraint(struct wl_listener *listener, void *data) {
1372 sway_constraint->destroy.notify = handle_constraint_destroy; 1372 sway_constraint->destroy.notify = handle_constraint_destroy;
1373 wl_signal_add(&constraint->events.destroy, &sway_constraint->destroy); 1373 wl_signal_add(&constraint->events.destroy, &sway_constraint->destroy);
1374 1374
1375 struct sway_node *focus = seat_get_focus(seat); 1375 struct wlr_surface *surface = seat_get_focused_surface(seat);
1376 if (focus && node_is_view(focus)) { 1376 if (surface == constraint->surface) {
1377 struct wlr_surface *surface = focus->sway_container->view->surface; 1377 sway_cursor_constrain(seat->cursor, constraint);
1378 if (surface == constraint->surface) {
1379 sway_cursor_constrain(seat->cursor, constraint);
1380 }
1381 } 1378 }
1382} 1379}
1383 1380
diff --git a/sway/input/seat.c b/sway/input/seat.c
index b21e1b86..6abb54e8 100644
--- a/sway/input/seat.c
+++ b/sway/input/seat.c
@@ -1462,6 +1462,18 @@ struct sway_node *seat_get_focus(struct sway_seat *seat) {
1462 return current->node; 1462 return current->node;
1463} 1463}
1464 1464
1465struct wlr_surface *seat_get_focused_surface(struct sway_seat *seat) {
1466 struct sway_node *focus = seat_get_focus(seat);
1467 if (focus && node_is_view(focus)) {
1468 return focus->sway_container->view->surface;
1469 }
1470 struct sway_seat_node *current = wl_container_of(seat->focus_stack.next, current, link);
1471 struct wlr_layer_surface_v1 *layer = current->seat->focused_layer;
1472 if (layer && layer->surface)
1473 return layer->surface;
1474 return NULL;
1475}
1476
1465struct sway_workspace *seat_get_focused_workspace(struct sway_seat *seat) { 1477struct sway_workspace *seat_get_focused_workspace(struct sway_seat *seat) {
1466 struct sway_node *focus = seat_get_focus_inactive(seat, &root->node); 1478 struct sway_node *focus = seat_get_focus_inactive(seat, &root->node);
1467 if (!focus) { 1479 if (!focus) {