From 3e614814feaf25a088a2e27eb5db649af7e3036f Mon Sep 17 00:00:00 2001 From: Consolatis <35009135+Consolatis@users.noreply.github.com> Date: Tue, 19 Mar 2024 00:32:47 +0100 Subject: [PATCH] chase: input inhibit removal https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4440 --- include/labwc.h | 14 +------- src/input/cursor.c | 12 +------ src/input/keyboard.c | 8 ++--- src/seat.c | 5 --- src/server.c | 71 ---------------------------------------- subprojects/wlroots.wrap | 2 +- 6 files changed, 5 insertions(+), 107 deletions(-) diff --git a/include/labwc.h b/include/labwc.h index c4faf55b..bb1efd8e 100644 --- a/include/labwc.h +++ b/include/labwc.h @@ -164,7 +164,6 @@ struct seat { /* Used to prevent region snapping when starting a move with A-Left */ bool region_prevent_snap; - struct wl_client *active_client_while_inhibited; struct wl_list inputs; struct wl_listener new_input; struct wl_listener focus_change; @@ -242,10 +241,6 @@ struct server { struct wl_listener xwayland_new_surface; #endif - struct wlr_input_inhibit_manager *input_inhibit; - struct wl_listener input_inhibit_activate; - struct wl_listener input_inhibit_deactivate; - struct wlr_xdg_activation_v1 *xdg_activation; struct wl_listener xdg_activation_request; struct wl_listener xdg_activation_new_token; @@ -430,7 +425,7 @@ void foreign_toplevel_update_outputs(struct view *view); * - optionally raise above other views * * It's okay to call this function even if the view isn't mapped or the - * session is locked/input is inhibited; it will simply do nothing. + * session is locked; it will simply do nothing. */ void desktop_focus_view(struct view *view, bool raise); @@ -514,13 +509,6 @@ void server_init(struct server *server); void server_start(struct server *server); void server_finish(struct server *server); -/* - * wlroots "input inhibitor" extension (required for swaylock) blocks - * any client other than the requesting client from receiving events - */ -bool input_inhibit_blocks_surface(struct seat *seat, - struct wl_resource *resource); - void create_constraint(struct wl_listener *listener, void *data); void constrain_cursor(struct server *server, struct wlr_pointer_constraint_v1 *constraint); diff --git a/src/input/cursor.c b/src/input/cursor.c index 3c144154..abc2cd74 100644 --- a/src/input/cursor.c +++ b/src/input/cursor.c @@ -358,15 +358,6 @@ cursor_update_image(struct seat *seat) cursor_names[cursor]); } -bool -input_inhibit_blocks_surface(struct seat *seat, struct wl_resource *resource) -{ - struct wl_client *inhibiting_client = - seat->active_client_while_inhibited; - return inhibiting_client - && inhibiting_client != wl_resource_get_client(resource); -} - static bool update_pressed_surface(struct seat *seat, struct cursor_context *ctx) { @@ -472,8 +463,7 @@ cursor_update_common(struct server *server, struct cursor_context *ctx, return false; } - if (ctx->surface && !input_inhibit_blocks_surface(seat, - ctx->surface->resource)) { + if (ctx->surface) { /* * Cursor is over an input-enabled client surface. The * cursor image will be set by request_cursor_notify() diff --git a/src/input/keyboard.c b/src/input/keyboard.c index 5806441a..a1979aaa 100644 --- a/src/input/keyboard.c +++ b/src/input/keyboard.c @@ -457,8 +457,7 @@ handle_compositor_keybindings(struct keyboard *keyboard, if (event->state == WL_KEYBOARD_KEY_STATE_RELEASED) { if (cur_keybind && cur_keybind->on_release) { key_state_bound_key_remove(event->keycode); - if (seat->server->session_lock_manager->locked - || seat->active_client_while_inhibited) { + if (seat->server->session_lock_manager->locked) { cur_keybind = NULL; return true; } @@ -476,13 +475,10 @@ handle_compositor_keybindings(struct keyboard *keyboard, } /* - * Ignore labwc keybindings if input is inhibited + * Ignore labwc keybindings if the session is locked. * It's important to do this after key_state_set_pressed() to ensure * _all_ key press/releases are registered */ - if (seat->active_client_while_inhibited) { - return false; - } if (seat->server->session_lock_manager->locked) { return false; } diff --git a/src/seat.c b/src/seat.c index ce1751c4..0e7f87f4 100644 --- a/src/seat.c +++ b/src/seat.c @@ -637,11 +637,6 @@ seat_focus(struct seat *seat, struct wlr_surface *surface, bool is_lock_surface) return; } - /* Respect input inhibit (also used by some lock screens) */ - if (input_inhibit_blocks_surface(seat, surface->resource)) { - return; - } - if (!wlr_seat_get_keyboard(seat->seat)) { /* * wlr_seat_keyboard_notify_enter() sends wl_keyboard.modifiers, diff --git a/src/server.c b/src/server.c index 0a093930..8b1a4fd4 100644 --- a/src/server.c +++ b/src/server.c @@ -10,7 +10,6 @@ #include #include #include -#include #include #include #include @@ -150,61 +149,6 @@ handle_sigchld(int signal, void *data) return 0; } -static void -seat_inhibit_input(struct seat *seat, struct wl_client *active_client) -{ - seat->active_client_while_inhibited = active_client; - - if (seat->focused_layer && active_client != - wl_resource_get_client(seat->focused_layer->resource)) { - seat_set_focus_layer(seat, NULL); - } - struct wlr_surface *previous_kb_surface = - seat->seat->keyboard_state.focused_surface; - if (previous_kb_surface && active_client != - wl_resource_get_client(previous_kb_surface->resource)) { - seat_focus_surface(seat, NULL); /* keyboard focus */ - } - - struct wlr_seat_client *previous_ptr_client = - seat->seat->pointer_state.focused_client; - if (previous_ptr_client && previous_ptr_client->client != active_client) { - wlr_seat_pointer_clear_focus(seat->seat); - } -} - -static void -seat_disinhibit_input(struct seat *seat) -{ - seat->active_client_while_inhibited = NULL; - - /* - * Triggers a refocus of the topmost surface layer if necessary - * TODO: Make layer surface focus per-output based on cursor position - */ - output_update_all_usable_areas(seat->server, /*layout_changed*/ false); -} - -static void -handle_input_inhibit(struct wl_listener *listener, void *data) -{ - wlr_log(WLR_INFO, "activate input inhibit"); - - struct server *server = - wl_container_of(listener, server, input_inhibit_activate); - seat_inhibit_input(&server->seat, server->input_inhibit->active_client); -} - -static void -handle_input_disinhibit(struct wl_listener *listener, void *data) -{ - wlr_log(WLR_INFO, "deactivate input inhibit"); - - struct server *server = - wl_container_of(listener, server, input_inhibit_deactivate); - seat_disinhibit_input(&server->seat); -} - static void handle_drm_lease_request(struct wl_listener *listener, void *data) { @@ -521,21 +465,6 @@ server_init(struct server *server) wl_signal_add(&server->constraints->events.new_constraint, &server->new_constraint); - server->input_inhibit = - wlr_input_inhibit_manager_create(server->wl_display); - if (!server->input_inhibit) { - wlr_log(WLR_ERROR, "unable to create input inhibit manager"); - exit(EXIT_FAILURE); - } - - wl_signal_add(&server->input_inhibit->events.activate, - &server->input_inhibit_activate); - server->input_inhibit_activate.notify = handle_input_inhibit; - - wl_signal_add(&server->input_inhibit->events.deactivate, - &server->input_inhibit_deactivate); - server->input_inhibit_deactivate.notify = handle_input_disinhibit; - server->foreign_toplevel_manager = wlr_foreign_toplevel_manager_v1_create(server->wl_display); diff --git a/subprojects/wlroots.wrap b/subprojects/wlroots.wrap index 33e301a6..f6e78e26 100644 --- a/subprojects/wlroots.wrap +++ b/subprojects/wlroots.wrap @@ -1,6 +1,6 @@ [wrap-git] url = https://gitlab.freedesktop.org/wlroots/wlroots.git -revision = 3b4d7d2a926a0b65d3bad6649615c0b6a61c0336 +revision = 5dd614b9adc97bf1c89c8e2ebe8504841f8635ea [provide] dependency_names = wlroots