[haiku-commits] r42492 - in haiku/trunk/src: add-ons/decorators/SATDecorator servers/app

  • From: clemens.zeidler@xxxxxxxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Tue, 26 Jul 2011 06:37:28 +0200 (CEST)

Author: czeidler
Date: 2011-07-26 06:37:27 +0200 (Tue, 26 Jul 2011)
New Revision: 42492
Changeset: https://dev.haiku-os.org/changeset/42492
Ticket: https://dev.haiku-os.org/ticket/6647

Modified:
   haiku/trunk/src/add-ons/decorators/SATDecorator/SATWindow.cpp
   haiku/trunk/src/add-ons/decorators/SATDecorator/SATWindow.h
   haiku/trunk/src/add-ons/decorators/SATDecorator/StackAndTile.cpp
   haiku/trunk/src/add-ons/decorators/SATDecorator/StackAndTile.h
   haiku/trunk/src/add-ons/decorators/SATDecorator/Stacking.cpp
   haiku/trunk/src/add-ons/decorators/SATDecorator/Stacking.h
   haiku/trunk/src/add-ons/decorators/SATDecorator/Tiling.cpp
   haiku/trunk/src/add-ons/decorators/SATDecorator/Tiling.h
   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/Window.cpp
Log:
Only allow windows with a normal thick border to S&T. Fixes #6647.



Modified: haiku/trunk/src/add-ons/decorators/SATDecorator/SATWindow.cpp
===================================================================
--- haiku/trunk/src/add-ons/decorators/SATDecorator/SATWindow.cpp       
2011-07-26 02:41:56 UTC (rev 42491)
+++ haiku/trunk/src/add-ons/decorators/SATDecorator/SATWindow.cpp       
2011-07-26 04:37:27 UTC (rev 42492)
@@ -428,6 +428,14 @@
 
 
 void
+SATWindow::WindowLookChanged(window_look look)
+{
+       for (int i = 0; i < fSATSnappingBehaviourList.CountItems(); i++)
+               fSATSnappingBehaviourList.ItemAt(i)->WindowLookChanged(look);
+}
+
+
+void
 SATWindow::FindSnappingCandidates()
 {
        fOngoingSnapping = NULL;

Modified: haiku/trunk/src/add-ons/decorators/SATDecorator/SATWindow.h
===================================================================
--- haiku/trunk/src/add-ons/decorators/SATDecorator/SATWindow.h 2011-07-26 
02:41:56 UTC (rev 42491)
+++ haiku/trunk/src/add-ons/decorators/SATDecorator/SATWindow.h 2011-07-26 
04:37:27 UTC (rev 42492)
@@ -99,6 +99,7 @@
                        bool                            
RemovedFromGroup(SATGroup* group,
                                                                        bool 
stayBelowMouse);
                        void                            
RemovedFromArea(WindowArea* area);
+                       void                            
WindowLookChanged(window_look look);
 
                        bool                            StackWindow(SATWindow* 
child);
 

Modified: haiku/trunk/src/add-ons/decorators/SATDecorator/StackAndTile.cpp
===================================================================
--- haiku/trunk/src/add-ons/decorators/SATDecorator/StackAndTile.cpp    
2011-07-26 02:41:56 UTC (rev 42491)
+++ haiku/trunk/src/add-ons/decorators/SATDecorator/StackAndTile.cpp    
2011-07-26 04:37:27 UTC (rev 42492)
@@ -382,10 +382,19 @@
 void
 StackAndTile::WindowLookChanged(Window* window, window_look look)
 {
-       // if the decorator has been removed remove it from the stacking group
-       if (look != B_NO_BORDER_WINDOW_LOOK)
+       SATWindow* satWindow = GetSATWindow(window);
+       if (!satWindow)
                return;
+       satWindow->WindowLookChanged(look);
+}
 
+
+void
+StackAndTile::WindowFeelChanged(Window* window, window_feel feel)
+{
+       // check if it is still a compatible feel
+       if (feel != B_NORMAL_WINDOW_FEEL)
+               return;
        SATWindow* satWindow = GetSATWindow(window);
        if (!satWindow)
                return;

Modified: haiku/trunk/src/add-ons/decorators/SATDecorator/StackAndTile.h
===================================================================
--- haiku/trunk/src/add-ons/decorators/SATDecorator/StackAndTile.h      
2011-07-26 02:41:56 UTC (rev 42491)
+++ haiku/trunk/src/add-ons/decorators/SATDecorator/StackAndTile.h      
2011-07-26 04:37:27 UTC (rev 42492)
@@ -80,6 +80,8 @@
                                                                        int32 
minHeight, int32 maxHeight);
        virtual void                            WindowLookChanged(Window* 
window,
                                                                        
window_look look);
+       virtual void                            WindowFeelChanged(Window* 
window,
+                                                                       
window_feel feel);
 
        virtual bool                            SetDecoratorSettings(Window* 
window,
                                                                        const 
BMessage& settings);
@@ -166,8 +168,7 @@
        /*! Update the window tab values, solve the layout and move all windows 
in
        the group accordantly. */
        virtual void                            RemovedFromArea(WindowArea* 
area) {}
-       virtual void                            TabLocationMoved(float 
location, bool shifting)
-                                                                       {}
+       virtual void                            WindowLookChanged(window_look 
look) {}
 };
 
 

