diff options
| author | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2022-04-05 18:29:58 +0200 |
|---|---|---|
| committer | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2022-04-05 18:29:58 +0200 |
| commit | ddcd4fb767afe8490a239ab019012a78d368eb5e (patch) | |
| tree | 6739da91be9e642d269c9c9e2775413315696e7e /src/events/Windows.cpp | |
| parent | dcb6fc269a1360f6d46836d34db4964779ce5879 (diff) | |
Mostly fixes #5
Diffstat (limited to 'src/events/Windows.cpp')
| -rw-r--r-- | src/events/Windows.cpp | 29 |
1 files changed, 25 insertions, 4 deletions
diff --git a/src/events/Windows.cpp b/src/events/Windows.cpp index 6d000231..7b3acd8a 100644 --- a/src/events/Windows.cpp +++ b/src/events/Windows.cpp @@ -126,8 +126,7 @@ void Events::listener_mapWindow(void* owner, void* data) { PWINDOW->m_szTitle = g_pXWaylandManager->getTitle(PWINDOW); - if (!PWINDOW->m_bIsModal) - g_pCompositor->focusWindow(PWINDOW); + g_pCompositor->focusWindow(PWINDOW); PWINDOW->m_pSurfaceTree = SubsurfaceTree::createTreeRoot(g_pXWaylandManager->getWindowSurface(PWINDOW), addViewCoords, PWINDOW); @@ -195,7 +194,10 @@ void Events::listener_unmapWindow(void* owner, void* data) { } void Events::listener_commitWindow(void* owner, void* data) { - // CWindow* PWINDOW = (CWindow*)owner; + CWindow* PWINDOW = (CWindow*)owner; + + if (!g_pCompositor->windowValidMapped(PWINDOW)) + return; // Debug::log(LOG, "Window %x committed", PWINDOW); // SPAM! } @@ -259,10 +261,29 @@ void Events::listener_activateX11(void* owner, void* data) { void Events::listener_configureX11(void* owner, void* data) { CWindow* PWINDOW = (CWindow*)owner; + if (!g_pCompositor->windowValidMapped(PWINDOW)) + return; + const auto E = (wlr_xwayland_surface_configure_event*)data; - // TODO: ignore if tiled? + if (!PWINDOW->m_bIsFloating) { + g_pXWaylandManager->setWindowSize(PWINDOW, PWINDOW->m_vRealSize); + g_pInputManager->refocus(); + 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_vEffectivePosition = Vector2D(E->x, E->y); + PWINDOW->m_vEffectiveSize = Vector2D(E->width, E->height); + PWINDOW->m_vRealPosition = PWINDOW->m_vEffectivePosition; + PWINDOW->m_vRealSize = PWINDOW->m_vRealSize; + PWINDOW->m_vPosition = PWINDOW->m_vPosition; + PWINDOW->m_vSize = PWINDOW->m_vSize; + + wlr_seat_pointer_clear_focus(g_pCompositor->m_sSeat.seat); + + g_pInputManager->refocus(); } void Events::listener_surfaceXWayland(wl_listener* listener, void* data) { |
