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.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42548 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Clemens Zeidler
2011-08-02 22:27:12 +00:00
parent 1c44bb2157
commit 55fbf11fd7
5 changed files with 48 additions and 17 deletions
+2
View File
@@ -1300,6 +1300,8 @@ Desktop::HideWindow(Window* window)
} }
} }
NotifyWindowHidden(window);
UnlockAllWindows(); UnlockAllWindows();
if (window == fWindowUnderMouse) if (window == fWindowUnderMouse)
+13
View File
@@ -229,6 +229,19 @@ DesktopObservable::NotifyWindowWorkspacesChanged(Window* window,
} }
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 void
DesktopObservable::NotifyWindowMinimized(Window* window, bool minimize) DesktopObservable::NotifyWindowMinimized(Window* window, bool minimize)
{ {
+2
View File
@@ -55,6 +55,7 @@ public:
Window* behindOf) = 0; Window* behindOf) = 0;
virtual void WindowWorkspacesChanged(Window* window, virtual void WindowWorkspacesChanged(Window* window,
uint32 workspaces) = 0; uint32 workspaces) = 0;
virtual void WindowHidden(Window* window) = 0;
virtual void WindowMinimized(Window* window, virtual void WindowMinimized(Window* window,
bool minimize) = 0; bool minimize) = 0;
@@ -111,6 +112,7 @@ public:
Window* behindOf); Window* behindOf);
void NotifyWindowWorkspacesChanged(Window* window, void NotifyWindowWorkspacesChanged(Window* window,
uint32 workspaces); uint32 workspaces);
void NotifyWindowHidden(Window* window);
void NotifyWindowMinimized(Window* window, void NotifyWindowMinimized(Window* window,
bool minimize); bool minimize);
+30 -17
View File
@@ -270,7 +270,7 @@ void
StackAndTile::WindowMoved(Window* window) StackAndTile::WindowMoved(Window* window)
{ {
SATWindow* satWindow = GetSATWindow(window); SATWindow* satWindow = GetSATWindow(window);
if (!satWindow) if (satWindow == NULL)
return; return;
if (SATKeyPressed() && fCurrentSATWindow) if (SATKeyPressed() && fCurrentSATWindow)
@@ -284,7 +284,7 @@ void
StackAndTile::WindowResized(Window* window) StackAndTile::WindowResized(Window* window)
{ {
SATWindow* satWindow = GetSATWindow(window); SATWindow* satWindow = GetSATWindow(window);
if (!satWindow) if (satWindow == NULL)
return; return;
satWindow->Resized(); satWindow->Resized();
@@ -298,8 +298,8 @@ StackAndTile::WindowResized(Window* window)
void void
StackAndTile::WindowActitvated(Window* window) StackAndTile::WindowActitvated(Window* window)
{ {
SATWindow* satWindow = GetSATWindow(window); SATWindow* satWindow = GetSATWindow(window);
if (!satWindow) if (satWindow == NULL)
return; return;
_ActivateWindow(satWindow); _ActivateWindow(satWindow);
} }
@@ -308,14 +308,14 @@ StackAndTile::WindowActitvated(Window* window)
void void
StackAndTile::WindowSentBehind(Window* window, Window* behindOf) StackAndTile::WindowSentBehind(Window* window, Window* behindOf)
{ {
SATWindow* satWindow = GetSATWindow(window); SATWindow* satWindow = GetSATWindow(window);
if (!satWindow) if (satWindow == NULL)
return; return;
SATGroup* group = satWindow->GetGroup(); SATGroup* group = satWindow->GetGroup();
if (!group) if (group == NULL)
return; return;
Desktop* desktop = satWindow->GetWindow()->Desktop(); Desktop* desktop = satWindow->GetWindow()->Desktop();
if (!desktop) if (desktop == NULL)
return; return;
WindowIterator iter(group, true); WindowIterator iter(group, true);
@@ -330,14 +330,14 @@ StackAndTile::WindowSentBehind(Window* window, Window* behindOf)
void void
StackAndTile::WindowWorkspacesChanged(Window* window, uint32 workspaces) StackAndTile::WindowWorkspacesChanged(Window* window, uint32 workspaces)
{ {
SATWindow* satWindow = GetSATWindow(window); SATWindow* satWindow = GetSATWindow(window);
if (!satWindow) if (satWindow == NULL)
return; return;
SATGroup* group = satWindow->GetGroup(); SATGroup* group = satWindow->GetGroup();
if (!group) if (group == NULL)
return; return;
Desktop* desktop = satWindow->GetWindow()->Desktop(); Desktop* desktop = satWindow->GetWindow()->Desktop();
if (!desktop) if (desktop == NULL)
return; return;
for (int i = 0; i < group->CountItems(); i++) { for (int i = 0; i < group->CountItems(); i++) {
@@ -349,16 +349,29 @@ StackAndTile::WindowWorkspacesChanged(Window* window, uint32 workspaces)
void void
StackAndTile::WindowMinimized(Window* window, bool minimize) StackAndTile::WindowHidden(Window* window)
{ {
SATWindow* satWindow = GetSATWindow(window); SATWindow* satWindow = GetSATWindow(window);
if (!satWindow) if (satWindow == NULL)
return; return;
SATGroup* group = satWindow->GetGroup(); SATGroup* group = satWindow->GetGroup();
if (!group) if (group == NULL)
return;
group->RemoveWindow(satWindow);
}
void
StackAndTile::WindowMinimized(Window* window, bool minimize)
{
SATWindow* satWindow = GetSATWindow(window);
if (satWindow == NULL)
return;
SATGroup* group = satWindow->GetGroup();
if (group == NULL)
return; return;
Desktop* desktop = satWindow->GetWindow()->Desktop(); Desktop* desktop = satWindow->GetWindow()->Desktop();
if (!desktop) if (desktop == NULL)
return; return;
for (int i = 0; i < group->CountItems(); i++) { for (int i = 0; i < group->CountItems(); i++) {
@@ -72,6 +72,7 @@ public:
Window* behindOf); Window* behindOf);
virtual void WindowWorkspacesChanged(Window* window, virtual void WindowWorkspacesChanged(Window* window,
uint32 workspaces); uint32 workspaces);
virtual void WindowHidden(Window* window);
virtual void WindowMinimized(Window* window, bool minimize); virtual void WindowMinimized(Window* window, bool minimize);
virtual void WindowTabLocationChanged(Window* window, virtual void WindowTabLocationChanged(Window* window,