ref:3dfbfe0906cf5970f84b96a1451451eaa2ab1fab

fix(wayland): use the current wl_output mode (#5150)

Signed-off-by: Zach Denton <z@chdenton.com> Co-authored-by: ReenigneArcher <42013603+ReenigneArcher@users.noreply.github.com>
SHA: 3dfbfe0906cf5970f84b96a1451451eaa2ab1fab
Author: Zach Denton <z@chdenton.com>
Date: 2026-08-21 03:00
Parents: ebc4f96
2 files changed +37 -3
Type
src/platform/linux/wayland.cpp +7 −3
@@ -114,7 +114,7 @@
return wl_display_get_registry(display_internal.get());
}
inline monitor_t::monitor_t(wl_output *output):
monitor_t::monitor_t(wl_output *output):
output {output},
wl_listener {
&CLASS_CALL(monitor_t, wl_geometry),
@@ -163,10 +163,14 @@
std::int32_t height,
std::int32_t refresh
) {
BOOST_LOG(info) << "[wayland] Resolution: "sv << width << 'x' << height;
if (!(flags & WL_OUTPUT_MODE_CURRENT)) {
return;
}
viewport.width = width;
viewport.height = height;
BOOST_LOG(info) << "[wayland] Resolution: "sv << width << 'x' << height;
}
void monitor_t::listen(zxdg_output_manager_v1 *output_manager) {
tests/unit/platform/linux/test_wayland.cpp +30 −0
@@ -1,0 +1,30 @@
/**
* @file tests/unit/platform/linux/test_wayland.cpp
* @brief Test Wayland output mode selection.
*/
#ifdef SUNSHINE_BUILD_WAYLAND
#include "../../../tests_common.h"
#include <src/platform/linux/wayland.h>
TEST(WaylandMonitorTest, IgnoresNonCurrentModesAroundCurrentMode) {
wl::monitor_t monitor {nullptr};
monitor.wl_mode(nullptr, WL_OUTPUT_MODE_PREFERRED, 1280, 720, 60000);
monitor.wl_mode(nullptr, WL_OUTPUT_MODE_CURRENT, 1920, 1080, 60000);
monitor.wl_mode(nullptr, 0, 2560, 1440, 60000);
EXPECT_EQ(monitor.viewport.width, 1920);
EXPECT_EQ(monitor.viewport.height, 1080);
}
TEST(WaylandMonitorTest, UpdatesCurrentMode) {
wl::monitor_t monitor {nullptr};
monitor.wl_mode(nullptr, WL_OUTPUT_MODE_CURRENT | WL_OUTPUT_MODE_PREFERRED, 1920, 1080, 60000);
monitor.wl_mode(nullptr, WL_OUTPUT_MODE_CURRENT, 2560, 1440, 120000);
EXPECT_EQ(monitor.viewport.width, 2560);
EXPECT_EQ(monitor.viewport.height, 1440);
}
#endif