diff options
| author | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2022-05-23 22:07:29 +0200 |
|---|---|---|
| committer | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2022-05-23 22:07:29 +0200 |
| commit | f522c597efb3ef3efc01fd6fba9a2b4ef4cadbcc (patch) | |
| tree | eb32ee9c32607ed0d9180469af74d9afb18b6030 /src/events/Windows.cpp | |
| parent | e924cd95fde26bf776951800a595662bba0b9326 (diff) | |
Fix fullscreen focus detection and configure requests
Diffstat (limited to 'src/events/Windows.cpp')
| -rw-r--r-- | src/events/Windows.cpp | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/src/events/Windows.cpp b/src/events/Windows.cpp index 89f359e6..716c5ee1 100644 --- a/src/events/Windows.cpp +++ b/src/events/Windows.cpp @@ -315,23 +315,34 @@ void Events::listener_configureX11(void* owner, void* data) { return; const auto E = (wlr_xwayland_surface_configure_event*)data; + g_pHyprRenderer->damageWindow(PWINDOW); if (!PWINDOW->m_bIsFloating) { g_pXWaylandManager->setWindowSize(PWINDOW, PWINDOW->m_vRealSize.vec()); g_pInputManager->refocus(); + g_pHyprRenderer->damageWindow(PWINDOW); + return; + } + + if (!PWINDOW->m_uSurface.xwayland->mapped) { + wlr_xwayland_surface_configure(PWINDOW->m_uSurface.xwayland, E->x, E->y, E->width, E->height); return; } - wlr_xwayland_surface_configure(PWINDOW->m_uSurface.xwayland, E->x, E->y, E->width, E->height); - wlr_xwayland_surface_restack(PWINDOW->m_uSurface.xwayland, NULL, XCB_STACK_MODE_ABOVE); PWINDOW->m_vRealPosition.setValueAndWarp(Vector2D(E->x, E->y)); PWINDOW->m_vRealSize.setValueAndWarp(Vector2D(E->width, E->height)); - PWINDOW->m_vPosition = PWINDOW->m_vPosition; - PWINDOW->m_vSize = PWINDOW->m_vSize; + PWINDOW->m_vPosition = PWINDOW->m_vRealPosition.vec(); + PWINDOW->m_vSize = PWINDOW->m_vRealSize.vec(); - wlr_seat_pointer_clear_focus(g_pCompositor->m_sSeat.seat); + wlr_xwayland_surface_configure(PWINDOW->m_uSurface.xwayland, E->x, E->y, E->width, E->height); + + g_pCompositor->moveWindowToTop(PWINDOW); + + PWINDOW->m_bCreatedOverFullscreen = true; g_pInputManager->refocus(); + + g_pHyprRenderer->damageWindow(PWINDOW); } void Events::listener_surfaceXWayland(wl_listener* listener, void* data) { |
