From a98b535362ed4c903d1ae320e54aa40fa6b9c0ad Mon Sep 17 00:00:00 2001 From: tokyo4j Date: Mon, 30 Dec 2024 04:57:39 +0900 Subject: [PATCH] osd: make desktop_cycle_view() private in osd.c --- include/labwc.h | 8 -------- src/desktop.c | 28 ---------------------------- src/osd.c | 38 +++++++++++++++++++++++++++++++++++--- 3 files changed, 35 insertions(+), 39 deletions(-) diff --git a/include/labwc.h b/include/labwc.h index 06729f83..91aba8c1 100644 --- a/include/labwc.h +++ b/include/labwc.h @@ -481,14 +481,6 @@ struct view *desktop_topmost_focusable_view(struct server *server); */ void desktop_update_top_layer_visiblity(struct server *server); -/** - * desktop_cycle_view - return view to 'cycle' to - * @start_view: reference point for finding next view to cycle to - * Note: If !start_view, the second focusable view is returned - */ -struct view *desktop_cycle_view(struct server *server, struct view *start_view, - enum lab_cycle_dir dir); - /** * desktop_focus_topmost_view() - focus the topmost view on the current * workspace, skipping views that claim not to want focus (those can diff --git a/src/desktop.c b/src/desktop.c index 5f7958b9..63ab7bd5 100644 --- a/src/desktop.c +++ b/src/desktop.c @@ -108,34 +108,6 @@ desktop_focus_view_or_surface(struct seat *seat, struct view *view, } } -struct view * -desktop_cycle_view(struct server *server, struct view *start_view, - enum lab_cycle_dir dir) -{ - struct view *(*iter)(struct wl_list *head, struct view *view, - enum lab_view_criteria criteria); - bool forwards = dir == LAB_CYCLE_DIR_FORWARD; - iter = forwards ? view_next_no_head_stop : view_prev_no_head_stop; - - enum lab_view_criteria criteria = rc.window_switcher.criteria; - - /* - * Views are listed in stacking order, topmost first. Usually the - * topmost view is already focused, so when iterating in the forward - * direction we pre-select the view second from the top: - * - * View #1 (on top, currently focused) - * View #2 (pre-selected) - * View #3 - * ... - */ - if (!start_view && forwards) { - start_view = iter(&server->views, NULL, criteria); - } - - return iter(&server->views, start_view, criteria); -} - struct view * desktop_topmost_focusable_view(struct server *server) { diff --git a/src/osd.c b/src/osd.c index 43f051bf..f5863b61 100644 --- a/src/osd.c +++ b/src/osd.c @@ -54,6 +54,38 @@ osd_update_preview_outlines(struct view *view) wlr_scene_node_set_position(&rect->tree->node, geo.x, geo.y); } +/* + * Returns the view to select next in the window switcher. + * If !start_view, the second focusable view is returned. + */ +static struct view * +get_next_cycle_view(struct server *server, struct view *start_view, + enum lab_cycle_dir dir) +{ + struct view *(*iter)(struct wl_list *head, struct view *view, + enum lab_view_criteria criteria); + bool forwards = dir == LAB_CYCLE_DIR_FORWARD; + iter = forwards ? view_next_no_head_stop : view_prev_no_head_stop; + + enum lab_view_criteria criteria = rc.window_switcher.criteria; + + /* + * Views are listed in stacking order, topmost first. Usually the + * topmost view is already focused, so when iterating in the forward + * direction we pre-select the view second from the top: + * + * View #1 (on top, currently focused) + * View #2 (pre-selected) + * View #3 + * ... + */ + if (!start_view && forwards) { + start_view = iter(&server->views, NULL, criteria); + } + + return iter(&server->views, start_view, criteria); +} + void osd_on_view_destroy(struct view *view) { @@ -72,7 +104,7 @@ osd_on_view_destroy(struct view *view) */ /* Also resets preview node */ - osd_state->cycle_view = desktop_cycle_view(view->server, + osd_state->cycle_view = get_next_cycle_view(view->server, osd_state->cycle_view, LAB_CYCLE_DIR_BACKWARD); /* @@ -147,7 +179,7 @@ osd_begin(struct server *server, enum lab_cycle_dir direction) server->osd_state.initial_direction = direction; server->osd_state.initial_keybind_contained_shift = shift_is_pressed(server); - server->osd_state.cycle_view = desktop_cycle_view(server, + server->osd_state.cycle_view = get_next_cycle_view(server, server->osd_state.cycle_view, direction); seat_focus_override_begin(&server->seat, @@ -160,7 +192,7 @@ osd_cycle(struct server *server, enum lab_cycle_dir direction) { assert(server->input_mode == LAB_INPUT_STATE_WINDOW_SWITCHER); - server->osd_state.cycle_view = desktop_cycle_view(server, + server->osd_state.cycle_view = get_next_cycle_view(server, server->osd_state.cycle_view, direction); osd_update(server); }