From 2d87bd5ba9d5df62a140067a2a786ad00ecc5b46 Mon Sep 17 00:00:00 2001 From: Viktar Lukashonak Date: Thu, 23 Jul 2026 11:58:35 +0300 Subject: [PATCH] Drop mandatory hyprland dependency --- include/modules/hyprland/workspaces.hpp | 6 ++-- include/util/enum.hpp | 28 +++++++++++---- include/util/kill_signal.hpp | 6 ++-- meson.build | 1 - src/bar.cpp | 5 ++- src/modules/hyprland/workspaces.cpp | 4 +-- src/util/enum.cpp | 47 ------------------------- 7 files changed, 30 insertions(+), 67 deletions(-) delete mode 100644 src/util/enum.cpp diff --git a/include/modules/hyprland/workspaces.hpp b/include/modules/hyprland/workspaces.hpp index 1237ef24..c29ec30c 100644 --- a/include/modules/hyprland/workspaces.hpp +++ b/include/modules/hyprland/workspaces.hpp @@ -167,9 +167,8 @@ class Workspaces : public AModule, public EventHandler { std::map> m_orphanWindowMap; enum class SortMethod { ID, NAME, NUMBER, SPECIAL_CENTERED, DEFAULT }; - util::EnumParser m_enumParser; SortMethod m_sortBy = SortMethod::DEFAULT; - std::map m_sortMap = {{"ID", SortMethod::ID}, + static inline const std::map m_sortMap = {{"ID", SortMethod::ID}, {"NAME", SortMethod::NAME}, {"NUMBER", SortMethod::NUMBER}, {"SPECIAL-CENTERED", SortMethod::SPECIAL_CENTERED}, @@ -207,9 +206,8 @@ class Workspaces : public AModule, public EventHandler { int m_taskbarMaxIcons = 0; // 0 means unlimited Gtk::Orientation m_taskbarOrientation = Gtk::ORIENTATION_HORIZONTAL; bool m_taskbarReverseDirection = false; - util::EnumParser m_activeWindowEnumParser; ActiveWindowPosition m_activeWindowPosition = ActiveWindowPosition::NONE; - std::map m_activeWindowPositionMap = { + static inline std::map m_activeWindowPositionMap = { {"NONE", ActiveWindowPosition::NONE}, {"FIRST", ActiveWindowPosition::FIRST}, {"LAST", ActiveWindowPosition::LAST}, diff --git a/include/util/enum.hpp b/include/util/enum.hpp index 681385fd..6780a9e1 100644 --- a/include/util/enum.hpp +++ b/include/util/enum.hpp @@ -1,19 +1,33 @@ #pragma once +#include +#include #include #include #include +#include "util/string.hpp" + namespace waybar::util { template -struct EnumParser { - public: - EnumParser(); - ~EnumParser(); - +//struct EnumParser { EnumType parseStringToEnum(const std::string& str, - const std::map& enumMap); -}; + const std::map& enumMap) { + std::string uppercaseStr = capitalize(str); + std::map capitalizedEnumMap; + std::transform( + enumMap.begin(), enumMap.end(), + std::inserter(capitalizedEnumMap, capitalizedEnumMap.end()), + [](const auto& pair) { + return std::make_pair(capitalize(pair.first), pair.second); + }); + + auto it = capitalizedEnumMap.find(uppercaseStr); + if (it != capitalizedEnumMap.end()) return it->second; + + throw std::invalid_argument("Invalid string representation for enum"); +// } +} } // namespace waybar::util diff --git a/include/util/kill_signal.hpp b/include/util/kill_signal.hpp index 26d156e9..221c554a 100644 --- a/include/util/kill_signal.hpp +++ b/include/util/kill_signal.hpp @@ -13,14 +13,14 @@ enum class KillSignalAction : std::uint8_t { HIDE, NOOP, }; -const std::map userKillSignalActions = { +inline const std::map userKillSignalActions = { {"TOGGLE", KillSignalAction::TOGGLE}, {"RELOAD", KillSignalAction::RELOAD}, {"SHOW", KillSignalAction::SHOW}, {"HIDE", KillSignalAction::HIDE}, {"NOOP", KillSignalAction::NOOP}}; -const KillSignalAction SIGNALACTION_DEFAULT_SIGUSR1 = KillSignalAction::TOGGLE; -const KillSignalAction SIGNALACTION_DEFAULT_SIGUSR2 = KillSignalAction::RELOAD; +inline const KillSignalAction SIGNALACTION_DEFAULT_SIGUSR1 = KillSignalAction::TOGGLE; +inline const KillSignalAction SIGNALACTION_DEFAULT_SIGUSR2 = KillSignalAction::RELOAD; }; // namespace waybar::util diff --git a/meson.build b/meson.build index 63cbe8ed..5dc7338d 100644 --- a/meson.build +++ b/meson.build @@ -185,7 +185,6 @@ src_files = files( 'src/config.cpp', 'src/group.cpp', 'src/util/portal.cpp', - 'src/util/enum.cpp', 'src/util/prepare_for_sleep.cpp', 'src/util/ustring_clen.cpp', 'src/util/sanitize_str.cpp', diff --git a/src/bar.cpp b/src/bar.cpp index c81a7e6e..d84aafed 100644 --- a/src/bar.cpp +++ b/src/bar.cpp @@ -296,13 +296,12 @@ waybar::Bar::Bar(struct waybar_output* w_output, const Json::Value& w_config) } #endif - waybar::util::EnumParser m_signalActionEnumParser; const auto& configSigusr1 = config["on-sigusr1"]; if (configSigusr1.isString()) { auto strSigusr1 = configSigusr1.asString(); try { onSigusr1 = - m_signalActionEnumParser.parseStringToEnum(strSigusr1, util::userKillSignalActions); + util::parseStringToEnum(strSigusr1, util::userKillSignalActions); } catch (const std::invalid_argument& e) { onSigusr1 = util::SIGNALACTION_DEFAULT_SIGUSR1; spdlog::warn( @@ -314,7 +313,7 @@ waybar::Bar::Bar(struct waybar_output* w_output, const Json::Value& w_config) auto strSigusr2 = configSigusr2.asString(); try { onSigusr2 = - m_signalActionEnumParser.parseStringToEnum(strSigusr2, util::userKillSignalActions); + util::parseStringToEnum(strSigusr2, util::userKillSignalActions); } catch (const std::invalid_argument& e) { onSigusr2 = util::SIGNALACTION_DEFAULT_SIGUSR2; spdlog::warn( diff --git a/src/modules/hyprland/workspaces.cpp b/src/modules/hyprland/workspaces.cpp index 202b892b..780e041d 100644 --- a/src/modules/hyprland/workspaces.cpp +++ b/src/modules/hyprland/workspaces.cpp @@ -682,7 +682,7 @@ auto Workspaces::populateSortByConfig(const Json::Value& config) -> void { if (configSortBy.isString()) { auto sortByStr = configSortBy.asString(); try { - m_sortBy = m_enumParser.parseStringToEnum(sortByStr, m_sortMap); + m_sortBy = waybar::util::parseStringToEnum(sortByStr, m_sortMap); } catch (const std::invalid_argument& e) { m_sortBy = SortMethod::DEFAULT; spdlog::warn( @@ -806,7 +806,7 @@ auto Workspaces::populateWorkspaceTaskbarConfig(const Json::Value& config) -> vo auto posStr = workspaceTaskbar["active-window-position"].asString(); try { m_activeWindowPosition = - m_activeWindowEnumParser.parseStringToEnum(posStr, m_activeWindowPositionMap); + util::parseStringToEnum(posStr, m_activeWindowPositionMap); } catch (const std::invalid_argument& e) { spdlog::warn( "Invalid string representation for active-window-position. Falling back to 'none'."); diff --git a/src/util/enum.cpp b/src/util/enum.cpp deleted file mode 100644 index 6b5d5562..00000000 --- a/src/util/enum.cpp +++ /dev/null @@ -1,47 +0,0 @@ -#include "util/enum.hpp" - -#include // for std::transform -#include // for std::toupper -#include -#include -#include -#include - -#include "modules/hyprland/workspaces.hpp" -#include "util/string.hpp" - -namespace waybar::util { - -template -EnumParser::EnumParser() = default; - -template -EnumParser::~EnumParser() = default; - -template -EnumType EnumParser::parseStringToEnum(const std::string& str, - const std::map& enumMap) { - // Convert the input string to uppercase - std::string uppercaseStr = capitalize(str); - - // Capitalize the map keys before searching - std::map capitalizedEnumMap; - std::transform( - enumMap.begin(), enumMap.end(), std::inserter(capitalizedEnumMap, capitalizedEnumMap.end()), - [](const auto& pair) { return std::make_pair(capitalize(pair.first), pair.second); }); - - // Return enum match of string - auto it = capitalizedEnumMap.find(uppercaseStr); - if (it != capitalizedEnumMap.end()) return it->second; - - // Throw error if it doesn't return - throw std::invalid_argument("Invalid string representation for enum"); -} - -// Explicit instantiations for specific EnumType types you intend to use -// Add explicit instantiations for all relevant EnumType types -template struct EnumParser; -template struct EnumParser; -template struct EnumParser; - -} // namespace waybar::util