fix(core): 补全窗口属性变更通知

This commit is contained in:
2026-06-16 19:00:19 +08:00
parent 6f1421f5b5
commit 195733e008

View File

@@ -558,9 +558,11 @@ static void route_window_remove(
} }
static void route_window_metadata_changed( static void route_window_metadata_changed(
state_t *state, const policy_context_t *ctx,
const window_metadata_change_event_t *e const window_metadata_change_event_t *e
) { ) {
auto state = ctx->state;
auto window = state_window_get(state, e->window); auto window = state_window_get(state, e->window);
if (!window) return; if (!window) return;
@@ -582,6 +584,7 @@ static void route_window_metadata_changed(
if (e->changed_fields & ZDWM_WINDOW_METADATA_CHANGE_INSTANCE) { if (e->changed_fields & ZDWM_WINDOW_METADATA_CHANGE_INSTANCE) {
state_window_set_instance(state, window_id, metadata->instance_name); 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( static void route_window_activate_request(
@@ -683,7 +686,7 @@ void policy_route_event(
route_window_remove(state, &event->as.window_remove, out); route_window_remove(state, &event->as.window_remove, out);
break; break;
case ZDWM_EVENT_WINDOW_METADATA_CHANGED: 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; break;
case ZDWM_EVENT_WINDOW_ACTIVATE_REQUEST: { case ZDWM_EVENT_WINDOW_ACTIVATE_REQUEST: {
auto data = &event->as.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 (output->current_workspace_id != workspace_id) return;
if (old_focused_window != workspace->focused_window_id) { auto focused_window_id = workspace->focused_window_id;
plan_push_focus_effect(plan, 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); plan_push_focus_effect(plan, workspace->focused_window_id);
listeners_notify_window_updated(ctx->listeners, state, window); 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) { static void kill_window(state_t *state, window_id_t window, plan_t *plan) {