aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFurkan Sahin <furkan-dev@proton.me>2024-11-11 12:16:44 +0100
committerFurkan Sahin <furkan-dev@proton.me>2024-11-11 12:16:44 +0100
commit37e6179e605ecc98f43e6da8b3bb73f8dd68d4c4 (patch)
tree522338b0407bfa272a089418c6ee5eca07f2128a
parent13f84ab14838cd73d09cf6c3696203b12c8dfe76 (diff)
config: Force modeset before running deferred configs
Some commands require outputs to be enabled. These commands are deferred to allow outputs to be discovered, but the delayed modeset might only run some time later. Force a modeset to occur before running deferred commands. Fixes: https://github.com/swaywm/sway/issues/8433
-rw-r--r--include/sway/config.h1
-rw-r--r--sway/desktop/output.c14
-rw-r--r--sway/main.c1
3 files changed, 11 insertions, 5 deletions
diff --git a/include/sway/config.h b/include/sway/config.h
index 71721393..013853c8 100644
--- a/include/sway/config.h
+++ b/include/sway/config.h
@@ -705,6 +705,7 @@ struct output_config *find_output_config(struct sway_output *output);
void free_output_config(struct output_config *oc);
void request_modeset(void);
+void force_modeset(void);
bool spawn_swaybg(void);
diff --git a/sway/desktop/output.c b/sway/desktop/output.c
index 8682cc65..5c2332ce 100644
--- a/sway/desktop/output.c
+++ b/sway/desktop/output.c
@@ -408,6 +408,14 @@ void request_modeset(void) {
}
}
+void force_modeset(void) {
+ if (server.delayed_modeset != NULL) {
+ wl_event_source_remove(server.delayed_modeset);
+ server.delayed_modeset = NULL;
+ }
+ apply_stored_output_configs();
+}
+
static void begin_destroy(struct sway_output *output) {
if (output->enabled) {
output_disable(output);
@@ -493,12 +501,8 @@ static void handle_request_state(struct wl_listener *listener, void *data) {
// We do not expect or support any other changes here
assert(committed == 0);
store_output_config(oc);
- apply_stored_output_configs();
- if (server.delayed_modeset != NULL) {
- wl_event_source_remove(server.delayed_modeset);
- server.delayed_modeset = NULL;
- }
+ force_modeset();
}
static unsigned int last_headless_num = 0;
diff --git a/sway/main.c b/sway/main.c
index 1c4939aa..165ccc09 100644
--- a/sway/main.c
+++ b/sway/main.c
@@ -361,6 +361,7 @@ int main(int argc, char **argv) {
}
config->active = true;
+ force_modeset();
load_swaybars();
run_deferred_commands();
run_deferred_bindings();