From 90a25fb120c83380f533042754825e5eabb65b2f Mon Sep 17 00:00:00 2001 From: Zedhugh Chen Date: Tue, 31 Mar 2026 18:02:38 +0800 Subject: [PATCH] =?UTF-8?q?core:=20=E6=B7=BB=E5=8A=A0=E7=AA=97=E5=8F=A3?= =?UTF-8?q?=E6=89=80=E5=B1=9E=E5=B1=82=E7=BA=A7=E5=88=A4=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/core/layer.c | 15 +++++++++++++++ src/core/policy.c | 10 ++++++++++ 2 files changed, 25 insertions(+) create mode 100644 src/core/policy.c diff --git a/src/core/layer.c b/src/core/layer.c index 56f706e..f953bc4 100644 --- a/src/core/layer.c +++ b/src/core/layer.c @@ -5,6 +5,7 @@ #include "base/array.h" #include "base/memory.h" #include "core/types.h" +#include "core/window.h" void layer_stack_cleanup(layer_stack_t *layer) { p_delete(&layer->order); @@ -86,3 +87,17 @@ bool layer_stack_lower(layer_stack_t *layer, window_id_t window) { return true; } + +layer_type_t layer_classify(const window_props_t *props) { + for (size_t i = 0; i < props->type_count; ++i) { + window_type_t type = props->types[i]; + if (type == ZDWM_WINDOW_TYPE_NOTIFICATION) return ZDWM_WINDOW_LAYER_OVERLAY; + } + + for (size_t i = 0; i < props->state_count; ++i) { + window_state_t state = props->states[i]; + if (state == ZDWM_WINDOW_STATE_ABOVE) return ZDWM_WINDOW_LAYER_TOP; + } + + return ZDWM_WINDOW_LAYER_NORMAL; +} diff --git a/src/core/policy.c b/src/core/policy.c new file mode 100644 index 0000000..48fa546 --- /dev/null +++ b/src/core/policy.c @@ -0,0 +1,10 @@ +#include "core/policy.h" + +#include "base/macros.h" +#include "core/state.h" + +layer_type_t policy_adjust_window_layer_from_transient( + const state_t *state, window_id_t transient_for, layer_type_t base_layer) { + const window_t *window = state_window_get(state, transient_for); + return MAX(window->layer, base_layer); +}