]> git.mdlowis.com Git - proto/labwc.git/commitdiff
osd: refactor to not write server->osd_state outside osd.c
authortokyo4j <hrak1529@gmail.com>
Sun, 29 Dec 2024 16:05:17 +0000 (01:05 +0900)
committerHiroaki Yamamoto <hrak1529@gmail.com>
Mon, 30 Dec 2024 09:07:45 +0000 (18:07 +0900)
include/osd.h
src/action.c
src/input/keyboard.c
src/osd.c

index 2eefbf7159c295bdb2b086bdc083089201b5b65a..8b206953d6e8f5f4e5b936c9ada25fc5067cde9f 100644 (file)
@@ -36,6 +36,13 @@ struct window_switcher_field {
 struct buf;
 struct view;
 struct server;
+enum lab_cycle_dir;
+
+/* Begin window switcher */
+void osd_begin(struct server *server, enum lab_cycle_dir direction);
+
+/* Cycle the selected view in the window switcher */
+void osd_cycle(struct server *server, enum lab_cycle_dir direction);
 
 /* Updates onscreen display 'alt-tab' buffer */
 void osd_update(struct server *server);
index 121f4b0cb89e2108ca2991cefd99f971ce674ff2..c38b1f05233c8fd38212d6dce015da7104e2ca7a 100644 (file)
@@ -789,33 +789,6 @@ run_if_action(struct view *view, struct server *server, struct action *action)
        return !strcmp(branch, "then");
 }
 
-static bool
-shift_is_pressed(struct server *server)
-{
-       uint32_t modifiers = wlr_keyboard_get_modifiers(
-                       &server->seat.keyboard_group->keyboard);
-       return modifiers & WLR_MODIFIER_SHIFT;
-}
-
-static void
-start_window_cycling(struct server *server, enum lab_cycle_dir direction)
-{
-       if (server->input_mode != LAB_INPUT_STATE_PASSTHROUGH) {
-               return;
-       }
-
-       /* Remember direction so it can be followed by subsequent key presses */
-       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, direction);
-
-       seat_focus_override_begin(&server->seat,
-               LAB_INPUT_STATE_WINDOW_SWITCHER, LAB_CURSOR_DEFAULT);
-       osd_update(server);
-}
-
 static struct output *
 get_target_output(struct output *output, struct server *server,
        struct action *action)
@@ -982,10 +955,10 @@ actions_run(struct view *activator, struct server *server,
                        }
                        break;
                case ACTION_TYPE_NEXT_WINDOW:
-                       start_window_cycling(server, LAB_CYCLE_DIR_FORWARD);
+                       osd_begin(server, LAB_CYCLE_DIR_FORWARD);
                        break;
                case ACTION_TYPE_PREVIOUS_WINDOW:
-                       start_window_cycling(server, LAB_CYCLE_DIR_BACKWARD);
+                       osd_begin(server, LAB_CYCLE_DIR_BACKWARD);
                        break;
                case ACTION_TYPE_RECONFIGURE:
                        kill(getpid(), SIGHUP);
index 7460fec598f9ab1dd2bc382719cc86f2598c394f..6ab5fb91fe598d98f6da94a2000d868e6ba2a424 100644 (file)
@@ -497,10 +497,7 @@ handle_cycle_view_key(struct server *server, struct keyinfo *keyinfo)
 
        /* Only one direction modifier is allowed, either arrow keys OR shift */
 miss_shift_toggle:
-
-               server->osd_state.cycle_view = desktop_cycle_view(server,
-                       server->osd_state.cycle_view, direction);
-               osd_update(server);
+               osd_cycle(server, direction);
        }
 }
 
index 7eb3ad5a78070e3c95df2a9eb028b040c83c43b5..43f051bf09d2f897faf1ebb910ca485361b9270e 100644 (file)
--- a/src/osd.c
+++ b/src/osd.c
@@ -128,6 +128,43 @@ restore_preview_node(struct server *server)
        }
 }
 
+static bool
+shift_is_pressed(struct server *server)
+{
+       uint32_t modifiers = wlr_keyboard_get_modifiers(
+                       &server->seat.keyboard_group->keyboard);
+       return modifiers & WLR_MODIFIER_SHIFT;
+}
+
+void
+osd_begin(struct server *server, enum lab_cycle_dir direction)
+{
+       if (server->input_mode != LAB_INPUT_STATE_PASSTHROUGH) {
+               return;
+       }
+
+       /* Remember direction so it can be followed by subsequent key presses */
+       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, direction);
+
+       seat_focus_override_begin(&server->seat,
+               LAB_INPUT_STATE_WINDOW_SWITCHER, LAB_CURSOR_DEFAULT);
+       osd_update(server);
+}
+
+void
+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, direction);
+       osd_update(server);
+}
+
 void
 osd_finish(struct server *server)
 {