3
0
mirror of https://github.com/hyprwm/Hyprland.git synced 2025-10-30 03:41:16 +00:00

config: allow negative to be used with tags. (#11779)

This commit is contained in:
ItsOhen 2025-09-26 18:19:53 +02:00 committed by GitHub
parent 4f3dd1ddb4
commit ae445606e2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 52 additions and 1 deletions

View File

@ -0,0 +1,48 @@
#include "../../shared.hpp"
#include "../../hyprctlCompat.hpp"
#include "../shared.hpp"
#include "tests.hpp"
static int ret = 0;
static bool testTags() {
NLog::log("{}Testing tags", Colors::GREEN);
EXPECT(Tests::windowCount(), 0);
NLog::log("{}Spawning kittyProcA&B on ws 1", Colors::YELLOW);
auto kittyProcA = Tests::spawnKitty("tagged");
auto kittyProcB = Tests::spawnKitty("untagged");
if (!kittyProcA || !kittyProcB) {
NLog::log("{}Error: kitty did not spawn", Colors::RED);
return false;
}
NLog::log("{}Testing testTag tags", Colors::YELLOW);
OK(getFromSocket("/keyword windowrule tag +testTag, class:tagged"));
OK(getFromSocket("/keyword windowrule noshadow, tag:negative:testTag"));
OK(getFromSocket("/keyword windowrule noborder, tag:testTag"));
EXPECT(Tests::windowCount(), 2);
OK(getFromSocket("/dispatch focuswindow class:tagged"));
NLog::log("{}Testing tagged window for noborder & noshadow", Colors::YELLOW);
EXPECT_CONTAINS(getFromSocket("/activewindow"), "testTag");
EXPECT_CONTAINS(getFromSocket("/getprop activewindow noborder"), "true");
EXPECT_CONTAINS(getFromSocket("/getprop activewindow noshadow"), "false");
NLog::log("{}Testing untagged window for noborder & noshadow", Colors::YELLOW);
OK(getFromSocket("/dispatch focuswindow class:untagged"));
EXPECT_NOT_CONTAINS(getFromSocket("/activewindow"), "testTag");
EXPECT_CONTAINS(getFromSocket("/getprop activewindow noborder"), "false");
EXPECT_CONTAINS(getFromSocket("/getprop activewindow noshadow"), "true");
Tests::killAllWindows();
EXPECT(Tests::windowCount(), 0);
OK(getFromSocket("/reload"));
return ret == 0;
}
REGISTER_TEST_FN(testTags)

View File

@ -1,7 +1,10 @@
#include "TagKeeper.hpp"
bool CTagKeeper::isTagged(const std::string& tag, bool strict) {
return m_tags.contains(tag) || (!strict && m_tags.contains(tag + "*"));
const bool NEGATIVE = tag.starts_with("negative");
const auto MATCH = NEGATIVE ? tag.substr(9) : tag;
const bool TAGGED = m_tags.contains(MATCH) || (!strict && m_tags.contains(MATCH + "*"));
return NEGATIVE ? !TAGGED : TAGGED;
}
bool CTagKeeper::applyTag(const std::string& tag, bool dynamic) {