- 删除 src/core/action.c|h,将 spawn 移至 src/base/process - policy_resolve_action 实现完整的 action 分发逻辑 - binding_table_cycle_mode 改为纯计算,返回模式 ID 而非修改状态 - 从 state 移除 state_workspace_cycle_layout / state_cycle_current_output - 新增 ZDWM_COMMAND_QUIT 命令,通过 plan 标志驱动 runtime 退出 - set_binding_mode 现在生成 BIND_KEY effect 以同步后端按键绑定 - 扩展 action 数据类型支持 window_send_to_workspace 和 window_cycle_output
104 lines
2.9 KiB
C
104 lines
2.9 KiB
C
#pragma once
|
|
|
|
#include "core/types.h"
|
|
#include "core/wm_desc.h"
|
|
|
|
typedef enum command_type_t {
|
|
ZDWM_COMMAND_MANAGE_WINDOW,
|
|
ZDWM_COMMAND_UNMANAGE_WINDOW,
|
|
ZDWM_COMMAND_FOCUS_WINDOW,
|
|
ZDWM_COMMAND_KILL_WINDOW,
|
|
ZDWM_COMMAND_RAISE_WINDOW,
|
|
ZDWM_COMMAND_WITHDRAW_WINDOW,
|
|
ZDWM_COMMAND_CONFIGURE_WINDOW,
|
|
ZDWM_COMMAND_CHANGE_WINDOW_STATE,
|
|
ZDWM_COMMAND_WINDOW_SEND_TO_WORKSPACE,
|
|
ZDWM_COMMAND_WINDOW_SET_FLOATING,
|
|
ZDWM_COMMAND_WINDOW_SET_STICKY,
|
|
ZDWM_COMMAND_WINDOW_SET_MINIMIZED,
|
|
ZDWM_COMMAND_WINDOW_SET_MAXIMIZED,
|
|
ZDWM_COMMAND_WINDOW_SET_FULLSCREEN,
|
|
ZDWM_COMMAND_SWITCH_WORKSPACE,
|
|
ZDWM_COMMAND_SET_CURRENT_OUTPUT,
|
|
ZDWM_COMMAND_SET_LAYOUT,
|
|
ZDWM_COMMAND_SET_BINDING_MODE,
|
|
ZDWM_COMMAND_QUIT,
|
|
} command_type_t;
|
|
|
|
typedef struct manage_window_command_t {
|
|
workspace_id_t workspace;
|
|
bool floating;
|
|
window_info_t info;
|
|
} manage_window_command_t;
|
|
|
|
typedef struct switch_workspace_command_t {
|
|
workspace_id_t workspace;
|
|
} switch_workspace_command_t;
|
|
|
|
typedef struct window_state_change_command_t {
|
|
window_id_t window;
|
|
window_state_request_type_t type;
|
|
window_state_request_action_t action;
|
|
} window_state_change_command_t;
|
|
|
|
typedef struct window_send_to_workspace_command_t {
|
|
window_id_t window;
|
|
workspace_id_t workspace;
|
|
} window_send_to_workspace_command_t;
|
|
|
|
typedef struct window_bool_state_t {
|
|
window_id_t window;
|
|
bool state;
|
|
} window_bool_state_t;
|
|
|
|
typedef struct set_current_output_command_t {
|
|
output_id_t output;
|
|
} set_current_output_command_t;
|
|
|
|
typedef struct set_layout_command_t {
|
|
workspace_id_t workspace;
|
|
layout_id_t layout;
|
|
} set_layout_command_t;
|
|
|
|
typedef struct set_binding_mode_command_t {
|
|
zdwm_binding_mode_id_t mode;
|
|
} set_binding_mode_command_t;
|
|
|
|
typedef struct quit_command_t {
|
|
bool will_restart;
|
|
} quit_command_t;
|
|
|
|
/**
|
|
* @brief 非 owning 的命令值对象
|
|
* @details
|
|
* command_t 自身不拥有任何堆内存;其当前所有 payload 中出现的指针字段均为借用
|
|
* 语义。
|
|
*
|
|
* 因此 command_t 支持按值浅拷贝,且不需要单独的 cleanup 接口。若接收方需要在
|
|
* 源数据生命周期之外继续持有相关内容,必须自行复制。
|
|
*/
|
|
typedef struct command_t {
|
|
command_type_t type;
|
|
union {
|
|
manage_window_command_t manage_window;
|
|
only_window_data_t unmanage;
|
|
only_window_data_t focus;
|
|
only_window_data_t kill;
|
|
only_window_data_t raise;
|
|
only_window_data_t withdraw;
|
|
configure_data_t configure;
|
|
window_state_change_command_t state_change;
|
|
window_send_to_workspace_command_t send_to_workspace;
|
|
window_bool_state_t floating;
|
|
window_bool_state_t sticky;
|
|
window_bool_state_t minimized;
|
|
window_bool_state_t maximized;
|
|
window_bool_state_t fullscreen;
|
|
switch_workspace_command_t switch_workspace;
|
|
set_current_output_command_t current_output;
|
|
set_layout_command_t layout;
|
|
set_binding_mode_command_t binding_mode;
|
|
quit_command_t quit;
|
|
} as;
|
|
} command_t;
|