diff options
-rw-r--r-- | include/sway/input/seat.h | 2 | ||||
-rw-r--r-- | sway/input/cursor.c | 9 | ||||
-rw-r--r-- | sway/input/seat.c | 12 |
3 files changed, 17 insertions, 6 deletions
diff --git a/include/sway/input/seat.h b/include/sway/input/seat.h index c2041742..e795ad5e 100644 --- a/include/sway/input/seat.h +++ b/include/sway/input/seat.h | |||
@@ -192,6 +192,8 @@ void seat_set_exclusive_client(struct sway_seat *seat, | |||
192 | 192 | ||
193 | struct sway_node *seat_get_focus(struct sway_seat *seat); | 193 | struct sway_node *seat_get_focus(struct sway_seat *seat); |
194 | 194 | ||
195 | struct wlr_surface *seat_get_focused_surface(struct sway_seat *seat); | ||
196 | |||
195 | struct sway_workspace *seat_get_focused_workspace(struct sway_seat *seat); | 197 | struct sway_workspace *seat_get_focused_workspace(struct sway_seat *seat); |
196 | 198 | ||
197 | // If a scratchpad container is fullscreen global, this can be used to try to | 199 | // If a scratchpad container is fullscreen global, this can be used to try to |
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 | ||
1465 | struct 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 | |||
1465 | struct sway_workspace *seat_get_focused_workspace(struct sway_seat *seat) { | 1477 | struct 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) { |