fix(core): 补全窗口属性变更通知
This commit is contained in:
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user