Commit Graph

62 Commits

Author SHA1 Message Date
c609d15d77 fix(tray): 修复 tray_init 中初始化状态不完全导致 bar 计算布局时走文本测量的 bug 2026-07-28 02:27:46 +08:00
d47ca9cf1a feat(tray): 完善 tray_cleanup 释放图标窗口并归还 selection owner 2026-07-25 04:07:57 +08:00
e39eb245b6 feat(tray): 处理 SYSTEM_TRAY_REQUEST_DOCK 实现图标嵌入托盘容器
- 注册 _NET_SYSTEM_TRAY_OPCODE 与 _XEMBED atom
- 在事件分发中拦截托盘 client message
- tray_add_icon 将请求 dock 的窗口 reparent 到 container,
  发送 XEMBED_EMBEDDED_NOTIFY 并 map,维护 icons 数组并
  触发图标变更回调
2026-07-25 03:59:04 +08:00
3c5cfd3ead feat(tray): 实现 tray_cleanup 并在 backend_destroy 中调用以释放托盘资源 2026-07-25 01:07:49 +08:00
e7a0945a93 feat(tray): 成为 selection owner 后广播 MANAGER 事件通知托盘客户端 2026-07-24 20:59:51 +08:00
47bd59b806 feat(tray): 实现 tray_init 完成 system tray selection 接管 2026-07-24 20:21:48 +08:00
9f8681d467 feat(backend): backend_create_bar_window 返回 tray 句柄 2026-07-18 18:21:25 +08:00
d0120566bf feat(tray): 实现 tray_api_t 定义的所有接口 2026-07-15 18:49:15 +08:00
27aab6f0e9 feat(tray): 添加 tray 相关接口并融入现有启动流程 2026-06-27 22:52:19 +08:00
079f41ce8a refactor: 从 core 中抽出跨模块契约建立 interface/common 模块分层
引入 interface/(零实现声明层)与 common/(共享 ADT 操作层),把跨模块
契约从 core 实现里抽出来,依赖方向回到单向(base ← interface ← common ←
各实现层)。docs/module-layering.org 记录完整方案与判定标准。

interface/(纯类型与多态接口声明,零 .c):
- types.h / event.h / backend.h 从 core 移入
- effect.h 新建(effect_t 从 plan.h 抽出)

common/(多实现层共用的自包含操作,.h + .c):
- event.{h,c}:event_reset / event_cleanup
- listeners.{h,c}:listeners 维护(add / cleanup);notify 留 core
- window.{h,c}:window_list + layer_props/metadata cleanup + window_classify_layer
- workspace.{h,c}:workspace_desc(从 wm_desc.h 拆出,改真实函数)

window 相关整理:
- window_layer_type_t 上浮 interface/types.h(common 的 classify 需要)
- window_classify_layer 移 common/window
- window_info_t 独立成 core/window_info.h(state/command 共享,不寄生)
- 删除 wm_desc.h,base/window_list 并入 common/window

