From 1a6f961de2eff84e4725255f09d33395c4a52fcc Mon Sep 17 00:00:00 2001 From: Philip Damianik <39028343+pdamianik@users.noreply.github.com> Date: Sat, 9 Sep 2023 13:25:17 +0200 Subject: [PATCH] hyprctl: Make device configs queryable (#3226) * Make device configs queryable Signed-off-by: pdamianik <39028343+pdamianik@users.noreply.github.com> * Add set property to getoption output --------- Signed-off-by: pdamianik <39028343+pdamianik@users.noreply.github.com> --- src/config/ConfigManager.cpp | 28 ++++++++++++++++++++++------ src/debug/HyprCtl.cpp | 9 +++++---- 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index b9aedd13..8370eeec 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -2015,20 +2015,36 @@ SConfigValue* CConfigManager::getConfigValuePtr(const std::string& val) { } SConfigValue* CConfigManager::getConfigValuePtrSafe(const std::string& val) { - const auto IT = configValues.find(val); + if (val.starts_with("device:")) { + const auto DEVICE = val.substr(7, val.find_last_of(':') - 7); + const auto CONFIGVAR = val.substr(val.find_last_of(':') + 1); - if (IT == configValues.end()) { - // maybe plugin + const auto DEVICECONF = deviceConfigs.find(DEVICE); + if (DEVICECONF == deviceConfigs.end()) + return nullptr; + + const auto IT = DEVICECONF->second.find(CONFIGVAR); + + if (IT == DEVICECONF->second.end()) + return nullptr; + + return &IT->second; + } else if (val.starts_with("plugin:")) { for (auto& [pl, pMap] : pluginConfigs) { - const auto PLIT = pMap->find(val); + const auto IT = pMap->find(val); - if (PLIT != pMap->end()) - return &PLIT->second; + if (IT != pMap->end()) + return &IT->second; } return nullptr; } + const auto IT = configValues.find(val); + + if (IT == configValues.end()) + return nullptr; + return &(IT->second); } diff --git a/src/debug/HyprCtl.cpp b/src/debug/HyprCtl.cpp index 51dbe0ba..ec605c15 100644 --- a/src/debug/HyprCtl.cpp +++ b/src/debug/HyprCtl.cpp @@ -1039,8 +1039,8 @@ std::string dispatchGetOption(std::string request, HyprCtl::eHyprCtlOutputFormat return "no such option"; if (format == HyprCtl::eHyprCtlOutputFormat::FORMAT_NORMAL) - return getFormat("option {}\n\tint: {}\n\tfloat: {:.5f}\n\tstr: \"{}\"\n\tdata: {:x}", curitem, PCFGOPT->intValue, PCFGOPT->floatValue, PCFGOPT->strValue, - (uintptr_t)PCFGOPT->data.get()); + return getFormat("option {}\n\tint: {}\n\tfloat: {:.5f}\n\tstr: \"{}\"\n\tdata: {:x}\n\tset: {}", curitem, PCFGOPT->intValue, PCFGOPT->floatValue, PCFGOPT->strValue, + (uintptr_t)PCFGOPT->data.get(), PCFGOPT->set); else { return getFormat( R"#( @@ -1049,10 +1049,11 @@ std::string dispatchGetOption(std::string request, HyprCtl::eHyprCtlOutputFormat "int": {}, "float": {:.5f}, "str": "{}", - "data": "0x{:x}" + "data": "0x{:x}", + "set": {} }} )#", - curitem, PCFGOPT->intValue, PCFGOPT->floatValue, PCFGOPT->strValue, (uintptr_t)PCFGOPT->data.get()); + curitem, PCFGOPT->intValue, PCFGOPT->floatValue, PCFGOPT->strValue, (uintptr_t)PCFGOPT->data.get(), PCFGOPT->set); } }