diff --git a/src/layout/algorithm/floating/default/DefaultFloatingAlgorithm.cpp b/src/layout/algorithm/floating/default/DefaultFloatingAlgorithm.cpp index 7fb8ec7e..cbf0f8c0 100644 --- a/src/layout/algorithm/floating/default/DefaultFloatingAlgorithm.cpp +++ b/src/layout/algorithm/floating/default/DefaultFloatingAlgorithm.cpp @@ -88,7 +88,9 @@ void CDefaultFloatingAlgorithm::newTarget(SP target) { if (!posOverridden && (!DESIRED_GEOM || !DESIRED_GEOM->pos)) windowGeometry = CBox{WORK_AREA.middle() - windowGeometry.size() / 2.F, windowGeometry.size()}; - if (posOverridden || WORK_AREA.containsPoint(windowGeometry.middle())) + if (posOverridden // pos is overridden by a rule + || (DESIRED_GEOM && DESIRED_GEOM->pos && target->window() && target->window()->m_isX11) // X11 window with a geom + || WORK_AREA.containsPoint(windowGeometry.middle())) // geometry within work area target->setPositionGlobal(windowGeometry); else { const auto POS = WORK_AREA.middle() - windowGeometry.size() / 2.f; diff --git a/src/layout/target/WindowTarget.cpp b/src/layout/target/WindowTarget.cpp index 0bd905af..f19ba7ea 100644 --- a/src/layout/target/WindowTarget.cpp +++ b/src/layout/target/WindowTarget.cpp @@ -249,9 +249,11 @@ std::expected CWindowTarget::desiredGeomet requested.size = clampSizeForDesired(DESIRED_GEOM.size()); if (m_window->m_isX11) { - Vector2D xy = {DESIRED_GEOM.x, DESIRED_GEOM.y}; - xy = g_pXWaylandManager->xwaylandToWaylandCoords(xy); - requested.pos = xy; + Vector2D xy = {DESIRED_GEOM.x, DESIRED_GEOM.y}; + xy = g_pXWaylandManager->xwaylandToWaylandCoords(xy); + requested.pos = xy; + DESIRED_GEOM.x = xy.x; + DESIRED_GEOM.y = xy.y; } const auto STOREDSIZE = m_window->m_ruleApplicator->persistentSize().valueOrDefault() ? g_pConfigManager->getStoredFloatingSize(m_window.lock()) : std::nullopt;