Commit Graph
100 Commits
Author SHA1 Message Date
zedhugh f3b8be8cf1 feat(backend/X11): 实现按键抓取功能 2026-04-26 19:03:18 +08:00
zedhugh 56f211480f feat(core/binding): 实现 parse_key_sequence 函数解析按键序列 2026-04-25 07:53:57 +08:00
zedhugh 7a86eb469b feat: 添加按键绑定功能 2026-04-25 05:36:50 +08:00
zedhugh a749fc3c6c feat(core/policy): 添加 unmanage/focus/kill 命令处理 2026-04-23 04:49:43 +08:00
zedhugh fc68e75f82 refactor(backend/X11): 重构 effect 应用为延迟批量模式并添加 KILL_WINDOW 支持
- 添加 ZDWM_EFFECT_KILL_WINDOW 副作用和 WM_DELETE_WINDOW 协议支持
- 将 backend_apply_effect 从即时调用 X11 拆分为 merge + batch apply 两阶段:
  - 先收集 effect 到后端持有的列表
  - 再按 unmap(grab server) → map → kill → configure → focus 顺序统一提交
2026-04-23 04:37:34 +08:00
zedhugh 28ebb086b1 refactor(core/state): 调整 state_window_remove 接口实现
在 state_window_remove 中用 array_erase 替代手写移位,并在删除窗口后将
其 transient 子窗口的 transient_for 重置为 INVALID,避免悬空引用
2026-04-23 04:12:59 +08:00
zedhugh 1e3a571619 refactor(backend/X11): 合并批量 effect 中的 focus 操作
一批 effect 中可能包含多个 FOCUS_WINDOW,但最终只有一个窗口能获得焦点,
延迟到循环结束后只执行最后一次 focus 调用
2026-04-22 19:50:26 +08:00
zedhugh d4c03fcfbd feat(core/policy): 完善 manage_window 和 switch_workspace 命令处理 2026-04-22 19:40:09 +08:00
zedhugh 663db3412f feat(backend/X11): 添加从 _NET_WM_STATE 中获取 urgent 属性的功能 2026-04-22 19:37:01 +08:00
zedhugh af4a45a342 refactor(core/policy): 将接口返回类型从 bool 调整为 void
policy_route_event/policy_apply_command 两个函数的 out 参数中已经能包
含返回值所代表的意义了,因此直接将这两个函数的返回类型改为 void
2026-04-22 19:36:50 +08:00
zedhugh 413e68f572 refactor(core/plan): 使用 need_relayout 简化 dirty_flags 2026-04-22 19:09:21 +08:00
zedhugh 3121b49d1b fix(core/window): 添加设置窗口 floating 状态的限制条件
- 不能取消 fixed_size 和 sticky 状态窗口的 floating 状态
- 简化 window_need_layout 中浮动窗口不参加自动布局判断逻辑
2026-04-22 17:44:51 +08:00
zedhugh fd843dc826 refactor(core): 提取 window 相关类型和操作到独立模块 2026-04-20 00:20:04 +08:00
zedhugh a7225836e4 feat(core/policy): 实现 policy_apply_command 命令分发功能 2026-04-19 23:38:43 +08:00
zedhugh 92dcec0e79 feat(backend/X11): 添加 _NET_SUPPORTING_WM_CHECK 兼容窗口 2026-04-19 05:39:31 +08:00
zedhugh 22cd362724 feat(backend/X11): 实现 backend_apply_effect 接口以提交 X11 副作用 2026-04-19 04:49:02 +08:00
zedhugh c6a67b52a2 docs(core/policy): 为函数 policy_apply_command 添加注释 2026-04-18 22:33:31 +08:00
zedhugh 9cb808c272 feat(core/plan): 扩展 effect 类型 2026-04-18 22:31:20 +08:00
zedhugh 38d2a28438 refactor(core/policy): 从 policy_context_t 中提取 event 为独立参数
policy_context_t 应该只包含所有 policy 相关接口都需要用到的参数,而
event 只是 policy_route_event 接口需要的参数,故应该将其从
policy_context_t 中剔除
2026-04-18 22:24:03 +08:00
zedhugh 998b22a288 config/runtime_config: remove goto in runtime_config_load function 2026-04-18 17:38:27 +08:00
zedhugh 2fc4b33359 style: 更新 .clang-format 规则并重新格式化所有源文件
- 重构模块使用新的代码风格
- 老代码 (src 目录下的代码) 继续使用之前的代码风格

