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();
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
DesktopObservable::NotifyWindowMinimized(Window* window, bool minimize)
{
+2
View File
@@ -55,6 +55,7 @@ public:
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 @@ public:
Window* behindOf);
void NotifyWindowWorkspacesChanged(Window* window,
uint32 workspaces);
void NotifyWindowHidden(Window* window);
void NotifyWindowMinimized(Window* window,
bool minimize);
+30 -17
View File
@@ -270,7 +270,7 @@ void
StackAndTile::WindowMoved(Window* window)
{
SATWindow* satWindow = GetSATWindow(window);
if (!satWindow)
if (satWindow == NULL)
return;
if (SATKeyPressed() && fCurrentSATWindow)
@@ -284,7 +284,7 @@ void
StackAndTile::WindowResized(Window* window)
{
SATWindow* satWindow = GetSATWindow(window);
if (!satWindow)
if (satWindow == NULL)
return;
satWindow->Resized();
@@ -298,8 +298,8 @@ StackAndTile::WindowResized(Window* window)
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 @@ StackAndTile::WindowActitvated(Window* window)
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 @@ StackAndTile::WindowSentBehind(Window* window, Window* behindOf)
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 @@ StackAndTile::WindowWorkspacesChanged(Window* window, uint32 workspaces)
void
StackAndTile::WindowMinimized(Window* window, bool minimize)
StackAndTile::WindowHidden(Window* window)
{
SATWindow* satWindow = GetSATWindow(window);
if (!satWindow)
SATWindow* satWindow = GetSATWindow(window);
if (satWindow == NULL)
return;
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;
Desktop* desktop = satWindow->GetWindow()->Desktop();
if (!desktop)
if (desktop == NULL)
return;
for (int i = 0; i < group->CountItems(); i++) {
@@ -72,6 +72,7 @@ public:
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,