diff options
Diffstat (limited to 'src/events/Events.cpp')
| -rw-r--r-- | src/events/Events.cpp | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/events/Events.cpp b/src/events/Events.cpp index 8191f295..4367eb16 100644 --- a/src/events/Events.cpp +++ b/src/events/Events.cpp @@ -183,6 +183,8 @@ void Events::listener_destroyLayerSurface(wl_listener* listener, void* data) { if (layersurface->layerSurface->mapped) layersurface->layerSurface->mapped = 0; + if (layersurface->layerSurface->surface == g_pCompositor->m_pLastFocus) + g_pCompositor->m_pLastFocus = nullptr; wl_list_remove(&layersurface->listen_destroyLayerSurface.link); wl_list_remove(&layersurface->listen_mapLayerSurface.link); @@ -212,6 +214,9 @@ void Events::listener_unmapLayerSurface(wl_listener* listener, void* data) { if (layersurface->layerSurface->mapped) layersurface->layerSurface->mapped = 0; + if (layersurface->layerSurface->surface == g_pCompositor->m_pLastFocus) + g_pCompositor->m_pLastFocus = nullptr; + Debug::log(LOG, "LayerSurface %x unmapped", layersurface); } @@ -477,6 +482,9 @@ void Events::listener_mapWindow(wl_listener* listener, void* data) { void Events::listener_unmapWindow(wl_listener* listener, void* data) { CWindow* PWINDOW = wl_container_of(listener, PWINDOW, listen_unmapWindow); + if (g_pXWaylandManager->getWindowSurface(PWINDOW) == g_pCompositor->m_pLastFocus) + g_pCompositor->m_pLastFocus = nullptr; + g_pLayoutManager->getCurrentLayout()->onWindowRemoved(PWINDOW); g_pCompositor->removeWindowFromVectorSafe(PWINDOW); @@ -493,6 +501,9 @@ void Events::listener_commitWindow(wl_listener* listener, void* data) { void Events::listener_destroyWindow(wl_listener* listener, void* data) { CWindow* PWINDOW = wl_container_of(listener, PWINDOW, listen_destroyWindow); + if (g_pXWaylandManager->getWindowSurface(PWINDOW) == g_pCompositor->m_pLastFocus) + g_pCompositor->m_pLastFocus = nullptr; + g_pLayoutManager->getCurrentLayout()->onWindowRemoved(PWINDOW); g_pCompositor->removeWindowFromVectorSafe(PWINDOW); |
