diff --git a/include/sway/server.h b/include/sway/server.h index ccf4a9cc2..32d686c8a 100644 --- a/include/sway/server.h +++ b/include/sway/server.h @@ -46,6 +46,7 @@ struct sway_server { struct wl_listener new_output; struct wl_listener renderer_lost; + struct wl_listener session_active; struct wlr_idle_notifier_v1 *idle_notifier_v1; struct sway_idle_inhibit_manager_v1 idle_inhibit_manager_v1; @@ -162,6 +163,7 @@ void server_run(struct sway_server *server); void restore_nofile_limit(void); +void handle_session_active(struct wl_listener *listener, void *data); void handle_new_output(struct wl_listener *listener, void *data); void handle_idle_inhibitor_v1(struct wl_listener *listener, void *data); diff --git a/sway/desktop/output.c b/sway/desktop/output.c index 18a04c090..422154c2c 100644 --- a/sway/desktop/output.c +++ b/sway/desktop/output.c @@ -473,6 +473,16 @@ static void handle_request_state(struct wl_listener *listener, void *data) { } } +void handle_session_active(struct wl_listener *listener, void *data) { + if (server.session->active) { + apply_stored_output_configs(); + if (server.delayed_modeset != NULL) { + wl_event_source_remove(server.delayed_modeset); + server.delayed_modeset = NULL; + } + } +} + static unsigned int last_headless_num = 0; void handle_new_output(struct wl_listener *listener, void *data) { diff --git a/sway/server.c b/sway/server.c index e091d9464..41c93aeb1 100644 --- a/sway/server.c +++ b/sway/server.c @@ -6,6 +6,7 @@ #include #include #include +#include #include #include #include @@ -278,6 +279,9 @@ bool server_init(struct sway_server *server) { wlr_scene_set_gamma_control_manager_v1(root->root_scene, server->gamma_control_manager_v1); + server->session_active.notify = handle_session_active; + wl_signal_add(&server->session->events.active, &server->session_active); + server->new_output.notify = handle_new_output; wl_signal_add(&server->backend->events.new_output, &server->new_output);