diff options
Diffstat (limited to 'src/desktop')
-rw-r--r-- | src/desktop/LayerRule.hpp | 15 | ||||
-rw-r--r-- | src/desktop/Rule.cpp | 16 | ||||
-rw-r--r-- | src/desktop/Rule.hpp | 21 | ||||
-rw-r--r-- | src/desktop/WindowRule.hpp | 17 |
4 files changed, 48 insertions, 21 deletions
diff --git a/src/desktop/LayerRule.hpp b/src/desktop/LayerRule.hpp index 117fa6fb..8cdb332e 100644 --- a/src/desktop/LayerRule.hpp +++ b/src/desktop/LayerRule.hpp @@ -2,12 +2,7 @@ #include <string> #include <cstdint> -#include <memory> - -//NOLINTNEXTLINE -namespace re2 { - class RE2; -}; +#include "Rule.hpp" class CLayerRule { public: @@ -27,10 +22,10 @@ class CLayerRule { RULE_ZUMBA, }; - eRuleType ruleType = RULE_INVALID; + eRuleType ruleType = RULE_INVALID; - const std::string targetNamespace; - const std::string rule; + const std::string targetNamespace; + const std::string rule; - std::unique_ptr<re2::RE2> rTargetNamespaceRegex; + CRuleRegexContainer targetNamespaceRegex; };
\ No newline at end of file diff --git a/src/desktop/Rule.cpp b/src/desktop/Rule.cpp new file mode 100644 index 00000000..dd1848d4 --- /dev/null +++ b/src/desktop/Rule.cpp @@ -0,0 +1,16 @@ +#include "Rule.hpp" +#include <re2/re2.h> + +CRuleRegexContainer::CRuleRegexContainer(const std::string& regex_) { + const bool NEGATIVE = regex_.starts_with("negative:"); + + negative = NEGATIVE; + regex = std::make_unique<RE2>(NEGATIVE ? regex_.substr(9) : regex_); +} + +bool CRuleRegexContainer::passes(const std::string& str) const { + if (!regex) + return false; + + return RE2::FullMatch(str, *regex) != negative; +}
\ No newline at end of file diff --git a/src/desktop/Rule.hpp b/src/desktop/Rule.hpp new file mode 100644 index 00000000..4b178ee8 --- /dev/null +++ b/src/desktop/Rule.hpp @@ -0,0 +1,21 @@ +#pragma once + +#include <memory> + +//NOLINTNEXTLINE +namespace re2 { + class RE2; +}; + +class CRuleRegexContainer { + public: + CRuleRegexContainer() = default; + + CRuleRegexContainer(const std::string& regex); + + bool passes(const std::string& str) const; + + private: + std::unique_ptr<re2::RE2> regex; + bool negative = false; +};
\ No newline at end of file diff --git a/src/desktop/WindowRule.hpp b/src/desktop/WindowRule.hpp index 3ce31179..be9c2d9c 100644 --- a/src/desktop/WindowRule.hpp +++ b/src/desktop/WindowRule.hpp @@ -2,12 +2,7 @@ #include <string> #include <cstdint> -#include <memory> - -//NOLINTNEXTLINE -namespace re2 { - class RE2; -}; +#include "Rule.hpp" class CWindowRule { public: @@ -65,9 +60,9 @@ class CWindowRule { std::string szWorkspace = ""; // empty means any // precompiled regexes - std::unique_ptr<re2::RE2> rTitle; - std::unique_ptr<re2::RE2> rClass; - std::unique_ptr<re2::RE2> rInitialTitle; - std::unique_ptr<re2::RE2> rInitialClass; - std::unique_ptr<re2::RE2> rV1Regex; + CRuleRegexContainer rTitle; + CRuleRegexContainer rClass; + CRuleRegexContainer rInitialTitle; + CRuleRegexContainer rInitialClass; + CRuleRegexContainer rV1Regex; };
\ No newline at end of file |