Modified: haiku/trunk/src/add-ons/decorators/SATDecorator/Stacking.cpp
===================================================================
--- haiku/trunk/src/add-ons/decorators/SATDecorator/Stacking.cpp        
2011-07-26 02:41:56 UTC (rev 42491)
+++ haiku/trunk/src/add-ons/decorators/SATDecorator/Stacking.cpp        
2011-07-26 04:37:27 UTC (rev 42492)
@@ -239,6 +239,9 @@
                Window* win = satWindow->GetWindow();
                if (win == window || !win->Decorator())
                        continue;
+               if (_IsStackableWindow(win) == false
+                       || _IsStackableWindow(window) == false)
+                       continue;
                Decorator::Tab* tab = 
win->Decorator()->TabAt(win->PositionInStack());
                if (tab == NULL)
                        continue;
@@ -277,6 +280,32 @@
 
 
 void
+SATStacking::WindowLookChanged(window_look look)
+{
+       Window* window = fSATWindow->GetWindow();
+       WindowStack* stack = window->GetWindowStack();
+       if (stack == NULL)
+               return;
+       SATGroup* group = fSATWindow->GetGroup();
+       if (group == NULL)
+               return;
+       if (stack->CountWindows() > 1 && _IsStackableWindow(window) == false)
+               group->RemoveWindow(fSATWindow);
+}
+
+
+bool
+SATStacking::_IsStackableWindow(Window* window)
+{
+       if (window->Look() == B_DOCUMENT_WINDOW_LOOK)
+               return true;
+       if (window->Look() == B_TITLED_WINDOW_LOOK)
+               return true;
+       return false;
+}
+
+
+void
 SATStacking::_ClearSearchResult()
 {
        if (!fStackingParent)

Modified: haiku/trunk/src/add-ons/decorators/SATDecorator/Stacking.h
===================================================================
--- haiku/trunk/src/add-ons/decorators/SATDecorator/Stacking.h  2011-07-26 
02:41:56 UTC (rev 42491)
+++ haiku/trunk/src/add-ons/decorators/SATDecorator/Stacking.h  2011-07-26 
04:37:27 UTC (rev 42492)
@@ -34,8 +34,9 @@
                void                            DoWindowLayout();
 
                void                            RemovedFromArea(WindowArea* 
area);
-
+               void                            WindowLookChanged(window_look 
look);
 private:
+               bool                            _IsStackableWindow(Window* 
window);
                void                            _ClearSearchResult();
                void                            _HighlightWindows(bool 
highlight = true);
 

Modified: haiku/trunk/src/add-ons/decorators/SATDecorator/Tiling.cpp
===================================================================
--- haiku/trunk/src/add-ons/decorators/SATDecorator/Tiling.cpp  2011-07-26 
02:41:56 UTC (rev 42491)
+++ haiku/trunk/src/add-ons/decorators/SATDecorator/Tiling.cpp  2011-07-26 
04:37:27 UTC (rev 42492)
@@ -46,6 +46,10 @@
 {
        _ResetSearchResults();
 
+       if (_IsTileableWindow(fSATWindow->GetWindow()) == false
+               || (group->CountItems() == 1
+                       && _IsTileableWindow(group->WindowAt(0)->GetWindow()) 
== false))
+               return false;
        if (fSATWindow->GetGroup() == group)
                return false;
 
@@ -78,7 +82,35 @@
 }
 
 
+void
+SATTiling::WindowLookChanged(window_look look)
+{
+       SATGroup* group = fSATWindow->GetGroup();
+       if (group == NULL)
+               return;
+       if (_IsTileableWindow(fSATWindow->GetWindow()) == false)
+               group->RemoveWindow(fSATWindow);
+}
+
+
 bool
+SATTiling::_IsTileableWindow(Window* window)
+{
+       if (window->Look() == B_DOCUMENT_WINDOW_LOOK)
+               return true;
+       if (window->Look() == B_TITLED_WINDOW_LOOK)
+               return true;
+       if (window->Look() == B_FLOATING_WINDOW_LOOK)
+               return true;
+       if (window->Look() == B_MODAL_WINDOW_LOOK)
+               return true;
+       if (window->Look() == B_BORDERED_WINDOW_LOOK)
+               return true;
+       return false;   
+}
+
+
+bool
 SATTiling::_FindFreeAreaInGroup(SATGroup* group)
 {
        if (_FindFreeAreaInGroup(group, Corner::kLeftTop))

Modified: haiku/trunk/src/add-ons/decorators/SATDecorator/Tiling.h
===================================================================
--- haiku/trunk/src/add-ons/decorators/SATDecorator/Tiling.h    2011-07-26 
02:41:56 UTC (rev 42491)
+++ haiku/trunk/src/add-ons/decorators/SATDecorator/Tiling.h    2011-07-26 
04:37:27 UTC (rev 42492)
@@ -25,7 +25,10 @@
                bool                            
FindSnappingCandidates(SATGroup* group);
                bool                            JoinCandidates();
 
+               void                            WindowLookChanged(window_look 
look);
 private:
+               bool                            _IsTileableWindow(Window* 
window);
+
                bool                            _FindFreeAreaInGroup(SATGroup* 
group);
                bool                            _FindFreeAreaInGroup(SATGroup* 
group,
                                                                
Corner::position_t corner);

Modified: haiku/trunk/src/servers/app/Desktop.cpp
===================================================================
--- haiku/trunk/src/servers/app/Desktop.cpp     2011-07-26 02:41:56 UTC (rev 
42491)
+++ haiku/trunk/src/servers/app/Desktop.cpp     2011-07-26 04:37:27 UTC (rev 
42492)
@@ -1724,6 +1724,8 @@
        if (window == FocusWindow() && !window->IsVisible())
                SetFocusWindow();
 
+       NotifyWindowFeelChanged(window, newFeel);
+
        UnlockAllWindows();
 }
 

Modified: haiku/trunk/src/servers/app/DesktopListener.cpp
===================================================================
--- haiku/trunk/src/servers/app/DesktopListener.cpp     2011-07-26 02:41:56 UTC 
(rev 42491)
+++ haiku/trunk/src/servers/app/DesktopListener.cpp     2011-07-26 04:37:27 UTC 
(rev 42492)
@@ -284,6 +284,19 @@
 }
 
 
