From 916eb1a2135b22651774df1c43b1f03d6e790e05 Mon Sep 17 00:00:00 2001 From: Joey Yakimowich-Payne Date: Wed, 11 Feb 2026 15:25:48 -0700 Subject: [PATCH] Support Wayland monitor selection by connector name --- src/platform/linux/wlgrab.cpp | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/src/platform/linux/wlgrab.cpp b/src/platform/linux/wlgrab.cpp index 9ef3e09f..c989d849 100644 --- a/src/platform/linux/wlgrab.cpp +++ b/src/platform/linux/wlgrab.cpp @@ -3,6 +3,7 @@ * @brief Definitions for wlgrab capture. */ // standard includes +#include #include // local includes @@ -57,6 +58,30 @@ namespace wl { if (streamedMonitor >= 0 && streamedMonitor < interface.monitors.size()) { monitor = interface.monitors[streamedMonitor].get(); + } else { + auto by_name = std::find_if( + std::begin(interface.monitors), + std::end(interface.monitors), + [&display_name](const auto &candidate) { + return candidate->name == display_name; + }); + + if (by_name != std::end(interface.monitors)) { + monitor = by_name->get(); + } else { + auto by_description = std::find_if( + std::begin(interface.monitors), + std::end(interface.monitors), + [&display_name](const auto &candidate) { + return candidate->description == display_name; + }); + + if (by_description != std::end(interface.monitors)) { + monitor = by_description->get(); + } else { + BOOST_LOG(warning) << "No Wayland monitor matched output_name='"sv << display_name << "'; falling back to monitor 0"sv; + } + } } } @@ -431,8 +456,12 @@ namespace platf { BOOST_LOG(info) << "Monitor " << x << " is "sv << monitor->name << ": "sv << monitor->description; - display_names.emplace_back(std::to_string(x)); - } + if (!monitor->name.empty()) { + display_names.emplace_back(monitor->name); + } else { + display_names.emplace_back(std::to_string(x)); + } + } BOOST_LOG(info) << "--------- End of Wayland monitor list ---------"sv;