]> git.mdlowis.com Git - proto/labwc.git/commitdiff
Revert "desktop: allow re-focus between "globally active" views of the same PID"
authorJohn Lindgren <john@jlindgren.net>
Wed, 14 Feb 2024 03:35:56 +0000 (22:35 -0500)
committerJohan Malm <johanmalm@users.noreply.github.com>
Tue, 5 Mar 2024 20:51:32 +0000 (20:51 +0000)
This is undesired when a focusable popup (e.g. applications menu) of an
unfocusable view (e.g. XWayland panel) is closed.

This reverts commit f6e3527767fffe81fa05073ae73893bb89a45d4f.

include/view.h
src/desktop.c
src/view.c

index b0cb84710313330257dbedfb6a475930ecf3503d..53534670172d0e5154fb59ddf610035d18afe58d 100644 (file)
@@ -351,14 +351,6 @@ void view_array_append(struct server *server, struct wl_array *views,
 
 enum view_wants_focus view_wants_focus(struct view *view);
 
-/**
- * view_is_focusable_from() - variant of view_is_focusable()
- * that takes into account the previously focused surface
- * @view: view to be checked
- * @prev_surface: previously focused surface
- */
-bool view_is_focusable_from(struct view *view, struct wlr_surface *prev);
-
 /**
  * view_edge_invert() - select the opposite of a provided edge
  *
@@ -380,10 +372,7 @@ enum view_edge view_edge_invert(enum view_edge edge);
  * The only views that are allowed to be focusd are those that have a surface
  * and have been mapped at some point since creation.
  */
-static inline bool
-view_is_focusable(struct view *view) {
-       return view_is_focusable_from(view, NULL);
-}
+bool view_is_focusable(struct view *view);
 
 void mappable_connect(struct mappable *mappable, struct wlr_surface *surface,
        wl_notify_func_t notify_map, wl_notify_func_t notify_unmap);
index 35d56b879d9474bce74f22dfc2efb97f6acc9af4..523f919c97bf9f76198920c68e7ae06aad2b5933 100644 (file)
@@ -214,8 +214,6 @@ desktop_cycle_view(struct server *server, struct view *start_view,
 struct view *
 desktop_topmost_focusable_view(struct server *server)
 {
-       struct wlr_surface *prev =
-               server->seat.seat->keyboard_state.focused_surface;
        struct view *view;
        struct wl_list *node_list;
        struct wlr_scene_node *node;
@@ -226,7 +224,7 @@ desktop_topmost_focusable_view(struct server *server)
                        continue;
                }
                view = node_view_from_node(node);
-               if (view->mapped && view_is_focusable_from(view, prev)) {
+               if (view->mapped && view_is_focusable(view)) {
                        return view;
                }
        }
index 52627643c236d72a58ddd19512574e7d4d4ce87a..a99ef91b2b13173816758c3bdcf4ae45dadf0980 100644 (file)
@@ -163,28 +163,16 @@ view_wants_focus(struct view *view)
 }
 
 bool
-view_is_focusable_from(struct view *view, struct wlr_surface *prev)
+view_is_focusable(struct view *view)
 {
        assert(view);
        if (!view->surface) {
                return false;
        }
-       if (!view->mapped && !view->minimized) {
+       if (view_wants_focus(view) != VIEW_WANTS_FOCUS_ALWAYS) {
                return false;
        }
-       enum view_wants_focus wants_focus = view_wants_focus(view);
-       /*
-        * Consider "offer focus" (Globally Active) views as focusable
-        * only if another surface from the same application already had
-        * focus. The goal is to allow focusing a parent window when a
-        * dialog/popup is closed, but still avoid focusing standalone
-        * panels/toolbars/notifications. Note that we are basically
-        * guessing whether Globally Active views want focus, and will
-        * probably be wrong some of the time.
-        */
-       return (wants_focus == VIEW_WANTS_FOCUS_ALWAYS
-               || (wants_focus == VIEW_WANTS_FOCUS_OFFER
-                       && prev && view_is_related(view, prev)));
+       return (view->mapped || view->minimized);
 }
 
 /**