From 195733e0088060ba3e28fadb086c2ea9d86a662d Mon Sep 17 00:00:00 2001 From: Zedhugh Chen Date: Tue, 16 Jun 2026 19:00:19 +0800 Subject: [PATCH] =?UTF-8?q?fix(core):=20=E8=A1=A5=E5=85=A8=E7=AA=97?= =?UTF-8?q?=E5=8F=A3=E5=B1=9E=E6=80=A7=E5=8F=98=E6=9B=B4=E9=80=9A=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/core/policy.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/core/policy.c b/src/core/policy.c index f107dac..bf3211e 100644 --- a/src/core/policy.c +++ b/src/core/policy.c @@ -558,9 +558,11 @@ static void route_window_remove( } static void route_window_metadata_changed( - state_t *state, + const policy_context_t *ctx, const window_metadata_change_event_t *e ) { + auto state = ctx->state; + auto window = state_window_get(state, e->window); if (!window) return; @@ -582,6 +584,7 @@ static void route_window_metadata_changed( if (e->changed_fields & ZDWM_WINDOW_METADATA_CHANGE_INSTANCE) { state_window_set_instance(state, window_id, metadata->instance_name); } + listeners_notify_window_updated(ctx->listeners, state, window_id); } static void route_window_activate_request( @@ -683,7 +686,7 @@ void policy_route_event( route_window_remove(state, &event->as.window_remove, out); break; case ZDWM_EVENT_WINDOW_METADATA_CHANGED: - route_window_metadata_changed(state, &event->as.window_metadata_change); + route_window_metadata_changed(ctx, &event->as.window_metadata_change); break; case ZDWM_EVENT_WINDOW_ACTIVATE_REQUEST: { auto data = &event->as.window_activate_request; @@ -857,8 +860,10 @@ unmanage_window(const policy_context_t *ctx, window_id_t window, plan_t *plan) { if (output->current_workspace_id != workspace_id) return; - if (old_focused_window != workspace->focused_window_id) { - plan_push_focus_effect(plan, workspace->focused_window_id); + auto focused_window_id = workspace->focused_window_id; + if (old_focused_window != focused_window_id) { + plan_push_focus_effect(plan, focused_window_id); + listeners_notify_window_updated(ctx->listeners, state, focused_window_id); } } @@ -877,6 +882,7 @@ focus_window(const policy_context_t *ctx, window_id_t window, plan_t *plan) { plan_push_focus_effect(plan, workspace->focused_window_id); listeners_notify_window_updated(ctx->listeners, state, window); + listeners_notify_window_updated(ctx->listeners, state, old_focused_window); } static void kill_window(state_t *state, window_id_t window, plan_t *plan) {