]> git.mdlowis.com Git - proto/labwc.git/commitdiff
desktop: refactor desktop_focus_topmost_mapped_view()
authorJohan Malm <jgm323@gmail.com>
Sat, 31 Oct 2020 14:32:31 +0000 (14:32 +0000)
committerJohan Malm <jgm323@gmail.com>
Sat, 31 Oct 2020 14:32:31 +0000 (14:32 +0000)
Rename from desktop_focus_next_mapped_view() to
desktop_focus_topmost_mapped_view() and only take struct server as
argument.

include/labwc.h
src/desktop.c
src/xdg.c
src/xwayland.c

index de0736c1b5482f08d7327404016ef83b62743920..559d5bb0cc24b3f66a8740556970b50c6aca7d7b 100644 (file)
@@ -232,7 +232,7 @@ void desktop_focus_view(struct seat *seat, struct view *view);
  * Note: If current==NULL, the list's second view is returned
  */
 struct view *desktop_next_view(struct server *server, struct view *current);
-void desktop_focus_next_mapped_view(struct view *current);
+void desktop_focus_topmost_mapped_view(struct server *server);
 struct view *desktop_view_at(struct server *server, double lx, double ly,
                             struct wlr_surface **surface, double *sx,
                             double *sy, int *view_area);
index d818accc29056b7c9ba576d8805f39d016702ad8..62e6fc185e11e8d7e13df37f5c0524cfb8d23eda 100644 (file)
@@ -156,26 +156,26 @@ has_mapped_view(struct wl_list *wl_list)
        return false;
 }
 
-struct view *
-desktop_next_mapped_view(struct view *current)
+static struct view *
+topmost_mapped_view(struct server *server)
 {
-       assert(current);
-       struct server *server = current->server;
        if (!has_mapped_view(&server->views)) {
                return NULL;
        }
-       struct view *view = first_view(server);
+
+       /* start from tail of server->views */
+       struct view *view = wl_container_of(server->views.prev, view, link);
        do {
                view = wl_container_of(view->link.next, view, link);
        } while (&view->link == &server->views || !view->mapped);
        return view;
 }
+
 void
-desktop_focus_next_mapped_view(struct view *current)
+desktop_focus_topmost_mapped_view(struct server *server)
 {
-       assert(current);
-       struct view *view = desktop_next_mapped_view(current);
-       desktop_focus_view(&current->server->seat, view);
+       struct view *view = topmost_mapped_view(server);
+       desktop_focus_view(&server->seat, view);
 }
 
 static bool
index c95c8055074273401596bc9fc353bb6f90282368..b887d0c23a664ca1566761308aad1e6e7df29aea 100644 (file)
--- a/src/xdg.c
+++ b/src/xdg.c
@@ -203,7 +203,7 @@ xdg_toplevel_view_unmap(struct view *view)
 {
        view->mapped = false;
        wl_list_remove(&view->commit.link);
-       desktop_focus_next_mapped_view(view);
+       desktop_focus_topmost_mapped_view(view->server);
 }
 
 static const struct view_impl xdg_toplevel_view_impl = {
index 174e6db60f6d75755fae74568b2b4006a9a901a6..809e9ce01f0b98dec94fef511faef46c32c7b5bc 100644 (file)
@@ -120,7 +120,7 @@ unmap(struct view *view)
 {
        view->mapped = false;
        wl_list_remove(&view->commit.link);
-       desktop_focus_next_mapped_view(view);
+       desktop_focus_topmost_mapped_view(view->server);
 }
 
 static const struct view_impl xwl_view_impl = {