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);
|
window_configure_t *cfgs = p_new(window_configure_t, effect_count);
|
||||||
size_t cfg_count = 0;
|
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) {
|
for (size_t i = 0; i < effect_count; ++i) {
|
||||||
const effect_t *e = &effects[i];
|
const effect_t *e = &effects[i];
|
||||||
switch (e->type) {
|
switch (e->type) {
|
||||||
@@ -463,7 +466,8 @@ bool backend_apply_effect(
|
|||||||
xcb_unmap_window(conn, e->as.unmap.window);
|
xcb_unmap_window(conn, e->as.unmap.window);
|
||||||
break;
|
break;
|
||||||
case ZDWM_EFFECT_FOCUS_WINDOW:
|
case ZDWM_EFFECT_FOCUS_WINDOW:
|
||||||
backend_focus_window(backend, e->as.focus.window);
|
focus_window = e->as.focus.window;
|
||||||
|
focus_window_changed = true;
|
||||||
break;
|
break;
|
||||||
case ZDWM_EFFECT_MOVE_WINDOW: {
|
case ZDWM_EFFECT_MOVE_WINDOW: {
|
||||||
window_configure_t *cfg =
|
window_configure_t *cfg =
|
||||||
@@ -514,6 +518,8 @@ bool backend_apply_effect(
|
|||||||
}
|
}
|
||||||
p_delete(&cfgs);
|
p_delete(&cfgs);
|
||||||
|
|
||||||
|
if (focus_window_changed) backend_focus_window(backend, focus_window);
|
||||||
|
|
||||||
xcb_flush(conn);
|
xcb_flush(conn);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user