通过在需要不同代码风格的目录下放对应 .clang-format 配置文件实现
2026-04-14 01:52:53 +08:00
zedhugh 7b5404e8e0 refactor(backend/x11): 用 X-macro 统一 atom 列表的声明和初始化 2026-04-14 01:35:25 +08:00
zedhugh 6561b16be0 feat(core): 引入 plan/effect 执行骨架
新增 plan/effect 数据结构与基础操作
在 runtime 中接入 event -> command_buffer -> plan -> backend 流程
补齐 policy/backend 接口并同步更新测试构建
2026-04-13 05:56:31 +08:00
zedhugh 20e5e57c8c refactor(core/layout): 清理 layout_registry_t 时改用 for 循环统一代码风格 2026-04-13 05:48:14 +08:00
zedhugh 0c86f9aad8 docs: backend_next_event 接口添加注释 2026-04-13 05:37:31 +08:00
zedhugh 0c24fb2a32 feat(core/event): 添加 event 资源清理和重置接口 2026-04-13 05:35:13 +08:00
zedhugh 637f658318 feat(core/policy): map_request 事件命令转换 2026-04-13 05:35:13 +08:00
zedhugh 5230b8b718 feat(core): 添加 command 定义及 command_buffer 维护功能 2026-04-13 05:34:53 +08:00
zedhugh ead8160a61 feat(core/rules): 添加规则匹配和解析功能 2026-04-13 03:02:58 +08:00
zedhugh 9dd3ae00d2 fix(core/rules): 修复 rules_move 接口参数顺序与实现不一致问题 2026-04-13 03:01:50 +08:00
zedhugh 71eba04de1 fix(config): 修复 rule_action 合法性校验 bug 2026-04-13 03:01:00 +08:00
zedhugh b55d0c6b91 core: 添加窗口规则 (rules) 数据结构和配置接口 2026-04-12 02:11:57 +08:00
zedhugh 823d8c1b65 docs: 格式化多个文档中的表格列宽对齐 2026-04-11 06:11:38 +08:00
zedhugh 11601c75bd backend: X11 后端函数 detect_monitor_by_randr 中使用 p_strndup 替代 strndu 2026-04-11 06:00:08 +08:00
zedhugh 8a72e671bc core: 重命名 event_t 联合体成员 data 为 as 2026-04-11 05:59:44 +08:00
zedhugh d73d5b0b1f core: 添加 output 索引循环切换接口 2026-04-11 05:56:49 +08:00
zedhugh 3a6525087d core: 调整 window 状态修改接口实现方式 2026-04-11 02:30:54 +08:00
zedhugh 0c7fdf08df backend: X11 后端 window 信息查询接口使用原始封装代替语义化封装
- 拆分 window_get_skip_taskbar / window_get_urgency /
  window_get_states / window_get_geometry_mode 为更底层的
  window_get_atom_array / window_get_wm_hints / atom_to_window_state
- window_get_fixed_size 改为输出参数风格
- 扁平化 window_map_request_event_t,内联原 window_props_t 和
  window_geometry_t 的字段
- window_props_t → window_layer_props_t,仅保留 layer 分类所需的
  types/states
