diff --git a/src/servers/app/ServerWindow.cpp b/src/servers/app/ServerWindow.cpp index 3b6f3eb31d..242438faf2 100644 --- a/src/servers/app/ServerWindow.cpp +++ b/src/servers/app/ServerWindow.cpp @@ -1265,8 +1265,10 @@ fDesktop->UnlockSingleWindow(); EventTarget(), token); fDesktop->LockSingleWindow(); } - if (fCurrentView == view) + + if (fCurrentView == view || fCurrentView->HasParent(view)) _SetCurrentView(parent); + delete view; } // else we don't delete the root view } diff --git a/src/servers/app/View.h b/src/servers/app/View.h index c72cd57586..b2291afe47 100644 --- a/src/servers/app/View.h +++ b/src/servers/app/View.h @@ -83,6 +83,13 @@ public: void AddChild(View* view); bool RemoveChild(View* view); + inline bool HasParent(View* candidate) const + { + return fParent == candidate + || (fParent != NULL + && fParent->HasParent(candidate)); + } + inline View* Parent() const { return fParent; }