From 1fc1e4e9cbc2569eb4d3841f22020f35e9642f12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Conzelmann?= <45296195+zephvr@users.noreply.github.com> Date: Thu, 30 Nov 2023 02:48:10 +0100 Subject: [PATCH] monitor: remove comma from monitor description (#3996) this allows for monitor specific rules to work on monitor with comma on their description fixes #2457 --- src/Compositor.cpp | 4 ++-- src/config/ConfigManager.cpp | 4 ++-- src/debug/HyprCtl.cpp | 4 ++-- src/helpers/Monitor.cpp | 6 +++++- src/helpers/Monitor.hpp | 1 + src/managers/KeybindManager.cpp | 2 +- 6 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/Compositor.cpp b/src/Compositor.cpp index 5adfea86..a842bb6b 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -574,7 +574,7 @@ CMonitor* CCompositor::getMonitorFromName(const std::string& name) { CMonitor* CCompositor::getMonitorFromDesc(const std::string& desc) { for (auto& m : m_vMonitors) { - if (m->output->description && std::string(m->output->description).starts_with(desc)) + if (m->szDescription.starts_with(desc)) return m.get(); } return nullptr; @@ -2059,7 +2059,7 @@ CMonitor* CCompositor::getMonitorFromString(const std::string& name) { if (!m->output) continue; - if (m->output->description && std::string(m->output->description).starts_with(DESCRIPTION)) { + if (m->szDescription.starts_with(DESCRIPTION)) { return m.get(); } } diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index 07c1f51f..257446ee 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -2082,7 +2082,7 @@ void CConfigManager::performMonitorReload() { if (!m->output || m->isUnsafeFallback) continue; - auto rule = getMonitorRuleFor(m->szName, m->output->description ? m->output->description : ""); + auto rule = getMonitorRuleFor(m->szName, m->szDescription); if (!g_pHyprRenderer->applyMonitorRule(m.get(), &rule)) { overAgain = true; @@ -2163,7 +2163,7 @@ void CConfigManager::ensureMonitorStatus() { if (!rm->output || rm->isUnsafeFallback) continue; - auto rule = getMonitorRuleFor(rm->szName, rm->output->description ? rm->output->description : ""); + auto rule = getMonitorRuleFor(rm->szName, rm->szDescription); if (rule.disabled == rm->m_bEnabled) g_pHyprRenderer->applyMonitorRule(rm.get(), &rule); diff --git a/src/debug/HyprCtl.cpp b/src/debug/HyprCtl.cpp index 9745a0fe..91bbe264 100644 --- a/src/debug/HyprCtl.cpp +++ b/src/debug/HyprCtl.cpp @@ -75,7 +75,7 @@ std::string monitorsRequest(std::string request, HyprCtl::eHyprCtlOutputFormat f "vrr": {}, "activelyTearing": {} }},)#", - m->ID, escapeJSONStrings(m->szName), escapeJSONStrings(m->output->description ? m->output->description : ""), (m->output->make ? m->output->make : ""), + m->ID, escapeJSONStrings(m->szName), escapeJSONStrings(m->szDescription), (m->output->make ? m->output->make : ""), (m->output->model ? m->output->model : ""), (m->output->serial ? m->output->serial : ""), (int)m->vecPixelSize.x, (int)m->vecPixelSize.y, m->refreshRate, (int)m->vecPosition.x, (int)m->vecPosition.y, m->activeWorkspace, (m->activeWorkspace == -1 ? "" : escapeJSONStrings(g_pCompositor->getWorkspaceByID(m->activeWorkspace)->m_szName)), m->specialWorkspaceID, @@ -99,7 +99,7 @@ std::string monitorsRequest(std::string request, HyprCtl::eHyprCtlOutputFormat f "{} {} {}\n\tscale: {:.2f}\n\ttransform: " "{}\n\tfocused: {}\n\tdpmsStatus: {}\n\tvrr: {}\n\tactivelyTearing: {}\n\n", m->szName, m->ID, (int)m->vecPixelSize.x, (int)m->vecPixelSize.y, m->refreshRate, (int)m->vecPosition.x, (int)m->vecPosition.y, - (m->output->description ? m->output->description : ""), (m->output->make ? m->output->make : ""), (m->output->model ? m->output->model : ""), + m->szDescription, (m->output->make ? m->output->make : ""), (m->output->model ? m->output->model : ""), (m->output->serial ? m->output->serial : ""), m->activeWorkspace, (m->activeWorkspace == -1 ? "" : g_pCompositor->getWorkspaceByID(m->activeWorkspace)->m_szName), m->specialWorkspaceID, getWorkspaceNameFromSpecialID(m->specialWorkspaceID), (int)m->vecReservedTopLeft.x, (int)m->vecReservedTopLeft.y, (int)m->vecReservedBottomRight.x, (int)m->vecReservedBottomRight.y, m->scale, (int)m->transform, (m.get() == g_pCompositor->m_pLastMonitor ? "yes" : "no"), diff --git a/src/helpers/Monitor.cpp b/src/helpers/Monitor.cpp index f626bb3d..c1ae3503 100644 --- a/src/helpers/Monitor.cpp +++ b/src/helpers/Monitor.cpp @@ -50,6 +50,10 @@ void CMonitor::onConnect(bool noRule) { szName = output->name; + szDescription = output->description ? output->description : ""; + // remove comma character from description. This allow monitor specific rules to work on monitor with comma on their description + szDescription.erase(std::remove(szDescription.begin(), szDescription.end(), ','), szDescription.end()); + if (!wlr_backend_is_drm(output->backend)) createdByUser = true; // should be true. WL, X11 and Headless backends should be addable / removable @@ -651,4 +655,4 @@ void CMonitor::updateMatrix() { wlr_matrix_transform(projMatrix.data(), transform); wlr_matrix_translate(projMatrix.data(), -vecTransformedSize.x / 2.0, -vecTransformedSize.y / 2.0); } -} \ No newline at end of file +} diff --git a/src/helpers/Monitor.hpp b/src/helpers/Monitor.hpp index f354ca6d..7621ac17 100644 --- a/src/helpers/Monitor.hpp +++ b/src/helpers/Monitor.hpp @@ -43,6 +43,7 @@ class CMonitor { float scale = 1; std::string szName = ""; + std::string szDescription = ""; Vector2D vecReservedTopLeft = Vector2D(0, 0); Vector2D vecReservedBottomRight = Vector2D(0, 0); diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp index 986de55e..11e2fa02 100644 --- a/src/managers/KeybindManager.cpp +++ b/src/managers/KeybindManager.cpp @@ -1473,7 +1473,7 @@ void CKeybindManager::forceRendererReload(std::string args) { if (!m->output) continue; - auto rule = g_pConfigManager->getMonitorRuleFor(m->szName, m->output->description ? m->output->description : ""); + auto rule = g_pConfigManager->getMonitorRuleFor(m->szName, m->szDescription); if (!g_pHyprRenderer->applyMonitorRule(m.get(), &rule, true)) { overAgain = true; break;