summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--desktop-wayland/patches/gui-wm/hikari/0001-Pick-highest-refresh-rate-for-preferred-resolution.patch45
1 files changed, 45 insertions, 0 deletions
diff --git a/desktop-wayland/patches/gui-wm/hikari/0001-Pick-highest-refresh-rate-for-preferred-resolution.patch b/desktop-wayland/patches/gui-wm/hikari/0001-Pick-highest-refresh-rate-for-preferred-resolution.patch
new file mode 100644
index 0000000..ab707ea
--- /dev/null
+++ b/desktop-wayland/patches/gui-wm/hikari/0001-Pick-highest-refresh-rate-for-preferred-resolution.patch
@@ -0,0 +1,45 @@
+From b15060d4191fde43e599e1fdf1beaf4a1d238075 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Wolfgang=20M=C3=BCller?= <wolf@oriole.systems>
+Date: Sun, 15 May 2022 18:20:38 +0200
+Subject: [PATCH] Pick highest refresh rate for preferred resolution
+
+When configuring an output, hikari uses the first mode it finds. This
+means that we may not end up with the highest refresh rate for a given
+resolution. Since we usually want to make use of higher refresh rates,
+find the monitor's preferred resolution and pick a corresponding mode
+with the highest refresh rate.
+---
+ src/output.c | 17 +++++++++++++----
+ 1 file changed, 13 insertions(+), 4 deletions(-)
+
+diff --git a/src/output.c b/src/output.c
+index 5b0fd56..b2a7dc6 100644
+--- a/src/output.c
++++ b/src/output.c
+@@ -254,10 +254,19 @@ hikari_output_init(struct hikari_output *output, struct wlr_output *wlr_output)
+ output->damage_destroy.notify = damage_destroy_handler;
+ wl_signal_add(&output->damage->events.destroy, &output->damage_destroy);
+
+- if (!wl_list_empty(&wlr_output->modes)) {
+- struct wlr_output_mode *mode =
+- wl_container_of(wlr_output->modes.next, mode, link);
+- wlr_output_set_mode(wlr_output, mode);
++ struct wlr_output_mode *preferred = wlr_output_preferred_mode(wlr_output);
++
++ if (preferred) {
++ struct wlr_output_mode *mode, *best = preferred;
++
++ wl_list_for_each(mode, &wlr_output->modes, link) {
++ if (mode->width == preferred->width &&
++ mode->height == preferred->height &&
++ mode->refresh > best->refresh)
++ best = mode;
++ }
++
++ wlr_output_set_mode(wlr_output, best);
+ }
+
+ wl_list_init(&output->damage_frame.link);
+--
+2.35.1
+