From af4a45a342406f79d60604a5175dd4b3cef7f662 Mon Sep 17 00:00:00 2001 From: Zedhugh Chen Date: Wed, 22 Apr 2026 19:16:35 +0800 Subject: [PATCH] =?UTF-8?q?refactor(core/policy):=20=E5=B0=86=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E8=BF=94=E5=9B=9E=E7=B1=BB=E5=9E=8B=E4=BB=8E=20bool?= =?UTF-8?q?=20=E8=B0=83=E6=95=B4=E4=B8=BA=20void?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit policy_route_event/policy_apply_command 两个函数的 out 参数中已经能包 含返回值所代表的意义了,因此直接将这两个函数的返回类型改为 void --- src/core/policy.c | 36 ++++++++++++------------------------ src/core/policy.h | 10 ++-------- src/core/state.c | 4 +++- src/core/state.h | 11 +++++++---- 4 files changed, 24 insertions(+), 37 deletions(-) diff --git a/src/core/policy.c b/src/core/policy.c index 17143dd..e0db128 100644 --- a/src/core/policy.c +++ b/src/core/policy.c @@ -18,13 +18,13 @@ static workspace_id_t derive_window_workspace(const state_t *state) { return state->outputs[state->current_output_index].current_workspace_id; } -static bool route_map_request( +static void route_map_request( const state_t *state, const rules_t *rules, const window_map_request_event_t *e, command_buffer_t *out ) { - if (state_window_get(state, e->window)) return false; + if (state_window_get(state, e->window)) return; window_layer_type_t layer_type = window_classify_layer(&e->props); if (e->transient_for != ZDWM_WINDOW_ID_INVALID) { @@ -91,11 +91,9 @@ static bool route_map_request( command_buffer_push(out, &switch_workspace_cmd); } } - - return true; } -bool policy_route_event( +void policy_route_event( const policy_context_t *ctx, const event_t *event, command_buffer_t *out @@ -104,14 +102,14 @@ bool policy_route_event( switch (event->type) { case ZDWM_EVENT_WINDOW_MAP_REQUEST: { auto rules = ctx->rules; - return route_map_request(state, rules, &event->as.window_map_request, out); + route_map_request(state, rules, &event->as.window_map_request, out); + break; } default: - return false; } } -static bool manage_window( +static void manage_window( const policy_context_t *ctx, const manage_window_command_t *command, plan_t *plan @@ -122,7 +120,7 @@ static bool manage_window( state_window_set_workspace(state, window_id, command->workspace); state_window_set_floating(state, window_id, command->floating); - if (!state_workspace_show(state, command->workspace)) return false; + if (!state_workspace_show(state, command->workspace)) return; effect_t map_effect = { .type = ZDWM_EFFECT_MAP_WINDOW, @@ -133,11 +131,9 @@ static bool manage_window( if (window_need_layout(window)) { plan->need_relayout = true; } - - return true; } -static bool switch_workspace( +static void switch_workspace( state_t *state, const switch_workspace_command_t *command, plan_t *plan @@ -154,32 +150,24 @@ static bool switch_workspace( } /* TODO: 后续考虑加上 ewmh 相关副作用 */ - - return false; } -bool policy_apply_command( +void policy_apply_command( const policy_context_t *ctx, const command_buffer_t *command_buffer, plan_t *plan ) { - bool has_effect = false; - auto state = ctx->state; + auto state = ctx->state; for (size_t i = 0; i < command_buffer->count; ++i) { auto cmd = &command_buffer->items[i]; switch (cmd->type) { case ZDWM_COMMAND_MANAGE_WINDOW: - if (manage_window(ctx, &cmd->as.manage_window, plan)) { - has_effect = true; - } + manage_window(ctx, &cmd->as.manage_window, plan); break; case ZDWM_COMMAND_SWITCH_WORKSPACE: - if (switch_workspace(state, &cmd->as.switch_workspace, plan)) { - has_effect = true; - } + switch_workspace(state, &cmd->as.switch_workspace, plan); break; default: } } - return has_effect; } diff --git a/src/core/policy.h b/src/core/policy.h index a4fae65..f2d0395 100644 --- a/src/core/policy.h +++ b/src/core/policy.h @@ -17,11 +17,8 @@ typedef struct policy_context_t { * @param ctx 策略上下文 * @param event 需要翻译的事件 * @param out 命令输出缓冲区,路由产生的命令追加到此处 - * - * @return true 产生了至少一条需要执行的命令 - * @return false 产生了至少一条需要执行的命令 */ -bool policy_route_event( +void policy_route_event( const policy_context_t *ctx, const event_t *event, command_buffer_t *out @@ -33,11 +30,8 @@ bool policy_route_event( * @param ctx 策略上下文 * @param command_buffer 待应用的命令序列 * @param plan 副作用累积器,记录后端需要执行的操作 - * - * @return true 产生了至少一项后端副作用 - * @return false 无副作用产生 */ -bool policy_apply_command( +void policy_apply_command( const policy_context_t *ctx, const command_buffer_t *command_buffer, plan_t *plan diff --git a/src/core/state.c b/src/core/state.c index f417148..769b884 100644 --- a/src/core/state.c +++ b/src/core/state.c @@ -265,7 +265,8 @@ void state_output_set_workarea( bool state_output_set_current_workspace( state_t *state, output_id_t output_id, - workspace_id_t workspace_id + workspace_id_t workspace_id, + workspace_id_t *old_workspace_id ) { output_t *output = (output_t *)state_output_get(state, output_id); if (!output) return false; @@ -274,6 +275,7 @@ bool state_output_set_current_workspace( if (output->current_workspace_id == workspace_id) return false; + if (old_workspace_id) *old_workspace_id = output->current_workspace_id; output->current_workspace_id = workspace_id; return true; } diff --git a/src/core/state.h b/src/core/state.h index 339a1d7..ff8d13b 100644 --- a/src/core/state.h +++ b/src/core/state.h @@ -123,16 +123,19 @@ void state_output_set_workarea( /** * @brief 设置 output 的当前 workspace * - * @param state 状态实例指针 - * @param output_id 需要切换的当前 workspace 的 output 的 id - * @param workspace_id 目标 workspace 的 id + * @param state 状态实例指针 + * @param output_id 需要切换的当前 workspace 的 output 的 id + * @param workspace_id 目标 workspace 的 id + * @param old_workspace_id 用于输出变更之前 output 显示的 workspace , + * 如果不关心,可以传 nullptr * * @return 若 workspace 需要切换返回 true ,否则返回 false */ bool state_output_set_current_workspace( state_t *state, output_id_t output_id, - workspace_id_t workspace_id + workspace_id_t workspace_id, + workspace_id_t *old_workspace_id ); size_t state_output_count(const state_t *state); bool state_output_valid(const state_t *state, output_id_t id);