diff options
Diffstat (limited to 'sway/input/seat.c')
-rw-r--r-- | sway/input/seat.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/sway/input/seat.c b/sway/input/seat.c index 18b63715..090a4d3c 100644 --- a/sway/input/seat.c +++ b/sway/input/seat.c | |||
@@ -1089,9 +1089,20 @@ void seat_configure_xcursor(struct sway_seat *seat) { | |||
1089 | 1089 | ||
1090 | bool seat_is_input_allowed(struct sway_seat *seat, | 1090 | bool seat_is_input_allowed(struct sway_seat *seat, |
1091 | struct wlr_surface *surface) { | 1091 | struct wlr_surface *surface) { |
1092 | if (server.session_lock.locked) { | ||
1093 | if (server.session_lock.lock == NULL) { | ||
1094 | return false; | ||
1095 | } | ||
1096 | struct wlr_session_lock_surface_v1 *lock_surf; | ||
1097 | wl_list_for_each(lock_surf, &server.session_lock.lock->surfaces, link) { | ||
1098 | if (lock_surf->surface == surface) { | ||
1099 | return true; | ||
1100 | } | ||
1101 | } | ||
1102 | return false; | ||
1103 | } | ||
1092 | struct wl_client *client = wl_resource_get_client(surface->resource); | 1104 | struct wl_client *client = wl_resource_get_client(surface->resource); |
1093 | return seat->exclusive_client == client || | 1105 | return seat->exclusive_client == client || seat->exclusive_client == NULL; |
1094 | (seat->exclusive_client == NULL && !server.session_lock.locked); | ||
1095 | } | 1106 | } |
1096 | 1107 | ||
1097 | static void send_unfocus(struct sway_container *con, void *data) { | 1108 | static void send_unfocus(struct sway_container *con, void *data) { |