From 46140e1e03fb723adfe01cbe8aadcc093accd51c Mon Sep 17 00:00:00 2001 From: Zedhugh Chen Date: Mon, 27 Apr 2026 00:20:43 +0800 Subject: [PATCH] =?UTF-8?q?feat(core/plan):=20=E6=B8=85=E7=90=86=20effect?= =?UTF-8?q?=20=E6=89=80=E6=8C=81=E6=9C=89=E7=9A=84=E5=86=85=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/core/plan.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/core/plan.c b/src/core/plan.c index 9b39629..8d7a942 100644 --- a/src/core/plan.c +++ b/src/core/plan.c @@ -1,16 +1,39 @@ #include "core/plan.h" +#include + #include "base/array.h" #include "base/memory.h" +static void free_memory_hold_by_effects(effect_t *effects, size_t count) { + for (size_t i = 0; i < count; ++i) { + auto effect = &effects[i]; + + switch (effect->type) { + case ZDWM_EFFECT_CHANGE_WINDOW_LIST: + p_delete(&effect->as.change_window_list.windows); + break; + case ZDWM_EFFECT_RESTACK_WINDOWS: + p_delete(&effect->as.restack_windows.windows); + break; + case ZDWM_EFFECT_BIND_KEY: + p_delete(&effect->as.bind_key.keys); + break; + default: + } + } +} + void plan_reset(plan_t *plan) { if (!plan->effects || !plan->capacity) return; + free_memory_hold_by_effects(plan->effects, plan->count); p_clear(plan->effects, plan->capacity); plan->count = 0; } void plan_cleanup(plan_t *plan) { + free_memory_hold_by_effects(plan->effects, plan->count); p_delete(&plan->effects); plan->count = 0; plan->capacity = 0;