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:
@@ -1300,6 +1300,8 @@ Desktop::HideWindow(Window* window)
|
||||
}
|
||||
}
|
||||
|
||||
NotifyWindowHidden(window);
|
||||
|
||||
UnlockAllWindows();
|
||||
|
||||
if (window == fWindowUnderMouse)
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user