refactor(backend/X11): 合并批量 effect 中的 focus 操作
一批 effect 中可能包含多个 FOCUS_WINDOW,但最终只有一个窗口能获得焦点, 延迟到循环结束后只执行最后一次 focus 调用
This commit is contained in:
@@ -453,6 +453,9 @@ bool backend_apply_effect(
|
||||
window_configure_t *cfgs = p_new(window_configure_t, effect_count);
|
||||
size_t cfg_count = 0;
|
||||
|
||||
bool focus_window_changed = false;
|
||||
xcb_window_t focus_window = XCB_WINDOW_NONE;
|
||||
|
||||
for (size_t i = 0; i < effect_count; ++i) {
|
||||
const effect_t *e = &effects[i];
|
||||
switch (e->type) {
|
||||
@@ -463,7 +466,8 @@ bool backend_apply_effect(
|
||||
xcb_unmap_window(conn, e->as.unmap.window);
|
||||
break;
|
||||
case ZDWM_EFFECT_FOCUS_WINDOW:
|
||||
backend_focus_window(backend, e->as.focus.window);
|
||||
focus_window = e->as.focus.window;
|
||||
focus_window_changed = true;
|
||||
break;
|
||||
case ZDWM_EFFECT_MOVE_WINDOW: {
|
||||
window_configure_t *cfg =
|
||||
@@ -514,6 +518,8 @@ bool backend_apply_effect(
|
||||
}
|
||||
p_delete(&cfgs);
|
||||
|
||||
if (focus_window_changed) backend_focus_window(backend, focus_window);
|
||||
|
||||
xcb_flush(conn);
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user