全项目 include 路径同步更新
2026-06-25 03:00:30 +08:00
bf3de7fb92 style: 禁掉 clang-format 的 AlignConsecutiveAssignments 规则并重新格式化整个项目 2026-06-24 13:05:56 +08:00
f3b1466dac fix(backend): 扫描窗口时按 transient 关系排序并过滤无效窗口 2026-06-23 00:33:03 +08:00
b71b66921e refactor(window): 用更通用的尺寸提示(min/max size)替换 fixed_size 标记 2026-06-22 23:22:08 +08:00
9a1e015fc1 feat: 添加 MOD4 + 鼠标右键调整窗口大小功能 2026-06-22 00:48:14 +08:00
4e7ab45864 feat: 添加 MOD4 + 鼠标左键移动窗口功能 2026-06-21 16:30:59 +08:00
b8cd40df9f feat(backend): 支持鼠标抓取功能 2026-06-20 01:06:30 +08:00
7a47f4d44d feat(backend): 添加光标支持 2026-06-20 00:59:13 +08:00
090266baa5 feat(backend): 发送鼠标按键和移动事件 2026-06-18 01:19:41 +08:00
9f9adf7e2e feat(backend): 写入 _NET_SUPPORTED 属性声明 EWMH 支持能力 2026-06-16 23:33:05 +08:00
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
dbbbbce379 feat(runtime): 用基于 poll 的事件循环代替阻塞式事件等待 2026-06-10 01:26:05 +08:00
4535e171a0 feat(bar): 实现 bar 布局排版和渲染绘制流程 2026-06-09 20:01:11 +08:00
c30c7d0698 fix(backend): 修复缺少 colormap 导致的创建 bar 窗口失败 2026-06-06 08:56:09 +08:00
f82d0b7a87 refactor: 移除新架构用不到的老模块 2026-06-06 00:40:39 +08:00
e9366b64e2 feat(backend): 添加创建 bar 窗口接口 2026-06-06 00:40:33 +08:00
f540c07aad refactor: 将 APP_NAME 宏从 CMake 配置文件生成改为静态头文件 2026-06-05 18:59:38 +08:00
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
c7399f014b fix(backend/X11): 修复按键抓取使用错误数组索引的 bug
window_grab_keys 中误用 keys (首元素)代替 key (当前元素)获取
keysym, 导致只有第一个按键能正确注册
2026-05-04 22:34:15 +08:00
12bfce4745 refactor(core): 使用独立 bool 字段代替 geometry_mode 字段
将 fullscreen/maximized/minimized 从互斥枚举拆分为独立 bool 字段,以便
窗口状态切换时能回到上一状态。比如窗口初始为最大化状态,如果进入全屏状
态后从全屏状态退出时还能恢复最大化状态。
2026-05-04 04:07:36 +08:00
c777b58d80 feat(backend/X11): 处理 PropertyNotify 和 ClientMessage 事件 2026-05-04 03:03:15 +08:00
d90cebe0c2 feat(core+backend/X11): 实现窗口边框管理和焦点跟随鼠标 2026-05-02 00:46:13 +08:00
1485400b4c refactor(core+backend/X11): 将修改窗口几何属性合并到 CONFIGURE_WINDOW 中
将 MOVE/RESIZE/BORDER_WIDTH 三个效果合并进 CONFIGURE_WINDOW 中,通过
changed_fields 掩码提取有效数据
2026-04-29 00:39:19 +08:00
a393308704 feat(core+backend/X11): 实现窗口状态变更(最大化/最小化/全屏) 2026-04-28 03:45:40 +08:00
722d3946c6 feat(core+backend/X11): 区分窗口销毁和撤销 2026-04-27 22:28:43 +08:00
c93e78bbd6 feat(core+backend/X11): 完成快捷键绑定和触发功能 2026-04-27 01:09:23 +08:00
19e97b730b refactor(backend/X11): 将 event_reset 调用移到事件分发处 2026-04-27 01:05:10 +08:00
2ab4a84236 feat(backend/X11): 填充 ZDWM_EVENT_WINDOW_REMOVE 事件数据 2026-04-27 01:00:32 +08:00
e394ed78a5 fix(backend/X11): 释放 backend->map 所持有的内存 2026-04-27 00:43:09 +08:00
f3b8be8cf1 feat(backend/X11): 实现按键抓取功能 2026-04-26 19:03:18 +08:00
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
1e3a571619 refactor(backend/X11): 合并批量 effect 中的 focus 操作
一批 effect 中可能包含多个 FOCUS_WINDOW,但最终只有一个窗口能获得焦点,
延迟到循环结束后只执行最后一次 focus 调用
2026-04-22 19:50:26 +08:00
663db3412f feat(backend/X11): 添加从 _NET_WM_STATE 中获取 urgent 属性的功能 2026-04-22 19:37:01 +08:00
92dcec0e79 feat(backend/X11): 添加 _NET_SUPPORTING_WM_CHECK 兼容窗口 2026-04-19 05:39:31 +08:00
22cd362724 feat(backend/X11): 实现 backend_apply_effect 接口以提交 X11 副作用 2026-04-19 04:49:02 +08:00
2fc4b33359 style: 更新 .clang-format 规则并重新格式化所有源文件
- 重构模块使用新的代码风格
- 老代码 (src 目录下的代码) 继续使用之前的代码风格

通过在需要不同代码风格的目录下放对应 .clang-format 配置文件实现
2026-04-14 01:52:53 +08:00
7b5404e8e0 refactor(backend/x11): 用 X-macro 统一 atom 列表的声明和初始化 2026-04-14 01:35:25 +08:00
6561b16be0 feat(core): 引入 plan/effect 执行骨架
新增 plan/effect 数据结构与基础操作
在 runtime 中接入 event -> command_buffer -> plan -> backend 流程
补齐 policy/backend 接口并同步更新测试构建
2026-04-13 05:56:31 +08:00
0c24fb2a32 feat(core/event): 添加 event 资源清理和重置接口 2026-04-13 05:35:13 +08:00
11601c75bd backend: X11 后端函数 detect_monitor_by_randr 中使用 p_strndup 替代 strndu 2026-04-11 06:00:08 +08:00
8a72e671bc core: 重命名 event_t 联合体成员 data 为 as 2026-04-11 05:59:44 +08:00