summaryrefslogtreecommitdiff
path: root/src/events/Windows.cpp
diff options
context:
space:
mode:
authorxDarksome <dev@darkso.me>2022-08-21 16:03:51 +0300
committerGitHub <noreply@github.com>2022-08-21 16:03:51 +0300
commit0f25f3aee36c4f312a3fb36a7abb63fe78f5254e (patch)
tree7fed1128dccc2de8eac672d4ca57eaaedd2af323 /src/events/Windows.cpp
parent776750ee3473fd0ca44969a9a1c79679e5805a0f (diff)
parent5e1f2539cb24b10cad50eba4c3131190022d5ee0 (diff)
Merge branch 'hyprwm:main' into main
Diffstat (limited to 'src/events/Windows.cpp')
-rw-r--r--src/events/Windows.cpp16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/events/Windows.cpp b/src/events/Windows.cpp
index 1eb35cc8..c195a115 100644
--- a/src/events/Windows.cpp
+++ b/src/events/Windows.cpp
@@ -85,6 +85,8 @@ void Events::listener_mapWindow(void* owner, void* data) {
PWINDOW->m_bRequestsFloat = true;
}
+ PWINDOW->m_bX11ShouldntFocus = PWINDOW->m_bX11ShouldntFocus || (PWINDOW->m_bIsX11 && PWINDOW->m_iX11Type == 2);
+
if (PWORKSPACE->m_bDefaultFloating)
PWINDOW->m_bIsFloating = true;
@@ -387,11 +389,17 @@ void Events::listener_unmapWindow(void* owner, void* data) {
PWINDOW->m_bIsMapped = false;
// refocus on a new window
- g_pInputManager->refocus();
+ auto PWINDOWCANDIDATE = g_pCompositor->vectorToWindowIdeal(PWINDOW->m_vRealPosition.goalv() + PWINDOW->m_vRealSize.goalv() / 2.f);
- if (!g_pCompositor->m_pLastWindow) {
- g_pCompositor->focusWindow(g_pCompositor->getFirstWindowOnWorkspace(PWORKSPACE->m_iID));
- }
+ if (!PWINDOWCANDIDATE)
+ PWINDOWCANDIDATE = g_pCompositor->getFirstWindowOnWorkspace(PWINDOW->m_iWorkspaceID);
+
+ if (!PWINDOWCANDIDATE || PWINDOW == PWINDOWCANDIDATE || !PWINDOWCANDIDATE->m_bIsMapped || PWINDOWCANDIDATE->m_bHidden || PWINDOWCANDIDATE->m_bX11ShouldntFocus || PWINDOWCANDIDATE->m_iX11Type == 2)
+ PWINDOWCANDIDATE = nullptr;
+
+ Debug::log(LOG, "On closed window, new focused candidate is %x", PWINDOWCANDIDATE);
+
+ g_pCompositor->focusWindow(PWINDOWCANDIDATE);
Debug::log(LOG, "Destroying the SubSurface tree of unmapped window %x", PWINDOW);
SubsurfaceTree::destroySurfaceTree(PWINDOW->m_pSurfaceTree);