2026-04-09 05:08:39 +08:00
zedhugh 3884d3fc50 backend: X11 后端添加窗口几何信息查询并修正错误语义
- 添加 window_get_geometry/window_get_fixed_size/window_get_geometry_mode
- window_get_atom_array 改为 bool 返回,区分 XCB 调用错误和空数据
- window_get_types/window_get_states 属性为空时返回 true 而非 false
- handle_map_request 重排操作顺序:错误检查提前,失败路径无内存泄漏
- 补充 _NET_WM_STATE_MAXIMIZED_VERT/HORZ atom 注册
2026-04-09 02:23:06 +08:00
zedhugh 0edb6ad6aa backend: X11 后端添加窗口属性和状态查询接口 2026-04-08 19:32:53 +08:00
zedhugh 0f8c35ae6c core: 添加转移 window metadata 数据的接口 2026-04-07 05:47:47 +08:00
zedhugh 5353e4c677 窗口 metadata 添加 role 字段 2026-04-07 05:33:33 +08:00
zedhugh 9728fad871 backend: X11 后端添加获取窗口 metadata 信息方式 2026-04-07 03:16:51 +08:00
zedhugh ab961d6d79 tests: CMakeLists.txt 添加分层堆叠维护源文件 2026-04-06 16:42:25 +08:00
zedhugh a89613d37d fix: 更改 window 相关接口注释使其与最新的窗口堆叠方案适配 2026-04-05 23:25:25 +08:00
zedhugh 1d781d66e9 迁移窗口堆叠顺序到新方案(完成) 2026-04-05 23:18:59 +08:00
zedhugh 367d825a58 WIP: 迁移窗口堆叠顺序到新方案 2026-04-01 16:09:29 +08:00
zedhugh 196dab9bb3 事件循环框架 2026-04-01 16:08:01 +08:00
zedhugh 90a25fb120 core: 添加窗口所属层级判定 2026-03-31 18:02:38 +08:00
zedhugh 4d8092be43 core: 实现窗口分层栈维护函数 2026-03-25 22:50:04 +08:00
zedhugh dee0a19f34 core: 窗口分层类型与接口草案 2026-03-24 23:40:46 +08:00
zedhugh e6b4486f89 base: 将通用动态数组操作接入 layout/state/config 2026-03-24 20:09:55 +08:00
zedhugh e7a519be6a base: 添加动态数组管理辅助函数 2026-03-24 17:06:44 +08:00
zedhugh eb376e51b7 core: runtime 接管用户配置模块句柄 2026-03-24 02:42:23 +08:00
zedhugh 3e09dec613 config: 添加用户配置加载流程和默认配置 2026-03-24 02:40:57 +08:00
zedhugh 67f0c169f5 utils 按作用拆成 log/macros/memory 三个模块 2026-03-23 19:05:39 +08:00
zedhugh fa93b3d733 添加 clang-tidy 配置 2026-03-23 16:00:20 +08:00
zedhugh a4dcb1eb8b 添加 git 提交前自动格式化配置 2026-03-23 15:59:51 +08:00
zedhugh 32679b354a config: 加载用户配置动态链接库 2026-03-23 14:51:26 +08:00
zedhugh fb3bb10eab 调整用户自定义配置接口声明 2026-03-23 14:46:18 +08:00
zedhugh 34017fb5da 调整数据类型和接口函数命名规范 2026-03-23 12:42:19 +08:00
zedhugh 38572bd5f7 utils: 添加 p_strdup_nullable 辅助函数 2026-03-23 10:08:49 +08:00
zedhugh 577c5bc3b2 定义公共用户自定义配置需要用到的接口和数据结构 2026-03-23 10:08:44 +08:00
zedhugh 6c77d9f151 core: layout 模块添加 wm_layout_registry_move 函数 2026-03-23 01:18:41 +08:00
zedhugh ac22a2b529 feat: 添加屏幕去重功能并调整测试用例目录结构 2026-03-22 04:18:59 +08:00
zedhugh ad22b0fe93 core: 添加 pointer enter 事件 2026-03-22 02:12:31 +08:00
zedhugh f573575ed6 Merge branch 'main' into arch_refactor 2026-03-22 01:47:20 +08:00
zedhugh 86a89452a7 fix: 修复 raise_or_run 可能聚焦窗口不对 bug 2026-03-22 01:44:15 +08:00
zedhugh 5d89caff0a 调整 X11 backend 目录结构 2026-03-21 03:01:27 +08:00
zedhugh 931dc3d8d5 core: 定义核心事件数据模型并更新其文档 2026-03-21 02:51:43 +08:00
zedhugh 4c96f2a1db core: 定义按键和鼠标事件 2026-03-16 00:03:22 +08:00
zedhugh 58d1b09203 test: 接入 CTest 并添加基础 runtime 测试 2026-03-14 13:55:09 +08:00
zedhugh 6ec4d8422f core: 添加 X11 后端初始化与屏幕信息探测 2026-03-14 13:53:12 +08:00
zedhugh 57c0250c44 fix: 修复 warn 宏调错内部函数 2026-03-14 13:43:27 +08:00
zedhugh 59a6177770 core: 补全 state 容器初始化与实体访问接口 2026-03-14 04:02:00 +08:00
zedhugh 6335013172 core: 抽离状态描述结构并补全 state 容器接口 2026-03-13 04:26:30 +08:00
zedhugh cfbc66cf49 core: 补全 layout 注册表与结果集接口
- 新增 src/core/layout.c,实现 layout result 和 registry 的基础操作
- 精简 wm_layout_ctx_t,改为按顺序传递参与布局的窗口 id 列表
- 为 layout API 补充中文前置条件说明
- 在 utils 中补充 p_strdup 和容量扩展辅助函数
2026-03-13 02:23:58 +08:00
zedhugh 57c6a831d4 docs: 明确 sticky 窗口规则并修正 core 头文件注释 2026-03-12 06:56:56 +08:00
zedhugh 499030bd04 core: 明确布局函数返回语义与 floating 布局约定 2026-03-12 05:46:28 +08:00
zedhugh 1bee0de9f9 Merge branch 'main' into arch_refactor 2026-03-11 18:14:51 +08:00
zedhugh 123fe77bbb refactor: 移除 focus_in 事件处理
- 移除独立的 focus_in 事件处理器
- 在 enter_notify 中直接调用 wm_set_current_monitor
2026-03-11 06:46:19 +08:00
zedhugh 1ec92ec3e2 feat: 添加 _NET_WM_STATE_SKIP_TASKBAR 支持
- 新增 skip_taskbar 字段到 client_t
- 在 client_update_window_type 中检测并设置 skip_taskbar 状态
- 状态栏绘制时过滤 skip_taskbar 窗口
2026-03-11 06:45:37 +08:00
zedhugh 7de9cd500b feat: 为 workspace 添加可用布局列表功能
- wm_workspace_t 新增 available_layouts 和 layout_count 字段
- 新增 WM_COMMAND_CYCLE_LAYOUT 命令支持循环切换布局
- 添加 workspace 布局列表操作 API
- 完善命令规则和实现骨架
- 新增布局列表配置示例和文档
2026-03-11 05:54:52 +08:00
zedhugh 329943ab3e 完善最小核心架构设计和数据结构简化
主要变更:

