diff --git a/src/events/Windows.cpp b/src/events/Windows.cpp index 9b2f7945..732bd2a4 100644 --- a/src/events/Windows.cpp +++ b/src/events/Windows.cpp @@ -51,6 +51,7 @@ void Events::listener_unmapWindow(wl_listener* listener, void* data) { if (g_pXWaylandManager->getWindowSurface(PWINDOW) == g_pCompositor->m_pLastFocus) g_pCompositor->m_pLastFocus = nullptr; + PWINDOW->m_bMappedX11 = false; // remove the fullscreen window status from workspace if we closed it const auto PWORKSPACE = g_pCompositor->getWorkspaceByID(PWINDOW->m_iWorkspaceID); diff --git a/src/layout/DwindleLayout.cpp b/src/layout/DwindleLayout.cpp index cb96931f..38589a3d 100644 --- a/src/layout/DwindleLayout.cpp +++ b/src/layout/DwindleLayout.cpp @@ -345,6 +345,9 @@ void CHyprDwindleLayout::onWindowCreatedFloating(CWindow* pWindow) { pWindow->m_vRealPosition = Vector2D(desiredGeometry.x, desiredGeometry.y); } } + + g_pXWaylandManager->setWindowSize(pWindow, pWindow->m_vRealSize); + g_pCompositor->fixXWaylandWindowsOnWorkspace(PMONITOR->activeWorkspace); } void CHyprDwindleLayout::fullscreenRequestForWindow(CWindow* pWindow) { diff --git a/src/managers/InputManager.cpp b/src/managers/InputManager.cpp index c6bafd4e..f838408a 100644 --- a/src/managers/InputManager.cpp +++ b/src/managers/InputManager.cpp @@ -106,7 +106,7 @@ void CInputManager::onMouseButton(wlr_event_pointer_button* e) { } // notify app if we didnt handle it - const auto PWINDOW = g_pCompositor->vectorToWindowIdeal(getMouseCoordsInternal()); + const auto PWINDOW = g_pCompositor->vectorToWindow(getMouseCoordsInternal()); if (g_pCompositor->windowValidMapped(PWINDOW) && g_pCompositor->doesSeatAcceptInput(g_pXWaylandManager->getWindowSurface(PWINDOW))) wlr_seat_pointer_notify_button(g_pCompositor->m_sSeat.seat, e->time_msec, e->button, e->state); } diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index 1c0f4ad2..f3b08ff2 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -43,14 +43,8 @@ bool shouldRenderWindow(CWindow* pWindow, SMonitor* pMonitor) { return true; // if not, check if it maybe is active on a different monitor. - for (auto& m : g_pCompositor->m_lMonitors) { - if (&m == pMonitor) - continue; - - - if (m.activeWorkspace == pWindow->m_iWorkspaceID) - return true; - } + if (g_pCompositor->isWorkspaceVisible(pWindow->m_iWorkspaceID)) + return true; return false; }