]> git.mdlowis.com Git - proto/labwc.git/commitdiff
chase: input inhibit removal
authorConsolatis <35009135+Consolatis@users.noreply.github.com>
Mon, 18 Mar 2024 23:32:47 +0000 (00:32 +0100)
committerJohan Malm <johanmalm@users.noreply.github.com>
Wed, 17 Jul 2024 20:28:59 +0000 (21:28 +0100)
https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4440

include/labwc.h
src/input/cursor.c
src/input/keyboard.c
src/seat.c
src/server.c
subprojects/wlroots.wrap

index c4faf55bbc145542998a2f5b4d57c977a2e4c755..bb1efd8ebbf614e6e276bcb59174346387fecc5e 100644 (file)
@@ -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);
index 3c144154dfbbd98776e14d7790e6459266ecf6aa..abc2cd7464e9fd4a14c886e5d162563924defa2e 100644 (file)
@@ -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()
index 5806441a00e3134e94bfc749b45f5c7fbde271f6..a1979aaa601629bfe3d306f75938db9924d9e1b9 100644 (file)
@@ -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;
        }
index ce1751c475f51d783bd9435d9cbee7b3fe5caa6f..0e7f87f41bebc514584e7a84e99e1be4cf419aef 100644 (file)
@@ -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,
index 0a093930d63e40922a6af74ae17c90ab61982d4e..8b1a4fd4632fa5d27765b85238f801128c6d0519 100644 (file)
@@ -10,7 +10,6 @@
 #include <wlr/types/wlr_export_dmabuf_v1.h>
 #include <wlr/types/wlr_fractional_scale_v1.h>
 #include <wlr/types/wlr_gamma_control_v1.h>
-#include <wlr/types/wlr_input_inhibitor.h>
 #include <wlr/types/wlr_presentation_time.h>
 #include <wlr/types/wlr_primary_selection_v1.h>
 #include <wlr/types/wlr_screencopy_v1.h>
@@ -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);
 
index 33e301a6c32045852f8d838422511d3340e9c384..f6e78e26dff378d474f409c7f66e076a7d52bdb6 100644 (file)
@@ -1,6 +1,6 @@
 [wrap-git]
 url = https://gitlab.freedesktop.org/wlroots/wlroots.git
-revision = 3b4d7d2a926a0b65d3bad6649615c0b6a61c0336
+revision = 5dd614b9adc97bf1c89c8e2ebe8504841f8635ea
 
 [provide]
 dependency_names = wlroots