diff options
Diffstat (limited to 'sway')
-rw-r--r-- | sway/config/output.c | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/sway/config/output.c b/sway/config/output.c index 7d0ed395..6224fc10 100644 --- a/sway/config/output.c +++ b/sway/config/output.c | |||
@@ -357,8 +357,26 @@ static void queue_output_config(struct output_config *oc, | |||
357 | set_mode(wlr_output, oc->width, oc->height, | 357 | set_mode(wlr_output, oc->width, oc->height, |
358 | oc->refresh_rate, oc->custom_mode == 1); | 358 | oc->refresh_rate, oc->custom_mode == 1); |
359 | } else if (!wl_list_empty(&wlr_output->modes)) { | 359 | } else if (!wl_list_empty(&wlr_output->modes)) { |
360 | struct wlr_output_mode *mode = wlr_output_preferred_mode(wlr_output); | 360 | sway_log(SWAY_DEBUG, "Set preferred mode"); |
361 | wlr_output_set_mode(wlr_output, mode); | 361 | struct wlr_output_mode *preferred_mode = |
362 | wlr_output_preferred_mode(wlr_output); | ||
363 | wlr_output_set_mode(wlr_output, preferred_mode); | ||
364 | |||
365 | if (!wlr_output_test(wlr_output)) { | ||
366 | sway_log(SWAY_DEBUG, "Preferred mode rejected, " | ||
367 | "falling back to another mode"); | ||
368 | struct wlr_output_mode *mode; | ||
369 | wl_list_for_each(mode, &wlr_output->modes, link) { | ||
370 | if (mode == preferred_mode) { | ||
371 | continue; | ||
372 | } | ||
373 | |||
374 | wlr_output_set_mode(wlr_output, mode); | ||
375 | if (wlr_output_test(wlr_output)) { | ||
376 | break; | ||
377 | } | ||
378 | } | ||
379 | } | ||
362 | } | 380 | } |
363 | 381 | ||
364 | if (oc && (oc->subpixel != WL_OUTPUT_SUBPIXEL_UNKNOWN || config->reloading)) { | 382 | if (oc && (oc->subpixel != WL_OUTPUT_SUBPIXEL_UNKNOWN || config->reloading)) { |