[haiku-commits] r37912 - haiku/trunk/src/servers/app

  • From: clemens.zeidler@xxxxxxxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Thu, 5 Aug 2010 00:09:57 +0200 (CEST)

Author: czeidler
Date: 2010-08-05 00:09:57 +0200 (Thu, 05 Aug 2010)
New Revision: 37912
Changeset: http://dev.haiku-os.org/changeset/37912

Modified:
   haiku/trunk/src/servers/app/Desktop.cpp
   haiku/trunk/src/servers/app/Desktop.h
   haiku/trunk/src/servers/app/DesktopListener.cpp
   haiku/trunk/src/servers/app/DesktopListener.h
Log:
- Notify listener when they are registered and unregistered.
- First reload decorators and then the listeners. (my SAT listener caches the 
decorator when it is registered so the new one should already be loaded)
- Make the Desktop all window list accessible, help full when a listener is 
registered and want to iterate over the existing windows.



Modified: haiku/trunk/src/servers/app/Desktop.cpp
===================================================================
--- haiku/trunk/src/servers/app/Desktop.cpp     2010-08-04 22:01:43 UTC (rev 
37911)
+++ haiku/trunk/src/servers/app/Desktop.cpp     2010-08-04 22:09:57 UTC (rev 
37912)
@@ -359,6 +359,12 @@
                return;
 
        fLink.SetReceiverPort(fMessagePort);
+
+       // register listeners
+       const DesktopListenerList& newListeners
+               = gDecorManager.GetDesktopListeners();
+       for (int i = 0; i < newListeners.CountItems(); i++)
+               RegisterListener(newListeners.ItemAt(i));
 }
 
 
@@ -372,6 +378,13 @@
 }
 
 
+void
+Desktop::RegisterListener(DesktopListener* listener)
+{
+       DesktopObservable::RegisterListener(listener, this);
+}
+
+
 status_t
 Desktop::Init()
 {
@@ -1906,6 +1919,20 @@
 {
        AutoWriteLocker _(fWindowLock);
 
+       for (Window* window = fAllWindows.FirstWindow(); window != NULL;
+                       window = window->NextWindow(kAllWindowList)) {
+                       BRegion oldBorder;
+                       window->GetBorderRegion(&oldBorder);
+
+                       window->ReloadDecor();
+
+                       BRegion border;
+                       window->GetBorderRegion(&border);
+
+                       border.Include(&oldBorder);
+                       _RebuildAndRedrawAfterWindowChange(window, border);
+       }
+
        // TODO it is assumed all listeners are registered by one decor
        // unregister old listeners
        const DesktopListenerDLList& currentListeners = 
GetDesktopListenerList();
@@ -1917,22 +1944,6 @@
                = gDecorManager.GetDesktopListeners();
        for (int i = 0; i < newListeners.CountItems(); i++)
                RegisterListener(newListeners.ItemAt(i));
-
-       for (int32 i = 0; i < kMaxWorkspaces; i++) {
-               for (Window* window = _Windows(i).LastWindow(); window;
-                               window = window->PreviousWindow(i)) {
-                       BRegion oldBorder;
-                       window->GetBorderRegion(&oldBorder);
-
-                       window->ReloadDecor();
-
-                       BRegion border;
-                       window->GetBorderRegion(&border);
-
-                       border.Include(&oldBorder);
-                       _RebuildAndRedrawAfterWindowChange(window, border);
-               }
-       }
 }
 
 
@@ -2464,6 +2475,13 @@
 
 
 WindowList&
+Desktop::AllWindows()
+{
+       return fAllWindows;
+}
+
+
+WindowList&
 Desktop::_Windows(int32 index)
 {
        return fWorkspaces[index].Windows();

Modified: haiku/trunk/src/servers/app/Desktop.h
===================================================================
--- haiku/trunk/src/servers/app/Desktop.h       2010-08-04 22:01:43 UTC (rev 
37911)
+++ haiku/trunk/src/servers/app/Desktop.h       2010-08-04 22:09:57 UTC (rev 
37912)
@@ -65,6 +65,8 @@
                                                                Desktop(uid_t 
userID, const char* targetScreen);
        virtual                                         ~Desktop();
 
+                       void                            
RegisterListener(DesktopListener* listener);
+
                        status_t                        Init();
 
                        uid_t                           UserID() const { return 
fUserID; }
@@ -251,6 +253,7 @@
                                                                        
BPrivate::LinkSender& sender);
 
                        WindowList&                     CurrentWindows();
+                       WindowList&                     AllWindows();
 
 private:
                        WindowList&                     _Windows(int32 index);

Modified: haiku/trunk/src/servers/app/DesktopListener.cpp
===================================================================
--- haiku/trunk/src/servers/app/DesktopListener.cpp     2010-08-04 22:01:43 UTC 
(rev 37911)
+++ haiku/trunk/src/servers/app/DesktopListener.cpp     2010-08-04 22:09:57 UTC 
(rev 37912)
@@ -25,9 +25,10 @@
 
 
 void
-DesktopObservable::RegisterListener(DesktopListener* listener)
+DesktopObservable::RegisterListener(DesktopListener* listener, Desktop* 
desktop)
 {
        fDesktopListenerList.Add(listener);
+       listener->ListenerRegistered(desktop);
 }
 
 
@@ -35,6 +36,7 @@
 DesktopObservable::UnregisterListener(DesktopListener* listener)
 {
        fDesktopListenerList.Remove(listener);
+       listener->ListenerUnregistered();
 }
 
 

Modified: haiku/trunk/src/servers/app/DesktopListener.h
===================================================================
--- haiku/trunk/src/servers/app/DesktopListener.h       2010-08-04 22:01:43 UTC 
(rev 37911)
+++ haiku/trunk/src/servers/app/DesktopListener.h       2010-08-04 22:09:57 UTC 
(rev 37912)
@@ -15,6 +15,7 @@
 
 
 class BMessage;
+class Desktop;
 class Window;
 
 
@@ -22,6 +23,9 @@
 public:
        virtual                                         ~DesktopListener();
 
+       virtual void                            ListenerRegistered(Desktop* 
desktop) = 0;
+       virtual void                            ListenerUnregistered() = 0;
+
        virtual void                            AddWindow(Window* window) = 0;
        virtual void                            RemoveWindow(Window* window) = 
0;
        
@@ -61,7 +65,8 @@
 public:
                                                        DesktopObservable();
 
-               void                            
RegisterListener(DesktopListener* listener);
+               void                            
RegisterListener(DesktopListener* listener,
+                                                               Desktop* 
desktop);
                void                            
UnregisterListener(DesktopListener* listener);
        const DesktopListenerDLList&    GetDesktopListenerList();
 


Other related posts:

  • » [haiku-commits] r37912 - haiku/trunk/src/servers/app - clemens . zeidler