summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorVaxry <vaxry@vaxry.net>2025-01-25 02:35:41 +0000
committerVaxry <vaxry@vaxry.net>2025-01-25 02:35:41 +0000
commit354d4594de6a14e89ab337681dac2d898bc18cbf (patch)
tree4dddaf1ea3445dbb4167bbe20e2bf82079f0b2c5 /src
parent089fdd1ea0d991da5b068db51531f54c90a2df25 (diff)
xwayland: various window handling fixes
I hate this fucking garbage
Diffstat (limited to 'src')
-rw-r--r--src/desktop/Window.cpp8
-rw-r--r--src/events/Windows.cpp5
-rw-r--r--src/managers/XWaylandManager.cpp6
3 files changed, 12 insertions, 7 deletions
diff --git a/src/desktop/Window.cpp b/src/desktop/Window.cpp
index 4be8fac5..97d7ecc0 100644
--- a/src/desktop/Window.cpp
+++ b/src/desktop/Window.cpp
@@ -1556,10 +1556,10 @@ void CWindow::onX11Configure(CBox box) {
}
}
- m_vPosition = m_vRealPosition->value();
- m_vSize = m_vRealSize->value();
+ m_vPosition = m_vRealPosition->goal();
+ m_vSize = m_vRealSize->goal();
- m_pXWaylandSurface->configure(box);
+ g_pXWaylandManager->setWindowSize(m_pSelf.lock(), box.size(), true);
m_vPendingReportedSize = box.size();
m_vReportedSize = box.size();
@@ -1569,7 +1569,7 @@ void CWindow::onX11Configure(CBox box) {
if (!m_pWorkspace || !m_pWorkspace->isVisible())
return; // further things are only for visible windows
- m_pWorkspace = g_pCompositor->getMonitorFromVector(m_vRealPosition->value() + m_vRealSize->value() / 2.f)->activeWorkspace;
+ m_pWorkspace = g_pCompositor->getMonitorFromVector(m_vRealPosition->goal() + m_vRealSize->goal() / 2.f)->activeWorkspace;
g_pCompositor->changeWindowZOrder(m_pSelf.lock(), true);
diff --git a/src/events/Windows.cpp b/src/events/Windows.cpp
index cadd4cbc..525adc02 100644
--- a/src/events/Windows.cpp
+++ b/src/events/Windows.cpp
@@ -43,7 +43,7 @@ static void setVector2DAnimToMove(WP<CBaseAnimatedVariable> pav) {
animvar->setConfig(g_pConfigManager->getAnimationPropertyConfig("windowsMove"));
const auto PHLWINDOW = animvar->m_Context.pWindow.lock();
- if (PHLWINDOW && !PHLWINDOW->m_vRealPosition->isBeingAnimated() && !PHLWINDOW->m_vRealSize->isBeingAnimated())
+ if (PHLWINDOW)
PHLWINDOW->m_bAnimatingIn = false;
}
@@ -680,6 +680,9 @@ void Events::listener_mapWindow(void* owner, void* data) {
if (PMONITOR && PWINDOW->isX11OverrideRedirect())
PWINDOW->m_fX11SurfaceScaledBy = PMONITOR->scale;
+
+ if (!PWINDOW->isX11OverrideRedirect() && PWINDOW->m_bIsX11 && PWINDOW->m_bIsFloating)
+ g_pXWaylandManager->setWindowSize(PWINDOW, PWINDOW->m_vRealSize->goal(), true);
}
void Events::listener_unmapWindow(void* owner, void* data) {
diff --git a/src/managers/XWaylandManager.cpp b/src/managers/XWaylandManager.cpp
index 5a933236..8956cf3a 100644
--- a/src/managers/XWaylandManager.cpp
+++ b/src/managers/XWaylandManager.cpp
@@ -55,7 +55,7 @@ void CHyprXWaylandManager::activateWindow(PHLWINDOW pWindow, bool activate) {
if (pWindow->m_bIsX11) {
if (activate) {
- setWindowSize(pWindow, pWindow->m_vRealSize->goal()); // update xwayland output pos
+ setWindowSize(pWindow, pWindow->m_vRealSize->value(), true); // update xwayland output pos
pWindow->m_pXWaylandSurface->setMinimized(false);
if (!pWindow->isX11OverrideRedirect())
@@ -162,7 +162,9 @@ bool CHyprXWaylandManager::shouldBeFloated(PHLWINDOW pWindow, bool pending) {
if (a == HYPRATOMS["_NET_WM_WINDOW_TYPE_DROPDOWN_MENU"] || a == HYPRATOMS["_NET_WM_WINDOW_TYPE_MENU"])
pWindow->m_bX11ShouldntFocus = true;
- pWindow->m_bNoInitialFocus = true;
+ if (a != HYPRATOMS["_NET_WM_WINDOW_TYPE_DIALOG"])
+ pWindow->m_bNoInitialFocus = true;
+
return true;
}