summaryrefslogtreecommitdiffstats
path: root/dwl-patches/patches/fallback/fallback.patch
diff options
context:
space:
mode:
Diffstat (limited to 'dwl-patches/patches/fallback/fallback.patch')
-rw-r--r--dwl-patches/patches/fallback/fallback.patch44
1 files changed, 44 insertions, 0 deletions
diff --git a/dwl-patches/patches/fallback/fallback.patch b/dwl-patches/patches/fallback/fallback.patch
new file mode 100644
index 0000000..b734625
--- /dev/null
+++ b/dwl-patches/patches/fallback/fallback.patch
@@ -0,0 +1,44 @@
+From a94c52af879027e654f67c36621a8c9b2f338f56 Mon Sep 17 00:00:00 2001
+From: Dima Krasner <dima@dimakrasner.com>
+Date: Sat, 2 Dec 2023 10:36:35 +0200
+Subject: [PATCH] fall back to a lower output mode if needed
+ (swaywm/sway@4cdc4ac)
+
+---
+ dwl.c | 13 ++++++++++++-
+ 1 file changed, 12 insertions(+), 1 deletion(-)
+
+diff --git a/dwl.c b/dwl.c
+index d48bf40..7719f7e 100644
+--- a/dwl.c
++++ b/dwl.c
+@@ -920,6 +920,7 @@ createmon(struct wl_listener *listener, void *data)
+ /* This event is raised by the backend when a new output (aka a display or
+ * monitor) becomes available. */
+ struct wlr_output *wlr_output = data;
++ struct wlr_output_mode *preferred_mode, *mode;
+ const MonitorRule *r;
+ size_t i;
+ struct wlr_output_state state;
+@@ -956,7 +957,17 @@ createmon(struct wl_listener *listener, void *data)
+ * monitor supports only a specific set of modes. We just pick the
+ * monitor's preferred mode; a more sophisticated compositor would let
+ * the user configure it. */
+- wlr_output_state_set_mode(&state, wlr_output_preferred_mode(wlr_output));
++ preferred_mode = wlr_output_preferred_mode(wlr_output);
++ wlr_output_state_set_mode(&state, preferred_mode);
++ if (!wlr_output_test_state(wlr_output, &state) && !wl_list_empty(&wlr_output->modes)) {
++ wl_list_for_each(mode, &wlr_output->modes, link) {
++ if (mode != preferred_mode) {
++ wlr_output_state_set_mode(&state, mode);
++ if (wlr_output_test_state(wlr_output, &state))
++ break;
++ }
++ }
++ }
+
+ /* Set up event listeners */
+ LISTEN(&wlr_output->events.frame, &m->frame, rendermon);
+--
+2.43.0
+