ref:4b74548578ae1812e69580d4b291f7726c7ecb1e

fix(linux/kms): use same methodology for display name matching and list generation (#5448)

SHA: 4b74548578ae1812e69580d4b291f7726c7ecb1e
Author: Kishi <41839133+Kishi85@users.noreply.github.com>
Date: 2026-07-26 00:06
Parents: c19ad3d
1 files changed +4 -11
Type
src/platform/linux/kmsgrab.cpp +4 −11
@@ -860,19 +860,11 @@
if (display_name.empty() || std::ranges::all_of(display_name, ::isdigit)) {
return util::from_view(display_name);
}
// display_name is a connector name (not empty and containing non-digits) try to resolve correct monitor index like correlate_wayland does
auto index_begin = display_name.find_last_of('-');
std::int64_t index;
if (index_begin == std::string_view::npos) {
index = 1;
} else {
index = std::max<int64_t>(1, util::from_view(display_name.substr(index_begin + 1)));
// display_name is a connector name (not empty and containing non-digits)
}
auto type = kms::from_view(display_name.substr(0, index_begin));
for (auto &card_descriptor : kms::card_descriptors) {
for (const auto &monitor_descriptor : card_descriptor.crtc_to_monitor | std::views::values) {
if (display_name == std::format("{}-{}", drmModeGetConnectorTypeName(monitor_descriptor.type), monitor_descriptor.index)) {
BOOST_LOG(info) << "Mapped '"sv << display_name << "' to kmsgrab monitor index " << monitor_descriptor.monitor_index;
if (monitor_descriptor.type == type && monitor_descriptor.index == index) {
BOOST_LOG(debug) << "Mapped '"sv << display_name << "' to a monitor index " << monitor_descriptor.monitor_index;
return monitor_descriptor.monitor_index;
}
}
@@ -2171,5 +2163,6 @@
kms::card_descriptors = std::move(cds);
BOOST_LOG(debug) << "Final KMS display_names return list: " << (display_names | std::views::join_with(' ') | std::ranges::to<std::string>());
return display_names;
}