aboutsummaryrefslogtreecommitdiffstats
path: root/sway/input/seat.c
diff options
context:
space:
mode:
authorLibravatar Thomas Hebb <tommyhebb@gmail.com>2020-05-20 21:20:19 -0400
committerLibravatar Simon Ser <contact@emersion.fr>2020-06-05 17:24:23 +0200
commit84ec8f92a69feb303e0e521f482b75b2cd12c4aa (patch)
tree5ae6506ea226bf1e256598f08ca77caf4dfc2d95 /sway/input/seat.c
parentSave transform during transaction (diff)
downloadsway-84ec8f92a69feb303e0e521f482b75b2cd12c4aa.tar.gz
sway-84ec8f92a69feb303e0e521f482b75b2cd12c4aa.tar.zst
sway-84ec8f92a69feb303e0e521f482b75b2cd12c4aa.zip
Use new wlroots API for clearing keyboard/pointer focus during grabs
We are not allowed to do what we did in #5222 and pass a `NULL` surface wlr_seat_pointer_notify_enter(), and it's causing crashes when an xdg-shell popup is active (see #5294 and swaywm/wlroots#2161). Instead, solve #5220 using the new wlroots API introduced in swaywm/wlroots#2217.
Diffstat (limited to 'sway/input/seat.c')
-rw-r--r--sway/input/seat.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/sway/input/seat.c b/sway/input/seat.c
index e5f15613..73a8deac 100644
--- a/sway/input/seat.c
+++ b/sway/input/seat.c
@@ -698,7 +698,7 @@ static void seat_configure_keyboard(struct sway_seat *seat,
698 struct sway_node *focus = seat_get_focus(seat); 698 struct sway_node *focus = seat_get_focus(seat);
699 if (focus && node_is_view(focus)) { 699 if (focus && node_is_view(focus)) {
700 // force notify reenter to pick up the new configuration 700 // force notify reenter to pick up the new configuration
701 wlr_seat_keyboard_clear_focus(seat->wlr_seat); 701 wlr_seat_keyboard_notify_clear_focus(seat->wlr_seat);
702 seat_keyboard_notify_enter(seat, focus->sway_container->view->surface); 702 seat_keyboard_notify_enter(seat, focus->sway_container->view->surface);
703 } 703 }
704} 704}
@@ -963,7 +963,7 @@ static void send_unfocus(struct sway_container *con, void *data) {
963// Unfocus the container and any children (eg. when leaving `focus parent`) 963// Unfocus the container and any children (eg. when leaving `focus parent`)
964static void seat_send_unfocus(struct sway_node *node, struct sway_seat *seat) { 964static void seat_send_unfocus(struct sway_node *node, struct sway_seat *seat) {
965 sway_cursor_constrain(seat->cursor, NULL); 965 sway_cursor_constrain(seat->cursor, NULL);
966 wlr_seat_keyboard_clear_focus(seat->wlr_seat); 966 wlr_seat_keyboard_notify_clear_focus(seat->wlr_seat);
967 if (node->type == N_WORKSPACE) { 967 if (node->type == N_WORKSPACE) {
968 workspace_for_each_container(node->sway_workspace, send_unfocus, seat); 968 workspace_for_each_container(node->sway_workspace, send_unfocus, seat);
969 } else { 969 } else {
@@ -1230,7 +1230,7 @@ void seat_set_exclusive_client(struct sway_seat *seat,
1230 } 1230 }
1231 if (seat->wlr_seat->pointer_state.focused_client) { 1231 if (seat->wlr_seat->pointer_state.focused_client) {
1232 if (seat->wlr_seat->pointer_state.focused_client->client != client) { 1232 if (seat->wlr_seat->pointer_state.focused_client->client != client) {
1233 wlr_seat_pointer_clear_focus(seat->wlr_seat); 1233 wlr_seat_pointer_notify_clear_focus(seat->wlr_seat);
1234 } 1234 }
1235 } 1235 }
1236 struct timespec now; 1236 struct timespec now;