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 顺序统一提交
This commit is contained in:
2026-04-23 04:37:34 +08:00
parent 28ebb086b1
commit fc68e75f82
5 changed files with 213 additions and 55 deletions

View File

@@ -7,9 +7,10 @@
#include <xcb/xproto.h>
#include "core/backend.h"
#include "core/window.h"
#include "internal.h"
typedef struct atoms_t atoms_t;
typedef struct window_list_t window_list_t;
/**
* @brief 获取窗口的 role 属性
@@ -78,3 +79,11 @@ window_state_t atom_to_window_state(const atoms_t *atoms, xcb_atom_t atom);
xcb_icccm_set_wm_class(conn, win, sizeof(instance_class), instance_class)
void window_takefocus(backend_t *backend, xcb_window_t window);
void window_kill(backend_t *backend, xcb_window_t window);
void root_set_event_mask(backend_t *backend);
void window_set_event_mask(xcb_connection_t *conn, xcb_window_t window);
void window_clean_event_mask(xcb_connection_t *conn, xcb_window_t window);
void window_list_push(window_list_t *window_list, xcb_window_t window);
void window_list_reset(window_list_t *window_list);