处理窗口销毁事件

This commit is contained in:
2025-08-24 11:35:52 +08:00
parent bac73368e3
commit 0039cd2c43
7 changed files with 80 additions and 32 deletions

View File

@@ -184,10 +184,11 @@ window_list_t *scan_window_list(void) {
xcb_window_t *list = xcb_query_tree_children(tree_reply);
int len = xcb_query_tree_children_length(tree_reply);
if (!len) return NULL;
uint32_t normal_count = 0, transient_count = 0;
xcb_window_t normal_window_array[len];
xcb_window_t transient_window_array[len];
xcb_window_t *normal_window_array = ecalloc(len, sizeof(xcb_window_t));
xcb_window_t *transient_window_array = ecalloc(len, sizeof(xcb_window_t));
for (int i = 0; i < len; i++) {
xcb_window_t window = list[i];
@@ -214,25 +215,12 @@ window_list_t *scan_window_list(void) {
}
free(tree_reply);
if ((!normal_count) && (!transient_count)) return NULL;
window_list_t *r = ecalloc(1, sizeof(window_list_t));
r->normal_list = normal_window_array;
r->transient_list = transient_window_array;
r->normal_count = normal_count;
r->transient_count = transient_count;
if (normal_count) {
r->normal_list = ecalloc(normal_count, sizeof(xcb_window_t));
for (uint32_t i = 0; i < normal_count; i++) {
r->normal_list[i] = normal_window_array[i];
}
}
if (transient_count) {
r->transient_list = ecalloc(transient_count, sizeof(xcb_window_t));
for (uint32_t i = 0; i < transient_count; i++) {
r->transient_list[i] = transient_window_array[i];
}
}
return r;
}