+void
+DesktopObservable::NotifyWindowFeelChanged(Window* window, window_feel feel)
+{
+       if (fWeAreInvoking)
+               return;
+       InvokeGuard invokeGuard(fWeAreInvoking);
+
+       for (DesktopListener* listener = fDesktopListenerList.First();
+               listener != NULL; listener = 
fDesktopListenerList.GetNext(listener))
+               listener->WindowFeelChanged(window, feel);
+}
+
+
 bool
 DesktopObservable::SetDecoratorSettings(Window* window,
        const BMessage& settings)

Modified: haiku/trunk/src/servers/app/DesktopListener.h
===================================================================
--- haiku/trunk/src/servers/app/DesktopListener.h       2011-07-26 02:41:56 UTC 
(rev 42491)
+++ haiku/trunk/src/servers/app/DesktopListener.h       2011-07-26 04:37:27 UTC 
(rev 42492)
@@ -65,6 +65,8 @@
                                                                        int32 
minHeight, int32 maxHeight) = 0;
        virtual void                            WindowLookChanged(Window* 
window,
                                                                        
window_look look) = 0;
+       virtual void                            WindowFeelChanged(Window* 
window,
+                                                                       
window_feel feel) = 0;
 
        virtual bool                            SetDecoratorSettings(Window* 
window,
                                                                        const 
BMessage& settings) = 0;
@@ -119,6 +121,8 @@
                                                                        int32 
minHeight, int32 maxHeight);
                        void                            
NotifyWindowLookChanged(Window* window,
                                                                        
window_look look);
+                       void                            
NotifyWindowFeelChanged(Window* window,
+                                                                       
window_feel feel);
 
                        bool                            
SetDecoratorSettings(Window* window,
                                                                        const 
BMessage& settings);

Modified: haiku/trunk/src/servers/app/Window.cpp
===================================================================
--- haiku/trunk/src/servers/app/Window.cpp      2011-07-26 02:41:56 UTC (rev 
42491)
+++ haiku/trunk/src/servers/app/Window.cpp      2011-07-26 04:37:27 UTC (rev 
42492)
@@ -2100,6 +2100,8 @@
                decorator->SetDrawingEngine(remainingTop->fDrawingEngine);
                // propagate focus to the decorator
                remainingTop->SetFocus(remainingTop->IsFocus());
+               remainingTop->SetFeel(remainingTop->Feel());
+               remainingTop->SetLook(remainingTop->Look(), &dirty);
        }
 
        fCurrentStack = NULL;
@@ -2185,7 +2187,6 @@
 }
 
 
-
 bool
 Window::MoveToTopStackLayer()
 {


Other related posts:

  • » [haiku-commits] r42492 - in haiku/trunk/src: add-ons/decorators/SATDecorator servers/app - clemens . zeidler