summaryrefslogtreecommitdiff
path: root/src/desktop/Window.cpp
diff options
context:
space:
mode:
authorSungyoon Cho <sungyoon@sungyooncho.dev>2024-04-11 01:26:11 +0900
committerGitHub <noreply@github.com>2024-04-10 17:26:11 +0100
commitc35fa9bacc960fb37ebac8541eadc2f4696b287c (patch)
tree86db2e1ce6038614f7e2443d5d61d06aa863c455 /src/desktop/Window.cpp
parentb573c2012587a4a4d84a306a157db77bf4c3566e (diff)
workspace: update windows when selector match could change (#5533)
* workspace: update windows when group updates * workspace: update windows when floating toggle * workspace: update windows when stop dragging window by mouse
Diffstat (limited to 'src/desktop/Window.cpp')
-rw-r--r--src/desktop/Window.cpp36
1 files changed, 27 insertions, 9 deletions
diff --git a/src/desktop/Window.cpp b/src/desktop/Window.cpp
index 28c85add..8d6a4fa4 100644
--- a/src/desktop/Window.cpp
+++ b/src/desktop/Window.cpp
@@ -390,7 +390,11 @@ void CWindow::moveToWorkspace(PHLWORKSPACE pWorkspace) {
setAnimationsToMove();
- updateSpecialRenderData();
+ g_pCompositor->updateWorkspaceWindows(OLDWORKSPACE->m_iID);
+ g_pCompositor->updateWorkspaceSpecialRenderData(OLDWORKSPACE->m_iID);
+ g_pCompositor->updateWorkspaceWindows(workspaceID());
+ g_pCompositor->updateWorkspaceSpecialRenderData(workspaceID());
+ g_pCompositor->updateAllWindowsAnimatedDecorationValues();
if (valid(pWorkspace)) {
g_pEventManager->postEvent(SHyprIPCEvent{"movewindow", std::format("{:x},{}", (uintptr_t)this, pWorkspace->m_szName)});
@@ -479,6 +483,8 @@ void CWindow::onUnmap() {
PMONITOR->solitaryClient = nullptr;
g_pCompositor->updateWorkspaceWindows(workspaceID());
+ g_pCompositor->updateWorkspaceSpecialRenderData(workspaceID());
+ g_pCompositor->updateAllWindowsAnimatedDecorationValues();
if (m_bIsX11)
return;
@@ -845,6 +851,8 @@ void CWindow::createGroup() {
addWindowDeco(std::make_unique<CHyprGroupBarDecoration>(this));
g_pLayoutManager->getCurrentLayout()->recalculateWindow(this);
+ g_pCompositor->updateWorkspaceWindows(workspaceID());
+ g_pCompositor->updateWorkspaceSpecialRenderData(workspaceID());
g_pCompositor->updateAllWindowsAnimatedDecorationValues();
}
}
@@ -858,6 +866,9 @@ void CWindow::destroyGroup() {
m_sGroupData.pNextWindow = nullptr;
m_sGroupData.head = false;
updateWindowDecos();
+ g_pCompositor->updateWorkspaceWindows(workspaceID());
+ g_pCompositor->updateWorkspaceSpecialRenderData(workspaceID());
+ g_pCompositor->updateAllWindowsAnimatedDecorationValues();
return;
}
@@ -884,6 +895,10 @@ void CWindow::destroyGroup() {
w->updateWindowDecos();
}
g_pKeybindManager->m_bGroupsLocked = GROUPSLOCKEDPREV;
+
+ g_pCompositor->updateWorkspaceWindows(workspaceID());
+ g_pCompositor->updateWorkspaceSpecialRenderData(workspaceID());
+ g_pCompositor->updateAllWindowsAnimatedDecorationValues();
}
CWindow* CWindow::getGroupHead() {
@@ -1100,20 +1115,23 @@ float CWindow::rounding() {
}
void CWindow::updateSpecialRenderData() {
- const auto PWORKSPACE = m_pWorkspace;
- const auto WORKSPACERULE = PWORKSPACE ? g_pConfigManager->getWorkspaceRuleFor(PWORKSPACE) : SWorkspaceRule{};
- bool border = true;
+ const auto PWORKSPACE = m_pWorkspace;
+ const auto WORKSPACERULE = PWORKSPACE ? g_pConfigManager->getWorkspaceRuleFor(PWORKSPACE) : SWorkspaceRule{};
+ updateSpecialRenderData(WORKSPACERULE);
+}
+void CWindow::updateSpecialRenderData(const SWorkspaceRule& workspaceRule) {
static auto PNOBORDERONFLOATING = CConfigValue<Hyprlang::INT>("general:no_border_on_floating");
+ bool border = true;
if (m_bIsFloating && *PNOBORDERONFLOATING == 1)
border = false;
- m_sSpecialRenderData.border = WORKSPACERULE.border.value_or(border);
- m_sSpecialRenderData.borderSize = WORKSPACERULE.borderSize.value_or(-1);
- m_sSpecialRenderData.decorate = WORKSPACERULE.decorate.value_or(true);
- m_sSpecialRenderData.rounding = WORKSPACERULE.rounding.value_or(true);
- m_sSpecialRenderData.shadow = WORKSPACERULE.shadow.value_or(true);
+ m_sSpecialRenderData.border = workspaceRule.border.value_or(border);
+ m_sSpecialRenderData.borderSize = workspaceRule.borderSize.value_or(-1);
+ m_sSpecialRenderData.decorate = workspaceRule.decorate.value_or(true);
+ m_sSpecialRenderData.rounding = workspaceRule.rounding.value_or(true);
+ m_sSpecialRenderData.shadow = workspaceRule.shadow.value_or(true);
}
int CWindow::getRealBorderSize() {