完善最小核心架构设计和数据结构简化
主要变更: - 数据结构简化 - 合并窗口元数据到 wm_window_t(删除 wm_window_meta.h) - 合并工作区名称到 wm_workspace_t(删除 wm_workspace_desc.h) - 简化布局标识符,只保留 name 字段 - 删除 window_map,采用直接索引+线性查找 - 架构设计完善 - 确定 window→workspace→output 固定归属关系 - 制定 ID 分配策略(半静态实体直接索引,动态实体线性查找) - 确定显示器热插拔策略(检测到变化时重启 WM) - 添加工作区配置示例和多种配置方式 - 新增模块 - wm_policy_config.h:策略配置开关 - wm_service.h:核心外服务注册和事件订阅 - WM_EVENT_ROUTING.org:事件路由详细文档 - WORKSPACE_CONFIG_EXAMPLES.org:工作区配置示例 - MINIMAL_CORE_WITH_EXTENSIONS.org:设计对比文档 - config_system.org:配置系统设计 - 文档完善 - 大幅扩展 README.org,补充 ID 分配、热插拔、配置集成等说明 - 更新 WM_COMMAND_RULES.org,补充命令规则细节 - 更新 WM_POLICY_APPLY_COMMAND_SKELETON.org,完善实现骨架
This commit is contained in:
@@ -3,9 +3,62 @@
|
||||
#include "wm_backend.h"
|
||||
#include "wm_layout.h"
|
||||
#include "wm_plan.h"
|
||||
#include "wm_policy_config.h"
|
||||
#include "wm_policy.h"
|
||||
#include "wm_service.h"
|
||||
#include "wm_state.h"
|
||||
|
||||
typedef enum wm_interaction_mode_t {
|
||||
WM_INTERACTION_NONE,
|
||||
WM_INTERACTION_MOVE_FLOATING,
|
||||
WM_INTERACTION_RESIZE_FLOATING,
|
||||
} wm_interaction_mode_t;
|
||||
|
||||
typedef struct wm_interaction_state_t {
|
||||
wm_interaction_mode_t mode;
|
||||
wm_window_id_t window_id;
|
||||
wm_output_id_t origin_output_id;
|
||||
wm_point_t pointer_origin;
|
||||
wm_rect_t window_origin_rect;
|
||||
} wm_interaction_state_t;
|
||||
|
||||
typedef struct wm_runtime_bootstrap_t {
|
||||
/*
|
||||
* 输出配置(启动时扫描显示器后填充)
|
||||
*/
|
||||
const wm_output_t *outputs;
|
||||
size_t output_count;
|
||||
|
||||
/*
|
||||
* 工作区配置(已绑定 output)
|
||||
* workspace.output_id 指向 outputs 中的某个输出
|
||||
*/
|
||||
const wm_workspace_t *workspaces;
|
||||
size_t workspace_count;
|
||||
|
||||
/*
|
||||
* 布局算法注册
|
||||
*/
|
||||
struct {
|
||||
wm_layout_fn fn;
|
||||
const char *name;
|
||||
} *layouts;
|
||||
size_t layout_count;
|
||||
|
||||
/*
|
||||
* 策略配置
|
||||
*/
|
||||
wm_policy_config_t policy;
|
||||
|
||||
/*
|
||||
* Existing windows discovered during startup should be translated into these
|
||||
* commands instead of being injected into wm_state_t directly.
|
||||
*/
|
||||
const wm_command_t *initial_commands;
|
||||
size_t initial_command_count;
|
||||
} wm_runtime_bootstrap_t;
|
||||
|
||||
// 运行时上下文(实现时采用不透明结构体,此定义仅作参考)
|
||||
typedef struct wm_runtime_t {
|
||||
bool running;
|
||||
|
||||
@@ -13,13 +66,20 @@ typedef struct wm_runtime_t {
|
||||
wm_plan_t plan;
|
||||
wm_command_buffer_t command_buffer;
|
||||
wm_layout_registry_t layouts;
|
||||
wm_policy_config_t policy;
|
||||
wm_interaction_state_t interaction;
|
||||
wm_backend_t backend;
|
||||
wm_service_registry_t services;
|
||||
} wm_runtime_t;
|
||||
|
||||
bool wm_runtime_init(wm_runtime_t *runtime, wm_backend_t backend);
|
||||
bool wm_runtime_init(wm_runtime_t *runtime, wm_backend_t backend,
|
||||
const wm_runtime_bootstrap_t *bootstrap);
|
||||
bool wm_runtime_register_service(wm_runtime_t *runtime, wm_service_t service);
|
||||
|
||||
/*
|
||||
* 处理单个事件,方便做无平台依赖的单元测试。
|
||||
* 元数据事件允许 runtime 直接更新 auxiliary store;控制状态变更仍经由
|
||||
* route_event() + apply_command()。
|
||||
*/
|
||||
bool wm_runtime_process_event(wm_runtime_t *runtime, const wm_event_t *event);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user