- 数据结构简化
  - 合并窗口元数据到 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,完善实现骨架
2026-03-11 05:28:39 +08:00
zedhugh f106857cd8 新的架构设计文档和核心系统数据结构及接口声明 2026-03-10 08:10:17 +08:00
zedhugh cdcafa1216 feat(tray): 增加独立系统托盘模块并补齐兼容性与所有权处理 2026-03-10 07:50:29 +08:00
zedhugh d8cd91ea48 feat: 状态栏配置接入配置系统 2026-03-09 00:49:09 +08:00
zedhugh 35f0ea9680 feat: 添加壁纸功能 2026-03-08 15:23:09 +08:00
zedhugh 4ccdc9c23d fix: 提高 xcursor_set_pointer_position 操作响应速度 2026-03-08 04:09:07 +08:00
zedhugh ac4cfc1ed3 feat: 添加 focus_next_monitor 操作用于切换当前 monitor 2026-03-08 04:07:49 +08:00
zedhugh 9fbd7f45e9 fix: 修复 client_send_to_tag 操作的焦点问题 2026-03-08 03:30:55 +08:00
zedhugh ea47717783 fix: 去除被其他 monitor 覆盖的 monitor 2026-03-08 03:04:24 +08:00
zedhugh 850221793f fix: audio 模块的初始化状态不要暴露给外部 2026-03-08 03:03:02 +08:00
zedhugh 5b41eb97cd fix: 修复窗口 Y 轴约束误用 workarea.width 的问题 2026-03-06 03:35:40 +08:00
zedhugh cecd7dc2d9 fix: 修复 client_manage 函数中 client 初始化 tag 逻辑 2026-03-03 08:47:08 +08:00
zedhugh 92a810f345 fix: client_send_to_tag 不再切换 monitor 的 tag 2026-03-03 07:55:07 +08:00
zedhugh 9f8b2453fa feat: 焦点切换时屏幕和光标自动跟随
- 按键操作前自动根据光标位置更新当前屏幕
- 新增 enter_notify 事件处理,鼠标进入窗口时自动获取焦点
- 新增 focus_in 事件处理,窗口获得焦点时更新当前屏幕
- 确保焦点操作与 current_monitor 保持同步
2026-03-03 07:26:49 +08:00
zedhugh 4428eb056d fix: 修改 wm_set_current_monitor 函数实现避免光标乱跳
- 将 wm_set_current_monitor 改为支持 restore_cursor 参数,按场景决定是
  否恢复光标位置
- 仅在指针位于当前显示器时更新 cursor_position 缓存,减少错误覆盖
2026-03-03 07:23:34 +08:00
zedhugh fb0999df90 feat: 统一 current_monitor 切换并让光标跟随 current_monitor 变化
- 新增 wm_set_current_monitor ,切换前记录光标当前所在 monitor 的最后
  位置
- 切换到目标 monitor 时按需恢复该 monitor 的光标位置
- 将 action/event/client 中直接赋值 wm.current_monitor 的逻辑改为统一
  调用 wm_set_current_monitor
- 优化 monitor_restore_cursor_point:首次未初始化时计算并设置位置
- 为 wm_get_monitor_by_area / wm_get_monitor_by_point 增加
  returns_nonnull 约束,并让 by_point 复用 by_area
2026-03-03 04:11:02 +08:00
zedhugh 41a2289c96 feat: client 的任务栏标题点击行为根据 client 窗口的遮挡状态进行
- 当点击 client 在任务中的标题时,如果 client 被其他窗口遮挡,则将其显
示出来,否则切换其 minimize 属性
- 新增 rect 模块用于辅助判断 client 的遮挡状态,添加
rect_intersection/rect_subtract/rect_subtract_many 函数
- client 模块新增 client_get_obscured_state 计算 client 窗口被遮挡状态
- action 模块新增 change_client_state_dwim,实现上述的 client 状态切换
2026-03-03 00:35:11 +08:00