[haiku-commits] r42548 - in haiku/trunk/src/servers/app: . stackandtile

  • From: clemens.zeidler@xxxxxxxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Wed, 3 Aug 2011 00:27:12 +0200 (CEST)

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,


Other related posts:

  • » [haiku-commits] r42548 - in haiku/trunk/src/servers/app: . stackandtile - clemens . zeidler