WIP: 迁移窗口堆叠顺序到新方案

This commit is contained in:
2026-04-01 16:09:29 +08:00
parent 196dab9bb3
commit 367d825a58

View File

@@ -6,6 +6,7 @@
#include "base/array.h"
#include "base/log.h"
#include "base/memory.h"
#include "core/layer.h"
#include "core/types.h"
#include "core/wm_desc.h"
@@ -69,9 +70,15 @@ void state_cleanup(state_t *state) {
}
state->window_count = 0;
p_delete(&state->windows);
p_delete(&state->stack_order);
state->window_capacity = 0;
for (size_t i = 0; i < ZDWM_WINDOW_LAYER_COUNT; ++i) {
layer_stack_t *layer = &state->stacks[i];
p_delete(&layer->order);
layer->order = 0;
layer->capacity = 0;
}
for (size_t i = 0; i < state->workspace_count; i++) {
workspace_t *workspace = &state->workspaces[i];
p_delete(&workspace->name);
@@ -112,14 +119,17 @@ static void state_workspace_adjust_focused_window(const state_t *state,
state_window_get(state, workspace->focused_window_id);
if (window && window->workspace_id == workspace_id) return;
for (size_t i = state->window_count; i > 0; i--) {
window_id_t window_id = state->stack_order[i - 1];
const window_t *window = state_window_get(state, window_id);
for (size_t i = ZDWM_WINDOW_LAYER_TOP; i >= ZDWM_WINDOW_LAYER_NORMAL; --i) {
const layer_stack_t *layer = &state->stacks[i];
for (size_t i = layer->count; i > 0; --i) {
window_id_t window_id = layer->order[i - 1];
window = state_window_get(state, window_id);
if (window && window->workspace_id == workspace_id) {
workspace->focused_window_id = window_id;
return;
}
}
}
workspace->focused_window_id = ZDWM_WINDOW_ID_INVALID;
}