Author: czeidler Date: 2011-08-03 00:27:12 +0200 (Wed, 03 Aug 2011) New Revision: 42548 Changeset: https://dev.haiku-os.org/changeset/42548 Ticket: https://dev.haiku-os.org/ticket/7895 Ticket: https://dev.haiku-os.org/ticket/7896 Modified: haiku/trunk/src/servers/app/Desktop.cpp haiku/trunk/src/servers/app/DesktopListener.cpp haiku/trunk/src/servers/app/DesktopListener.h haiku/trunk/src/servers/app/stackandtile/StackAndTile.cpp haiku/trunk/src/servers/app/stackandtile/StackAndTile.h Log: If a window is hidden remove it from the S&T group. This happens when MediaPlayer goes fullscreen. Maybe not optimal but at least consistent with terminal which also left the S&T group in fullscreen mode. This is because the terminal has no decorator in fullscreen mode and thus can't be stacked any more (maybe this should be solved in the future...). Fixes #7895, #7896. Modified: haiku/trunk/src/servers/app/Desktop.cpp =================================================================== --- haiku/trunk/src/servers/app/Desktop.cpp 2011-08-02 22:20:12 UTC (rev 42547) +++ haiku/trunk/src/servers/app/Desktop.cpp 2011-08-02 22:27:12 UTC (rev 42548) @@ -1300,6 +1300,8 @@ } } + NotifyWindowHidden(window); + UnlockAllWindows(); if (window == fWindowUnderMouse) Modified: haiku/trunk/src/servers/app/DesktopListener.cpp =================================================================== --- haiku/trunk/src/servers/app/DesktopListener.cpp 2011-08-02 22:20:12 UTC (rev 42547) +++ haiku/trunk/src/servers/app/DesktopListener.cpp 2011-08-02 22:27:12 UTC (rev 42548) @@ -230,6 +230,19 @@ void +DesktopObservable::NotifyWindowHidden(Window* window) +{ + if (fWeAreInvoking) + return; + InvokeGuard invokeGuard(fWeAreInvoking); + + for (DesktopListener* listener = fDesktopListenerList.First(); + listener != NULL; listener = fDesktopListenerList.GetNext(listener)) + listener->WindowHidden(window); +} + + +void DesktopObservable::NotifyWindowMinimized(Window* window, bool minimize) { if (fWeAreInvoking) Modified: haiku/trunk/src/servers/app/DesktopListener.h =================================================================== --- haiku/trunk/src/servers/app/DesktopListener.h 2011-08-02 22:20:12 UTC (rev 42547) +++ haiku/trunk/src/servers/app/DesktopListener.h 2011-08-02 22:27:12 UTC (rev 42548) @@ -55,6 +55,7 @@ Window* behindOf) = 0; virtual void WindowWorkspacesChanged(Window* window, uint32 workspaces) = 0; + virtual void WindowHidden(Window* window) = 0; virtual void WindowMinimized(Window* window, bool minimize) = 0; @@ -111,6 +112,7 @@ Window* behindOf); void NotifyWindowWorkspacesChanged(Window* window, uint32 workspaces); + void NotifyWindowHidden(Window* window); void NotifyWindowMinimized(Window* window, bool minimize); Modified: haiku/trunk/src/servers/app/stackandtile/StackAndTile.cpp =================================================================== --- haiku/trunk/src/servers/app/stackandtile/StackAndTile.cpp 2011-08-02 22:20:12 UTC (rev 42547) +++ haiku/trunk/src/servers/app/stackandtile/StackAndTile.cpp 2011-08-02 22:27:12 UTC (rev 42548) @@ -270,7 +270,7 @@ StackAndTile::WindowMoved(Window* window) { SATWindow* satWindow = GetSATWindow(window); - if (!satWindow) + if (satWindow == NULL) return; if (SATKeyPressed() && fCurrentSATWindow) @@ -284,7 +284,7 @@ StackAndTile::WindowResized(Window* window) { SATWindow* satWindow = GetSATWindow(window); - if (!satWindow) + if (satWindow == NULL) return; satWindow->Resized(); @@ -298,8 +298,8 @@ void StackAndTile::WindowActitvated(Window* window) { - SATWindow* satWindow = GetSATWindow(window); - if (!satWindow) + SATWindow* satWindow = GetSATWindow(window); + if (satWindow == NULL) return; _ActivateWindow(satWindow); } @@ -308,14 +308,14 @@ void StackAndTile::WindowSentBehind(Window* window, Window* behindOf) { - SATWindow* satWindow = GetSATWindow(window); - if (!satWindow) + SATWindow* satWindow = GetSATWindow(window); + if (satWindow == NULL) return; SATGroup* group = satWindow->GetGroup(); - if (!group) + if (group == NULL) return; Desktop* desktop = satWindow->GetWindow()->Desktop(); - if (!desktop) + if (desktop == NULL) return; WindowIterator iter(group, true); @@ -330,14 +330,14 @@ void StackAndTile::WindowWorkspacesChanged(Window* window, uint32 workspaces) { - SATWindow* satWindow = GetSATWindow(window); - if (!satWindow) + SATWindow* satWindow = GetSATWindow(window); + if (satWindow == NULL) return; SATGroup* group = satWindow->GetGroup(); - if (!group) + if (group == NULL) return; Desktop* desktop = satWindow->GetWindow()->Desktop(); - if (!desktop) + if (desktop == NULL) return; for (int i = 0; i < group->CountItems(); i++) { @@ -349,16 +349,29 @@ void +StackAndTile::WindowHidden(Window* window) +{ + SATWindow* satWindow = GetSATWindow(window); + if (satWindow == NULL) + return; + SATGroup* group = satWindow->GetGroup(); + if (group == NULL) + return; + group->RemoveWindow(satWindow); +} + + +void StackAndTile::WindowMinimized(Window* window, bool minimize) { - SATWindow* satWindow = GetSATWindow(window); - if (!satWindow) + SATWindow* satWindow = GetSATWindow(window); + if (satWindow == NULL) return; SATGroup* group = satWindow->GetGroup(); - if (!group) + if (group == NULL) return; Desktop* desktop = satWindow->GetWindow()->Desktop(); - if (!desktop) + if (desktop == NULL) return; for (int i = 0; i < group->CountItems(); i++) { Modified: haiku/trunk/src/servers/app/stackandtile/StackAndTile.h =================================================================== --- haiku/trunk/src/servers/app/stackandtile/StackAndTile.h 2011-08-02 22:20:12 UTC (rev 42547) +++ haiku/trunk/src/servers/app/stackandtile/StackAndTile.h 2011-08-02 22:27:12 UTC (rev 42548) @@ -72,6 +72,7 @@ Window* behindOf); virtual void WindowWorkspacesChanged(Window* window, uint32 workspaces); + virtual void WindowHidden(Window* window); virtual void WindowMinimized(Window* window, bool minimize); virtual void WindowTabLocationChanged(Window* window,