From ffd6cf65e40a7140e82dc6e076c90b5119d41a54 Mon Sep 17 00:00:00 2001 From: MightyPlaza <123664421+MightyPlaza@users.noreply.github.com> Date: Tue, 15 Apr 2025 23:00:40 +0000 Subject: windowrules: allow incrementing window props (#9566) --- src/desktop/Window.hpp | 97 +++++--------------------------------------------- 1 file changed, 8 insertions(+), 89 deletions(-) (limited to 'src/desktop/Window.hpp') diff --git a/src/desktop/Window.hpp b/src/desktop/Window.hpp index b314eca5..f592aed6 100644 --- a/src/desktop/Window.hpp +++ b/src/desktop/Window.hpp @@ -19,6 +19,7 @@ #include "WLSurface.hpp" #include "Workspace.hpp" #include "WindowRule.hpp" +#include "WindowOverridableVar.hpp" #include "../protocols/types/ContentType.hpp" class CXDGSurfaceResource; @@ -77,88 +78,6 @@ struct SAlphaValue { }; }; -enum eOverridePriority : uint8_t { - PRIORITY_LAYOUT = 0, - PRIORITY_WORKSPACE_RULE, - PRIORITY_WINDOW_RULE, - PRIORITY_SET_PROP, -}; - -template -class CWindowOverridableVar { - public: - CWindowOverridableVar(T const& value, eOverridePriority priority) { - values[priority] = value; - } - CWindowOverridableVar(T const& value) : defaultValue{value} {} - - CWindowOverridableVar() = default; - ~CWindowOverridableVar() = default; - - CWindowOverridableVar& operator=(CWindowOverridableVar const& other) { - // Self-assignment check - if (this == &other) - return *this; - - for (auto const& value : other.values) { - values[value.first] = value.second; - } - - return *this; - } - - void unset(eOverridePriority priority) { - values.erase(priority); - } - - bool hasValue() { - return !values.empty(); - } - - T value() { - if (!values.empty()) - return std::prev(values.end())->second; - else - throw std::bad_optional_access(); - } - - T valueOr(T const& other) { - if (hasValue()) - return value(); - else - return other; - } - - T valueOrDefault() { - return valueOr(defaultValue); - } - - eOverridePriority getPriority() { - if (!values.empty()) - return std::prev(values.end())->first; - else - throw std::bad_optional_access(); - } - - void matchOptional(std::optional const& optValue, eOverridePriority priority) { - if (optValue.has_value()) - values[priority] = optValue.value(); - else - unset(priority); - } - - operator std::optional() { - if (hasValue()) - return value(); - else - return std::nullopt; - } - - private: - std::map values; - T defaultValue; // used for toggling, so required for bool -}; - struct SWindowData { CWindowOverridableVar alpha = SAlphaValue{1.f, false}; CWindowOverridableVar alphaInactive = SAlphaValue{1.f, false}; @@ -186,12 +105,12 @@ struct SWindowData { CWindowOverridableVar xray = false; CWindowOverridableVar renderUnfocused = false; - CWindowOverridableVar rounding; - CWindowOverridableVar roundingPower; - CWindowOverridableVar borderSize; + CWindowOverridableVar borderSize = {std::string("general:border_size"), Hyprlang::INT(0), std::nullopt}; + CWindowOverridableVar rounding = {std::string("decoration:rounding"), Hyprlang::INT(0), std::nullopt}; - CWindowOverridableVar scrollMouse; - CWindowOverridableVar scrollTouchpad; + CWindowOverridableVar roundingPower = {std::string("decoration:rounding_power")}; + CWindowOverridableVar scrollMouse = {std::string("input:scroll_factor")}; + CWindowOverridableVar scrollTouchpad = {std::string("input:touchpad:scroll_factor")}; CWindowOverridableVar animationStyle; CWindowOverridableVar maxSize; @@ -567,12 +486,12 @@ namespace NWindowProperties { {"xray", [](const PHLWINDOW& pWindow) { return &pWindow->m_sWindowData.xray; }}, }; - const std::unordered_map*(const PHLWINDOW&)>> intWindowProperties = { + const std::unordered_map*(const PHLWINDOW&)>> intWindowProperties = { {"rounding", [](const PHLWINDOW& pWindow) { return &pWindow->m_sWindowData.rounding; }}, {"bordersize", [](const PHLWINDOW& pWindow) { return &pWindow->m_sWindowData.borderSize; }}, }; - const std::unordered_map*(PHLWINDOW)>> floatWindowProperties = { + const std::unordered_map*(PHLWINDOW)>> floatWindowProperties = { {"roundingpower", [](const PHLWINDOW& pWindow) { return &pWindow->m_sWindowData.roundingPower; }}, {"scrollmouse", [](const PHLWINDOW& pWindow) { return &pWindow->m_sWindowData.scrollMouse; }}, {"scrolltouchpad", [](const PHLWINDOW& pWindow) { return &pWindow->m_sWindowData.scrollTouchpad; }}, -- cgit v1.2.3