Commit Graph
100 Commits
Author SHA1 Message Date
zedhugh 9f9adf7e2e feat(backend): 写入 _NET_SUPPORTED 属性声明 EWMH 支持能力 2026-06-16 23:33:05 +08:00
zedhugh 00df685184 fix(backend): 修复 backend_poll_event 返回值意义不明导致的事件循环 bug
原因:之前的 backend_poll_event 返回 false 有两种情况
1. 当前就绪的事件已全部处理,没有事件可读了
2. 没有可以转化为感兴趣归一化的事件

当返回值为 false 并且时第二种情况时,底层的 xcb 原始事件未处理完,但不
再处理事件。导致有一部分事件一直无法处理,直到下一批事件待处理时通过文
件描述符状态变更唤醒新一轮的事件读取。这就会导致有些事件处理不及时,造
成卡顿的情况。

通过如下措施解决这个问题:
1. backend_poll_event 返回值只表示是否还有事件未处理完
2. event_t 引入 ZDWM_EVENT_NONE 表示事件为空,无人对该事件感兴趣也不需
   要清理
2026-06-16 23:16:55 +08:00
zedhugh 6d06b61134 fix(bar): workspaces 移除窗口时找到后立即 break 避免不必要的遍历 2026-06-16 19:13:30 +08:00
zedhugh 30dfb19a7b fix(config): 补全默认全景色 2026-06-16 19:11:49 +08:00
zedhugh 195733e008 fix(core): 补全窗口属性变更通知 2026-06-16 19:00:19 +08:00
zedhugh 6f1421f5b5 fix(bar): 重绘前清空内容并填充背景以消除脏区域残留 2026-06-16 17:49:34 +08:00
zedhugh 9bbdb26f06 fix(bar): 绘制 cell 文本前校验其文本避免渲染空内容 2026-06-16 17:22:52 +08:00
zedhugh 6e3e7ee937 fix(bar): 修复窗口列表布局 bug 导致的窗口列表 cell 重叠 2026-06-16 17:19:21 +08:00
zedhugh 9d35d17493 fix(bar): 修复 cell text/fg/bg 字符串内存泄露和 p_delete 参数错误 2026-06-16 17:17:00 +08:00
zedhugh a4bd0b53de feat(bar): 添加窗口列表显示当前 workspace 的窗口列表 2026-06-16 17:14:59 +08:00
zedhugh 3be83aefdf fix(bar): 修复颜色缓存造成的颜色野指针从而导致无法正确渲染 cell 的 bug 2026-06-16 09:14:34 +08:00
zedhugh dee4073996 feat(bar): 新增绑定模式指示器显示当前 binding mode
- 新增 bar/binding: 监听 binding mode 变更,显示当前模式名
- 支持点击单元循环切换绑定模式(binding_mode_cycle)
- 默认模式下按 show_default 配置决定是否隐藏单元
- 补充 binding 相关默认配置(颜色、内边距、是否显示默认模式)
2026-06-16 02:09:38 +08:00
zedhugh e8b59e914c feat(bar): layout 颜色未配置时回退到默认背景色和前景色 2026-06-16 01:59:36 +08:00
zedhugh ac65180203 feat(bar): 按间隔节流 bar_item 更新
- 新增 base/time: time_monotonic_ms 与 time_create_monotonic_timerfd_by_fps
- bar 初始化改用该工具创建 timerfd,移除内联的 itimerspec 拼装
- bar_item_update 按 update_interval_ms 节流,记录 last_updated_time 跳过过早更新
2026-06-16 00:31:07 +08:00
zedhugh 30e9751119 perf(bar): 仅在 bar 需要绘制新内容时才重绘并 flush 后端 2026-06-15 23:27:28 +08:00
zedhugh 41f82d7039 feat(bar): 在 workspace 列表末尾显示当前 workspace 布局符号 2026-06-15 19:50:42 +08:00
zedhugh d0127f66e4 perf(runtime): bar 不可见时跳过更新避免无效重绘 2026-06-15 18:12:50 +08:00
zedhugh 4cef809f3c feat(policy): 窗口增删改时触发对应的 listeners 通知 2026-06-15 18:08:29 +08:00
zedhugh d97cfba8dd fix(bar): 修复 workspace bar state 销毁时的内存泄露 2026-06-15 17:03:28 +08:00
zedhugh 539563c53f feat(runtime): 通过 signalfd 将信号处理集成到 poll 事件循环中 2026-06-10 01:54:20 +08:00
zedhugh dbbbbce379 feat(runtime): 用基于 poll 的事件循环代替阻塞式事件等待 2026-06-10 01:26:05 +08:00
zedhugh 4e713682e4 refactor(policy): 统一 output 切换逻辑并添加 workspace 切换通知 2026-06-09 23:05:54 +08:00
zedhugh 4535e171a0 feat(bar): 实现 bar 布局排版和渲染绘制流程 2026-06-09 20:01:11 +08:00
zedhugh fa2f058032 fix(bar): 修复 bar_cell_t text 字段可能为野指针 bug 2026-06-09 10:28:35 +08:00
zedhugh 8c145fb1b4 feat(bar): 实现 bar_draw 渲染骨架及文字排版绘制接口 2026-06-08 22:57:34 +08:00
zedhugh 62f6bab611 feat(bar): 新增 text 文字排版模块并将其集成到 bar 生命周期中 2026-06-08 01:24:49 +08:00
zedhugh 3a8c392d90 feat(bar): 实现 bar 初始化和清理功能并将其集成到 runtime 中 2026-06-08 01:21:19 +08:00
zedhugh 87535835a8 fix(bar): 修复 workspaces 中 destroy_state 接口内存未正确释放 bug 2026-06-08 01:07:15 +08:00
zedhugh fed04cbffc refactor(bar): 隐藏 workspaces 模块内部细节仅保留必要的对外接口 2026-06-08 00:35:59 +08:00
zedhugh b510b7b473 feat(bar): 初始化 bar 窗口并将 bar 集成到 runtime 启动流程中 2026-06-06 09:23:15 +08:00
zedhugh c30c7d0698 fix(backend): 修复缺少 colormap 导致的创建 bar 窗口失败 2026-06-06 08:56:09 +08:00
zedhugh adf839bf21 feat(bar): 实现 bar 可见性切换 action 2026-06-06 04:44:56 +08:00
zedhugh be37b17c2e refactor(runtime): 将 runtime 模块从 core 目录迁移至独立的 runtime 目录并封装内部细节 2026-06-06 02:08:35 +08:00
zedhugh f82d0b7a87 refactor: 移除新架构用不到的老模块 2026-06-06 00:40:39 +08:00
zedhugh e9366b64e2 feat(backend): 添加创建 bar 窗口接口 2026-06-06 00:40:33 +08:00
zedhugh f540c07aad refactor: 将 APP_NAME 宏从 CMake 配置文件生成改为静态头文件 2026-06-05 18:59:38 +08:00
zedhugh ebc277201a chore: 删除老旧的测试代码和构建工具脚本 2026-06-05 16:23:04 +08:00
zedhugh ff40b3caa0 feat(bar): 添加状态栏 bar 模块的基础架构和 workspace 指示器 2026-06-05 02:23:01 +08:00
zedhugh d07d2f64e1 refactor(policy): 提取切换 workspace 和窗口聚焦的命令构造辅助函数 2026-06-04 22:28:39 +08:00
zedhugh 0d43c79ad6 feat(config): 默认配置补充按键绑定 2026-05-31 18:54:23 +08:00
zedhugh 83ed661ba6 fix(policy): 移动窗口所在 workspace 前先检查目标 workspace 是否存在 2026-05-31 18:42:51 +08:00
zedhugh 59520777c3 refactor(binding): key_binding_t 不再保存按键序列字符串指针 2026-05-31 18:33:11 +08:00
zedhugh 09d5e4b4d0 refactor(policy): 删除 action 模块,将 action -> command 解析放在 policy 模块内部
- 删除 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
2026-05-27 01:12:04 +08:00
zedhugh ff3b51fd1d feat(policy): 扩展命令并实现窗口迁移、 output/layout/binding_mode 切换功能
- command.h 新增 SEND_TO_WORKSPACE、SET_CURRENT_OUTPUT、SET_LAYOUT、SET_BINDING_MODE 四个命令类型及载荷
- policy.c 实现对应的 apply 逻辑,包含焦点转移、映射/取消映射副作用和 listener 通知
- plan.h 增加 quit/will_restart 标志,为后续优雅退出做准备
- binding.c 对重复设置同一 mode 增加短路返回
2026-05-26 13:15:54 +08:00
zedhugh 989a1ce6e8 feat(listeners): 调整通知结构体字段并补充文档注释 2026-05-24 17:58:29 +08:00
zedhugh 13fc41f141 feat(runtime): 通过 listeners 发送初始状态 2026-05-23 23:06:53 +08:00
zedhugh ca9e543cc0 feat(listeners): 实现 listener 通知分发和清理功能 2026-05-23 21:09:43 +08:00
zedhugh 33b0f2f54f refactor(action): 重新设计 action 实现方式 2026-05-19 02:55:08 +08:00
zedhugh edde023f5a fix(listeners): 公共头添加 extern "C" 链接说明以支持 C++ 包含 2026-05-17 03:36:48 +08:00
zedhugh 74319e97f1 feat: 添加核心状态变更通知系统 2026-05-17 03:20:38 +08:00
zedhugh 74be362b1f refactor(base): 通过 typeof 为 array_push 宏添加返回类型推导 2026-05-17 03:11:15 +08:00
zedhugh 9663097a98 fix(action): 修复 switch_workspace_by_index_in_current_output 循环条件错误 2026-05-10 12:19:50 +08:00
zedhugh 601c0f3d1a refactor: 迁移 CMake 到模块化目录构建并添加新入口 2026-05-09 23:03:00 +08:00
zedhugh 0d4a907dd8 feat(action): 实现切换当前 output 工作区功能 2026-05-09 23:00:01 +08:00
zedhugh 1f4659e7a4 refactor: 使用 workspace_id_invalid() 替代直接比较 ZDWM_WORKSPACE_ID_INVALID 2026-05-09 04:09:46 +08:00
zedhugh a60d9f31a7 feat(action): 实现 focus_window 窗口焦点切换及 raise 命令 2026-05-07 07:20:27 +08:00
zedhugh 9275d14c5f feat(runtime): 启动时扫描并接管已有窗口
从 handle_map_request 中提取 populate_window_event 供复用,
新增 backend_scan_windows 扫描 X11 根窗口子树,
runtime_scan 将扫描到的窗口走完整 policy 流程纳入管理。
route_map_request 增加 override_redirect 过滤。
2026-05-07 06:36:58 +08:00
zedhugh c1a4795a85 feat(state): 初始化 float_rect 并在切换 floating 状态时双向同步 2026-05-07 04:11:44 +08:00
zedhugh 8fcf46979a feat(action): 绑定 toggle_fullscreen/maximize/floating 快捷键 2026-05-07 03:54:30 +08:00
zedhugh 56f8380028 feat(action): 实现 switch_workspace cycle_layout 和 cycle_output 操作 2026-05-07 03:21:27 +08:00
zedhugh 2c3c264ddd feat(action): 实现 toggle_fullscreen/maximize/floating/sticky 操作 2026-05-07 03:20:24 +08:00
zedhugh 3031adf3cb feat(policy): 处理窗口状态变更事件 2026-05-07 02:22:16 +08:00
zedhugh 1b6a4788be feat(policy): 处理窗口激活请求事件 2026-05-07 02:14:38 +08:00
zedhugh 474ed8dc69 fix(policy): 窗口移除前获取其是否需要自动布局结果 2026-05-07 01:59:56 +08:00
zedhugh 964de33b23 feat(policy): 处理窗口元数据变更事件 2026-05-07 01:58:00 +08:00
zedhugh b14be7b8dd feat(policy): 在窗口管理/取消管理时推送窗口列表变更 effect 2026-05-05 02:59:16 +08:00
zedhugh f11125d214 fix(core): 补充 POINTER_ENTER 事件处理缺失的 break 语句 2026-05-05 02:38:30 +08:00
zedhugh 70e2477649 feat(action): 重构 action 接口为函数指针表并实现 quit 和 raise_or_run 2026-05-05 00:44:04 +08:00
zedhugh d6512c531f fix(base): 修复 window_list_cleanup 中 p_delete 参数类型错误 2026-05-05 00:42:06 +08:00
zedhugh c7399f014b fix(backend/X11): 修复按键抓取使用错误数组索引的 bug
window_grab_keys 中误用 keys (首元素)代替 key (当前元素)获取
keysym, 导致只有第一个按键能正确注册
2026-05-04 22:34:15 +08:00
zedhugh 42986fb783 feat(command): 添加窗口 bool 状态的 set 命令 2026-05-04 20:02:45 +08:00
zedhugh ecc9834b03 refactor(command): 从 switch_workspace 命令中移除冗余的 output 字段 2026-05-04 17:52:36 +08:00
zedhugh 12bfce4745 refactor(core): 使用独立 bool 字段代替 geometry_mode 字段
将 fullscreen/maximized/minimized 从互斥枚举拆分为独立 bool 字段,以便
窗口状态切换时能回到上一状态。比如窗口初始为最大化状态,如果进入全屏状
态后从全屏状态退出时还能恢复最大化状态。
2026-05-04 04:07:36 +08:00
zedhugh c777b58d80 feat(backend/X11): 处理 PropertyNotify 和 ClientMessage 事件 2026-05-04 03:03:15 +08:00
zedhugh 3349a912cc refactor(plan): 添加往 plan 中新增 effect 相关辅助函数以消除模板代码 2026-05-02 23:22:50 +08:00
zedhugh b457d65fb9 feat(policy): 完善窗口状态变更时的边框和焦点管理 2026-05-02 22:25:11 +08:00
zedhugh d90cebe0c2 feat(core+backend/X11): 实现窗口边框管理和焦点跟随鼠标 2026-05-02 00:46:13 +08:00
zedhugh 1cfa2c4505 feat(config): 添加配置窗口边框 API 2026-05-01 19:07:21 +08:00
zedhugh 3a830e864a fix(test): 更新 assert_default_layouts 匹配当前默认布局注册表 2026-05-01 18:56:22 +08:00
zedhugh 085a071f23 feat(policy): 处理 ConfigureRequest 事件 2026-04-29 01:56:31 +08:00
zedhugh 1485400b4c refactor(core+backend/X11): 将修改窗口几何属性合并到 CONFIGURE_WINDOW 中
将 MOVE/RESIZE/BORDER_WIDTH 三个效果合并进 CONFIGURE_WINDOW 中,通过
changed_fields 掩码提取有效数据
2026-04-29 00:39:19 +08:00
zedhugh a393308704 feat(core+backend/X11): 实现窗口状态变更(最大化/最小化/全屏) 2026-04-28 03:45:40 +08:00
zedhugh d602b0111e fix(core/policy): 修复切换工作区时 map_effect 使用的错误 union 字段
map_effect 应该使用 .as.map.window ,错误的用了 .as.unmap.window
2026-04-28 03:33:36 +08:00
zedhugh 78200debf5 refactor(core/runtime): 调整布局计算流程 2026-04-28 03:28:03 +08:00
zedhugh 722d3946c6 feat(core+backend/X11): 区分窗口销毁和撤销 2026-04-27 22:28:43 +08:00
zedhugh 8d838135d6 feat(core/runtime): 集成布局计算到主循环 2026-04-27 21:06:11 +08:00
zedhugh 7413d7439a feat(layouts): 实现 fair/fullscreen/maximize 内置布局 2026-04-27 18:38:49 +08:00
zedhugh 10fa3740a8 refactor(Makefile): 用硬链接代替复制并拆分测试目标 2026-04-27 01:28:31 +08:00
zedhugh fc038eda35 fix(core/binding): 将 action_arg 改为值类型避免悬空指针问题 2026-04-27 01:23:07 +08:00
zedhugh c93e78bbd6 feat(core+backend/X11): 完成快捷键绑定和触发功能 2026-04-27 01:09:23 +08:00
zedhugh 19e97b730b refactor(backend/X11): 将 event_reset 调用移到事件分发处 2026-04-27 01:05:10 +08:00
zedhugh 2ab4a84236 feat(backend/X11): 填充 ZDWM_EVENT_WINDOW_REMOVE 事件数据 2026-04-27 01:00:32 +08:00
zedhugh e394ed78a5 fix(backend/X11): 释放 backend->map 所持有的内存 2026-04-27 00:43:09 +08:00
zedhugh 46140e1e03 feat(core/plan): 清理 effect 所持有的内存 2026-04-27 00:20:43 +08:00
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