hyprctl: fix workspace dynamic effect reloading (#13537)
ref https://github.com/hyprwm/Hyprland/discussions/12806
This commit is contained in:
parent
b06a4b5e13
commit
7299a3b0d5
5 changed files with 37 additions and 9 deletions
|
|
@ -375,6 +375,24 @@ static void testMultimonFocus() {
|
|||
Tests::killAllWindows();
|
||||
}
|
||||
|
||||
static void testDynamicWsEffects() {
|
||||
// test dynamic workspace effects, they shouldn't lag
|
||||
|
||||
OK(getFromSocket("/dispatch workspace 69"));
|
||||
|
||||
Tests::spawnKitty("bitch");
|
||||
|
||||
OK(getFromSocket("r/keyword workspace 69,bordersize:20"));
|
||||
OK(getFromSocket("r/keyword workspace 69,rounding:false"));
|
||||
|
||||
EXPECT(getFromSocket("/getprop class:bitch border_size"), "20");
|
||||
EXPECT(getFromSocket("/getprop class:bitch rounding"), "0");
|
||||
|
||||
OK(getFromSocket("/reload"));
|
||||
|
||||
Tests::killAllWindows();
|
||||
}
|
||||
|
||||
static bool test() {
|
||||
NLog::log("{}Testing workspaces", Colors::GREEN);
|
||||
|
||||
|
|
@ -720,8 +738,8 @@ static bool test() {
|
|||
OK(getFromSocket("/output remove HEADLESS-3"));
|
||||
|
||||
testSpecialWorkspaceFullscreen();
|
||||
|
||||
testAsymmetricGaps();
|
||||
testDynamicWsEffects();
|
||||
|
||||
NLog::log("{}Expecting 0 windows", Colors::YELLOW);
|
||||
EXPECT(Tests::windowCount(), 0);
|
||||
|
|
|
|||
|
|
@ -2197,6 +2197,15 @@ std::string CHyprCtl::getReply(std::string request) {
|
|||
Desktop::Rule::ruleEngine()->updateAllRules();
|
||||
}
|
||||
|
||||
for (const auto& ws : g_pCompositor->getWorkspaces()) {
|
||||
if (!ws)
|
||||
continue;
|
||||
|
||||
ws->updateWindows();
|
||||
ws->updateWindowData();
|
||||
ws->updateWindowDecos();
|
||||
}
|
||||
|
||||
for (auto const& m : g_pCompositor->m_monitors) {
|
||||
g_pHyprRenderer->damageMonitor(m);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -630,6 +630,8 @@ void CWindowRuleApplicator::propertiesChanged(std::underlying_type_t<eRuleProper
|
|||
needsRelayout = needsRelayout || RES.needsRelayout;
|
||||
}
|
||||
|
||||
m_window->updateWindowData();
|
||||
m_window->updateWindowDecos();
|
||||
m_window->updateDecorationValues();
|
||||
|
||||
if (needsRelayout)
|
||||
|
|
|
|||
|
|
@ -510,12 +510,6 @@ void CWindow::moveToWorkspace(PHLWORKSPACE pWorkspace) {
|
|||
|
||||
setAnimationsToMove();
|
||||
|
||||
OLDWORKSPACE->updateWindows();
|
||||
OLDWORKSPACE->updateWindowData();
|
||||
|
||||
pWorkspace->updateWindows();
|
||||
pWorkspace->updateWindowData();
|
||||
|
||||
g_pCompositor->updateAllWindowsAnimatedDecorationValues();
|
||||
|
||||
if (valid(pWorkspace)) {
|
||||
|
|
@ -807,9 +801,13 @@ void CWindow::updateWindowData() {
|
|||
}
|
||||
|
||||
void CWindow::updateWindowData(const SWorkspaceRule& workspaceRule) {
|
||||
m_ruleApplicator->borderSize().matchOptional(workspaceRule.borderSize, Desktop::Types::PRIORITY_WORKSPACE_RULE);
|
||||
if (workspaceRule.noBorder.value_or(false))
|
||||
m_ruleApplicator->borderSize().matchOptional(std::optional<Hyprlang::INT>(0), Desktop::Types::PRIORITY_WORKSPACE_RULE);
|
||||
else if (workspaceRule.borderSize)
|
||||
m_ruleApplicator->borderSize().matchOptional(workspaceRule.borderSize, Desktop::Types::PRIORITY_WORKSPACE_RULE);
|
||||
else
|
||||
m_ruleApplicator->borderSize().matchOptional(std::nullopt, Desktop::Types::PRIORITY_WORKSPACE_RULE);
|
||||
m_ruleApplicator->decorate().matchOptional(workspaceRule.decorate, Desktop::Types::PRIORITY_WORKSPACE_RULE);
|
||||
m_ruleApplicator->borderSize().matchOptional(workspaceRule.noBorder ? std::optional<Hyprlang::INT>(0) : std::nullopt, Desktop::Types::PRIORITY_WORKSPACE_RULE);
|
||||
m_ruleApplicator->rounding().matchOptional(workspaceRule.noRounding.value_or(false) ? std::optional<Hyprlang::INT>(0) : std::nullopt, Desktop::Types::PRIORITY_WORKSPACE_RULE);
|
||||
m_ruleApplicator->noShadow().matchOptional(workspaceRule.noShadow, Desktop::Types::PRIORITY_WORKSPACE_RULE);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -377,5 +377,6 @@ void CWindowTarget::onUpdateSpace() {
|
|||
m_window->m_monitor = space()->workspace()->m_monitor;
|
||||
m_window->moveToWorkspace(space()->workspace());
|
||||
m_window->updateToplevel();
|
||||
m_window->updateWindowData();
|
||||
m_window->updateWindowDecos();
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue