diff --git a/src/events/events.cpp b/src/events/events.cpp index 3219452..0ea1296 100644 --- a/src/events/events.cpp +++ b/src/events/events.cpp @@ -79,12 +79,18 @@ void Events::eventDestroy(xcb_generic_event_t* event) { const auto E = reinterpret_cast(event); g_pWindowManager->closeWindowAllChecks(E->window); + + // refocus on new window + g_pWindowManager->refocusWindowOnClosed(); } void Events::eventUnmapWindow(xcb_generic_event_t* event) { const auto E = reinterpret_cast(event); g_pWindowManager->closeWindowAllChecks(E->window); + + // refocus on new window + g_pWindowManager->refocusWindowOnClosed(); } CWindow* Events::remapFloatingWindow(int windowID, int forcemonitor) { diff --git a/src/windowManager.cpp b/src/windowManager.cpp index f6989c2..14d880b 100644 --- a/src/windowManager.cpp +++ b/src/windowManager.cpp @@ -1378,4 +1378,15 @@ void CWindowManager::getICCCMWMProtocols(CWindow* pWindow) { } xcb_icccm_get_wm_protocols_reply_wipe(&WMProtocolsReply); +} + +void CWindowManager::refocusWindowOnClosed() { + const auto PWINDOW = findWindowAtCursor(); + + if (!PWINDOW) + return; + + LastWindow = PWINDOW->getDrawable(); + + setFocusedWindow(PWINDOW->getDrawable()); } \ No newline at end of file diff --git a/src/windowManager.hpp b/src/windowManager.hpp index 7e06e44..af5a38a 100644 --- a/src/windowManager.hpp +++ b/src/windowManager.hpp @@ -67,6 +67,7 @@ public: void refreshDirtyWindows(); void setFocusedWindow(xcb_drawable_t); + void refocusWindowOnClosed(); void calculateNewWindowParams(CWindow*); void fixWindowOnClose(CWindow*);