mirror of
https://github.com/hyprwm/Hyprland
synced 2024-11-02 22:26:00 +01:00
minor fixes for closing windows and focus
This commit is contained in:
parent
c76c372c75
commit
5046c02cce
3 changed files with 26 additions and 19 deletions
|
@ -406,8 +406,8 @@ void CCompositor::focusSurface(wlr_surface* pSurface, CWindow* pWindowOwner) {
|
||||||
};
|
};
|
||||||
wlr_signal_emit_safe(&m_sSeat.seat->keyboard_state.events.focus_change, &event);
|
wlr_signal_emit_safe(&m_sSeat.seat->keyboard_state.events.focus_change, &event);
|
||||||
|
|
||||||
if (const auto PWINDOW = getWindowFromSurface(pSurface); PWINDOW)
|
if (pWindowOwner)
|
||||||
Debug::log(LOG, "Set keyboard focus to surface %x, with window name: %s", pSurface, PWINDOW->m_szTitle.c_str());
|
Debug::log(LOG, "Set keyboard focus to surface %x, with window name: %s", pSurface, pWindowOwner->m_szTitle.c_str());
|
||||||
else
|
else
|
||||||
Debug::log(LOG, "Set keyboard focus to surface %x", pSurface);
|
Debug::log(LOG, "Set keyboard focus to surface %x", pSurface);
|
||||||
}
|
}
|
||||||
|
@ -560,11 +560,27 @@ void CCompositor::moveWindowToTop(CWindow* pWindow) {
|
||||||
void CCompositor::cleanupWindows() {
|
void CCompositor::cleanupWindows() {
|
||||||
for (auto& w : m_lWindowsFadingOut) {
|
for (auto& w : m_lWindowsFadingOut) {
|
||||||
if (!w->m_bFadingOut || w->m_fAlpha == 0.f) {
|
if (!w->m_bFadingOut || w->m_fAlpha == 0.f) {
|
||||||
m_lWindows.remove(*w);
|
if (!w->m_bReadyToDelete)
|
||||||
m_lWindowsFadingOut.remove(w);
|
continue;
|
||||||
|
|
||||||
|
w->hyprListener_mapWindow.removeCallback();
|
||||||
|
w->hyprListener_unmapWindow.removeCallback();
|
||||||
|
w->hyprListener_destroyWindow.removeCallback();
|
||||||
|
|
||||||
|
g_pLayoutManager->getCurrentLayout()->onWindowRemoved(w);
|
||||||
|
|
||||||
|
if (w->m_pSurfaceTree) {
|
||||||
|
Debug::log(LOG, "Destroying Subsurface tree of %x in destroyWindow", w);
|
||||||
|
SubsurfaceTree::destroySurfaceTree(w->m_pSurfaceTree);
|
||||||
|
w->m_pSurfaceTree = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
g_pHyprOpenGL->m_mWindowFramebuffers[w].release();
|
g_pHyprOpenGL->m_mWindowFramebuffers[w].release();
|
||||||
g_pHyprOpenGL->m_mWindowFramebuffers.erase(w);
|
g_pHyprOpenGL->m_mWindowFramebuffers.erase(w);
|
||||||
Debug::log(LOG, "Cleanup: cleaned up a window");
|
m_lWindows.remove(*w);
|
||||||
|
m_lWindowsFadingOut.remove(w);
|
||||||
|
|
||||||
|
Debug::log(LOG, "Cleanup: destroyed a window");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -71,6 +71,7 @@ public:
|
||||||
// Fade in-out
|
// Fade in-out
|
||||||
float m_fAlpha = 0.f;
|
float m_fAlpha = 0.f;
|
||||||
bool m_bFadingOut = false;
|
bool m_bFadingOut = false;
|
||||||
|
bool m_bReadyToDelete = false;
|
||||||
|
|
||||||
|
|
||||||
// For the list lookup
|
// For the list lookup
|
||||||
|
|
|
@ -30,6 +30,8 @@ void Events::listener_mapWindow(void* owner, void* data) {
|
||||||
PWINDOW->m_bMappedX11 = true;
|
PWINDOW->m_bMappedX11 = true;
|
||||||
PWINDOW->m_iWorkspaceID = PMONITOR->activeWorkspace;
|
PWINDOW->m_iWorkspaceID = PMONITOR->activeWorkspace;
|
||||||
PWINDOW->m_bIsMapped = true;
|
PWINDOW->m_bIsMapped = true;
|
||||||
|
PWINDOW->m_bReadyToDelete = false;
|
||||||
|
PWINDOW->m_bFadingOut = false;
|
||||||
|
|
||||||
// checks if the window wants borders and sets the appriopriate flag
|
// checks if the window wants borders and sets the appriopriate flag
|
||||||
g_pXWaylandManager->checkBorders(PWINDOW);
|
g_pXWaylandManager->checkBorders(PWINDOW);
|
||||||
|
@ -212,26 +214,14 @@ void Events::listener_commitWindow(void* owner, void* data) {
|
||||||
void Events::listener_destroyWindow(void* owner, void* data) {
|
void Events::listener_destroyWindow(void* owner, void* data) {
|
||||||
CWindow* PWINDOW = (CWindow*)owner;
|
CWindow* PWINDOW = (CWindow*)owner;
|
||||||
|
|
||||||
Debug::log(LOG, "Window %x destroyed", PWINDOW);
|
Debug::log(LOG, "Window %x destroyed, queueing.", PWINDOW);
|
||||||
|
|
||||||
if (PWINDOW == g_pCompositor->m_pLastWindow) {
|
if (PWINDOW == g_pCompositor->m_pLastWindow) {
|
||||||
g_pCompositor->m_pLastWindow = nullptr;
|
g_pCompositor->m_pLastWindow = nullptr;
|
||||||
g_pCompositor->m_pLastFocus = nullptr;
|
g_pCompositor->m_pLastFocus = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
PWINDOW->hyprListener_mapWindow.removeCallback();
|
PWINDOW->m_bReadyToDelete = true;
|
||||||
PWINDOW->hyprListener_unmapWindow.removeCallback();
|
|
||||||
PWINDOW->hyprListener_destroyWindow.removeCallback();
|
|
||||||
|
|
||||||
g_pLayoutManager->getCurrentLayout()->onWindowRemoved(PWINDOW);
|
|
||||||
|
|
||||||
if (PWINDOW->m_pSurfaceTree) {
|
|
||||||
Debug::log(LOG, "Destroying Subsurface tree of %x in destroyWindow", PWINDOW);
|
|
||||||
SubsurfaceTree::destroySurfaceTree(PWINDOW->m_pSurfaceTree);
|
|
||||||
PWINDOW->m_pSurfaceTree = nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
g_pCompositor->removeWindowFromVectorSafe(PWINDOW);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Events::listener_setTitleWindow(void* owner, void* data) {
|
void Events::listener_setTitleWindow(void* owner, void* data) {
|
||||||
|
|
Loading…
Reference in a new issue