diff --git a/src/servers/app/Desktop.cpp b/src/servers/app/Desktop.cpp index 8c04962bc8..d1cef6acb4 100644 --- a/src/servers/app/Desktop.cpp +++ b/src/servers/app/Desktop.cpp @@ -1261,7 +1261,7 @@ Desktop::ShowWindow(Window* window) void -Desktop::HideWindow(Window* window) +Desktop::HideWindow(Window* window, bool fromMinimize) { if (window->IsHidden()) return; @@ -1310,7 +1310,7 @@ Desktop::HideWindow(Window* window) } } - NotifyWindowHidden(window); + NotifyWindowHidden(window, fromMinimize); UnlockAllWindows(); @@ -1326,7 +1326,7 @@ Desktop::MinimizeWindow(Window* window, bool minimize) return; if (minimize && !window->IsHidden()) { - HideWindow(window); + HideWindow(window, true); window->SetMinimized(minimize); NotifyWindowMinimized(window, minimize); } else if (!minimize && window->IsHidden()) { diff --git a/src/servers/app/Desktop.h b/src/servers/app/Desktop.h index 033a50e8a1..477b03b987 100644 --- a/src/servers/app/Desktop.h +++ b/src/servers/app/Desktop.h @@ -166,7 +166,8 @@ public: Window* behindOf = NULL); void ShowWindow(Window* window); - void HideWindow(Window* window); + void HideWindow(Window* window, + bool fromMinimize = false); void MinimizeWindow(Window* window, bool minimize); void MoveWindowBy(Window* window, float x, float y, diff --git a/src/servers/app/DesktopListener.cpp b/src/servers/app/DesktopListener.cpp index cce860ddc5..8f37d73360 100644 --- a/src/servers/app/DesktopListener.cpp +++ b/src/servers/app/DesktopListener.cpp @@ -230,7 +230,7 @@ DesktopObservable::NotifyWindowWorkspacesChanged(Window* window, void -DesktopObservable::NotifyWindowHidden(Window* window) +DesktopObservable::NotifyWindowHidden(Window* window, bool fromMinimize) { if (fWeAreInvoking) return; @@ -238,7 +238,7 @@ DesktopObservable::NotifyWindowHidden(Window* window) for (DesktopListener* listener = fDesktopListenerList.First(); listener != NULL; listener = fDesktopListenerList.GetNext(listener)) - listener->WindowHidden(window); + listener->WindowHidden(window, fromMinimize); } diff --git a/src/servers/app/DesktopListener.h b/src/servers/app/DesktopListener.h index d44d242798..760e6a98d2 100644 --- a/src/servers/app/DesktopListener.h +++ b/src/servers/app/DesktopListener.h @@ -55,7 +55,8 @@ public: Window* behindOf) = 0; virtual void WindowWorkspacesChanged(Window* window, uint32 workspaces) = 0; - virtual void WindowHidden(Window* window) = 0; + virtual void WindowHidden(Window* window, + bool fromMinimize) = 0; virtual void WindowMinimized(Window* window, bool minimize) = 0; @@ -112,7 +113,8 @@ public: Window* behindOf); void NotifyWindowWorkspacesChanged(Window* window, uint32 workspaces); - void NotifyWindowHidden(Window* window); + void NotifyWindowHidden(Window* window, + bool fromMinimize); void NotifyWindowMinimized(Window* window, bool minimize); diff --git a/src/servers/app/stackandtile/StackAndTile.cpp b/src/servers/app/stackandtile/StackAndTile.cpp index 60c6e02b58..acbacd7268 100644 --- a/src/servers/app/stackandtile/StackAndTile.cpp +++ b/src/servers/app/stackandtile/StackAndTile.cpp @@ -349,7 +349,7 @@ StackAndTile::WindowWorkspacesChanged(Window* window, uint32 workspaces) void -StackAndTile::WindowHidden(Window* window) +StackAndTile::WindowHidden(Window* window, bool fromMinimize) { SATWindow* satWindow = GetSATWindow(window); if (satWindow == NULL) @@ -357,7 +357,7 @@ StackAndTile::WindowHidden(Window* window) SATGroup* group = satWindow->GetGroup(); if (group == NULL) return; - if (group->CountItems() > 1) + if (fromMinimize == false && group->CountItems() > 1) group->RemoveWindow(satWindow); } diff --git a/src/servers/app/stackandtile/StackAndTile.h b/src/servers/app/stackandtile/StackAndTile.h index a6ffe28991..d61b0c007e 100644 --- a/src/servers/app/stackandtile/StackAndTile.h +++ b/src/servers/app/stackandtile/StackAndTile.h @@ -72,7 +72,7 @@ public: Window* behindOf); virtual void WindowWorkspacesChanged(Window* window, uint32 workspaces); - virtual void WindowHidden(Window* window); + virtual void WindowHidden(Window* window, bool fromMinimize); virtual void WindowMinimized(Window* window, bool minimize); virtual void WindowTabLocationChanged(Window* window,