Author: czeidler Date: 2010-08-13 01:05:31 +0200 (Fri, 13 Aug 2010) New Revision: 38072 Changeset: http://dev.haiku-os.org/changeset/38072 Modified: haiku/trunk/src/servers/app/Desktop.cpp haiku/trunk/src/servers/app/DesktopListener.cpp haiku/trunk/src/servers/app/DesktopListener.h Log: Rework listener interface as suggested by Axel. Modified: haiku/trunk/src/servers/app/Desktop.cpp =================================================================== --- haiku/trunk/src/servers/app/Desktop.cpp 2010-08-12 22:37:16 UTC (rev 38071) +++ haiku/trunk/src/servers/app/Desktop.cpp 2010-08-12 23:05:31 UTC (rev 38072) @@ -251,21 +251,21 @@ switch (message->what) { case B_MOUSE_DOWN: window->MouseDown(message, where, &viewToken); - fDesktop->InvokeMouseDown(window, message, where); + fDesktop->MouseDown(window, message, where); break; case B_MOUSE_UP: window->MouseUp(message, where, &viewToken); if (buttons == 0) fDesktop->SetMouseEventWindow(NULL); - fDesktop->InvokeMouseUp(window, message, where); + fDesktop->MouseUp(window, message, where); break; case B_MOUSE_MOVED: window->MouseMoved(message, where, &viewToken, latestMouseMoved == NULL || latestMouseMoved == message, false); - fDesktop->InvokeMouseMoved(window, message, where); + fDesktop->MouseMoved(window, message, where); break; } @@ -287,7 +287,7 @@ fDesktop->SetLastMouseState(where, buttons, window); - fDesktop->InvokeMouseEvent(message); + fDesktop->MouseEvent(message); fDesktop->UnlockAllWindows(); @@ -492,7 +492,7 @@ void Desktop::KeyEvent(uint32 what, int32 key, int32 modifiers) { - InvokeKeyEvent(what, key, modifiers); + KeyPressed(what, key, modifiers); } @@ -921,7 +921,7 @@ AutoWriteLocker _(fWindowLock); - InvokeActivateWindow(window); + WindowActitvated(window); bool windowOnOtherWorkspace = !window->InWorkspace(fCurrentWorkspace); if (windowOnOtherWorkspace @@ -1076,7 +1076,7 @@ _WindowChanged(window); - InvokeSendWindowBehind(window, behindOf); + WindowSentBehind(window, behindOf); UnlockAllWindows(); @@ -1121,8 +1121,6 @@ // it knows the mouse is over it. _SendFakeMouseMoved(window); - - InvokeShowWindow(window); } @@ -1176,8 +1174,6 @@ } } - InvokeHideWindow(window); - UnlockAllWindows(); if (window == fWindowUnderMouse) @@ -1194,11 +1190,11 @@ if (minimize && !window->IsHidden()) { HideWindow(window); window->SetMinimized(minimize); - InvokeMinimizeWindow(window, minimize); + WindowMinimized(window, minimize); } else if (!minimize && window->IsHidden()) { ActivateWindow(window); // this will unminimize the window for us - InvokeMinimizeWindow(window, minimize); + WindowMinimized(window, minimize); } UnlockAllWindows(); @@ -1229,7 +1225,7 @@ } else window->MoveBy((int32)x, (int32)y); - InvokeMoveWindow(window); + WindowMoved(window); UnlockAllWindows(); return; } @@ -1284,7 +1280,7 @@ B_DIRECT_START | B_BUFFER_MOVED | B_CLIPPING_MODIFIED); } - InvokeMoveWindow(window); + WindowMoved(window); UnlockAllWindows(); } @@ -1301,7 +1297,7 @@ if (!window->IsVisible()) { window->ResizeBy((int32)x, (int32)y, NULL); - InvokeResizeWindow(window); + WindowResized(window); UnlockAllWindows(); return; } @@ -1344,7 +1340,7 @@ B_DIRECT_START | B_BUFFER_RESIZED | B_CLIPPING_MODIFIED); } - InvokeResizeWindow(window); + WindowResized(window); UnlockAllWindows(); } @@ -1360,7 +1356,7 @@ if (changed) RebuildAndRedrawAfterWindowChange(window, dirty); - InvokeSetWindowTabLocation(window, location); + WindowTabLocationChanged(window, location); return changed; } @@ -1373,7 +1369,7 @@ BRegion dirty; bool changed = window->SetDecoratorSettings(settings, dirty); - bool listenerChanged = InvokeSetDecoratorSettings(window, settings); + bool listenerChanged = SetDecoratorSettings(window, settings); if (changed || listenerChanged) RebuildAndRedrawAfterWindowChange(window, dirty); @@ -1421,7 +1417,7 @@ _ChangeWindowWorkspaces(window, 0, window->Workspaces()); - InvokeAddWindow(window); + WindowAdded(window); UnlockAllWindows(); } @@ -1441,7 +1437,7 @@ _ChangeWindowWorkspaces(window, window->Workspaces(), 0); - InvokeRemoveWindow(window); + WindowRemoved(window); UnlockAllWindows(); @@ -2083,7 +2079,7 @@ ::Window* tmp = window->Window(); if (tmp) { BMessage message; - InvokeGetDecoratorSettings(tmp, message); + GetDecoratorSettings(tmp, message); if (tmp->GetDecoratorSettings(&message)) { BRect tabFrame; message.FindRect("tab frame", &tabFrame); @@ -2824,7 +2820,7 @@ // take care about modals and floating windows _UpdateSubsetWorkspaces(window); - InvokeSetWindowWorkspaces(window, newWorkspaces); + WindowWorkspacesChanged(window, newWorkspaces); UnlockAllWindows(); } @@ -3229,7 +3225,7 @@ // send B_WORKSPACES_CHANGED message movedWindow->WorkspacesChanged(oldWorkspaces, movedWindow->Workspaces()); - InvokeSetWindowWorkspaces(movedWindow, movedWindow->Workspaces()); + WindowWorkspacesChanged(movedWindow, movedWindow->Workspaces()); } else { // make sure it's frontmost _Windows(index).RemoveWindow(movedWindow); Modified: haiku/trunk/src/servers/app/DesktopListener.cpp =================================================================== --- haiku/trunk/src/servers/app/DesktopListener.cpp 2010-08-12 22:37:16 UTC (rev 38071) +++ haiku/trunk/src/servers/app/DesktopListener.cpp 2010-08-12 23:05:31 UTC (rev 38072) @@ -53,225 +53,217 @@ void -DesktopObservable::InvokeAddWindow(Window* window) +DesktopObservable::WindowAdded(Window* window) { if (fWeAreInvoking) return; InvokeGuard invokeGuard(fWeAreInvoking); - FOR_ALL_DESKTOP_LISTENER - listener->AddWindow(window); + for (DesktopListener* listener = fDesktopListenerList.First(); + listener != NULL; listener = fDesktopListenerList.GetNext(listener)) + listener->WindowAdded(window); } void -DesktopObservable::InvokeRemoveWindow(Window* window) +DesktopObservable::WindowRemoved(Window* window) { if (fWeAreInvoking) return; InvokeGuard invokeGuard(fWeAreInvoking); - FOR_ALL_DESKTOP_LISTENER - listener->RemoveWindow(window); + for (DesktopListener* listener = fDesktopListenerList.First(); + listener != NULL; listener = fDesktopListenerList.GetNext(listener)) + listener->WindowRemoved(window); } void -DesktopObservable::InvokeKeyEvent(uint32 what, int32 key, int32 modifiers) +DesktopObservable::KeyPressed(uint32 what, int32 key, int32 modifiers) { if (fWeAreInvoking) return; InvokeGuard invokeGuard(fWeAreInvoking); - FOR_ALL_DESKTOP_LISTENER - listener->KeyEvent(what, key, modifiers); + for (DesktopListener* listener = fDesktopListenerList.First(); + listener != NULL; listener = fDesktopListenerList.GetNext(listener)) + listener->KeyPressed(what, key, modifiers); } void -DesktopObservable::InvokeMouseEvent(BMessage* message) +DesktopObservable::MouseEvent(BMessage* message) { if (fWeAreInvoking) return; InvokeGuard invokeGuard(fWeAreInvoking); - FOR_ALL_DESKTOP_LISTENER + for (DesktopListener* listener = fDesktopListenerList.First(); + listener != NULL; listener = fDesktopListenerList.GetNext(listener)) listener->MouseEvent(message); } void -DesktopObservable::InvokeMouseDown(Window* window, BMessage* message, +DesktopObservable::MouseDown(Window* window, BMessage* message, const BPoint& where) { if (fWeAreInvoking) return; InvokeGuard invokeGuard(fWeAreInvoking); - FOR_ALL_DESKTOP_LISTENER + for (DesktopListener* listener = fDesktopListenerList.First(); + listener != NULL; listener = fDesktopListenerList.GetNext(listener)) listener->MouseDown(window, message, where); } void -DesktopObservable::InvokeMouseUp(Window* window, BMessage* message, +DesktopObservable::MouseUp(Window* window, BMessage* message, const BPoint& where) { if (fWeAreInvoking) return; InvokeGuard invokeGuard(fWeAreInvoking); - FOR_ALL_DESKTOP_LISTENER + for (DesktopListener* listener = fDesktopListenerList.First(); + listener != NULL; listener = fDesktopListenerList.GetNext(listener)) listener->MouseUp(window, message, where); } void -DesktopObservable::InvokeMouseMoved(Window* window, BMessage* message, +DesktopObservable::MouseMoved(Window* window, BMessage* message, const BPoint& where) { if (fWeAreInvoking) return; InvokeGuard invokeGuard(fWeAreInvoking); - FOR_ALL_DESKTOP_LISTENER + for (DesktopListener* listener = fDesktopListenerList.First(); + listener != NULL; listener = fDesktopListenerList.GetNext(listener)) listener->MouseMoved(window, message, where); } void -DesktopObservable::InvokeMoveWindow(Window* window) +DesktopObservable::WindowMoved(Window* window) { if (fWeAreInvoking) return; InvokeGuard invokeGuard(fWeAreInvoking); - FOR_ALL_DESKTOP_LISTENER - listener->MoveWindow(window); + for (DesktopListener* listener = fDesktopListenerList.First(); + listener != NULL; listener = fDesktopListenerList.GetNext(listener)) + listener->WindowMoved(window); } void -DesktopObservable::InvokeResizeWindow(Window* window) +DesktopObservable::WindowResized(Window* window) { if (fWeAreInvoking) return; InvokeGuard invokeGuard(fWeAreInvoking); - FOR_ALL_DESKTOP_LISTENER - listener->ResizeWindow(window); + for (DesktopListener* listener = fDesktopListenerList.First(); + listener != NULL; listener = fDesktopListenerList.GetNext(listener)) + listener->WindowResized(window); } void -DesktopObservable::InvokeActivateWindow(Window* window) +DesktopObservable::WindowActitvated(Window* window) { if (fWeAreInvoking) return; InvokeGuard invokeGuard(fWeAreInvoking); - FOR_ALL_DESKTOP_LISTENER - listener->ActivateWindow(window); + for (DesktopListener* listener = fDesktopListenerList.First(); + listener != NULL; listener = fDesktopListenerList.GetNext(listener)) + listener->WindowActitvated(window); } void -DesktopObservable::InvokeSendWindowBehind(Window* window, Window* behindOf) +DesktopObservable::WindowSentBehind(Window* window, Window* behindOf) { if (fWeAreInvoking) return; InvokeGuard invokeGuard(fWeAreInvoking); - FOR_ALL_DESKTOP_LISTENER - listener->SendWindowBehind(window, behindOf); + for (DesktopListener* listener = fDesktopListenerList.First(); + listener != NULL; listener = fDesktopListenerList.GetNext(listener)) + listener->WindowSentBehind(window, behindOf); } void -DesktopObservable::InvokeSetWindowTabLocation(Window* window, float location) +DesktopObservable::WindowWorkspacesChanged(Window* window, uint32 workspaces) { if (fWeAreInvoking) return; InvokeGuard invokeGuard(fWeAreInvoking); - FOR_ALL_DESKTOP_LISTENER - listener->SetWindowTabLocation(window, location); + for (DesktopListener* listener = fDesktopListenerList.First(); + listener != NULL; listener = fDesktopListenerList.GetNext(listener)) + listener->WindowWorkspacesChanged(window, workspaces); } -bool -DesktopObservable::InvokeSetDecoratorSettings(Window* window, - const BMessage& settings) -{ - if (fWeAreInvoking) - return false; - InvokeGuard invokeGuard(fWeAreInvoking); - - bool changed = false; - FOR_ALL_DESKTOP_LISTENER - changed = changed | listener->SetDecoratorSettings(window, settings); - - return changed; -} - - void -DesktopObservable::InvokeGetDecoratorSettings(Window* window, BMessage& settings) +DesktopObservable::WindowMinimized(Window* window, bool minimize) { if (fWeAreInvoking) return; InvokeGuard invokeGuard(fWeAreInvoking); - FOR_ALL_DESKTOP_LISTENER - listener->GetDecoratorSettings(window, settings); + for (DesktopListener* listener = fDesktopListenerList.First(); + listener != NULL; listener = fDesktopListenerList.GetNext(listener)) + listener->WindowMinimized(window, minimize); } void -DesktopObservable::InvokeSetWindowWorkspaces(Window* window, uint32 workspaces) +DesktopObservable::WindowTabLocationChanged(Window* window, float location) { if (fWeAreInvoking) return; InvokeGuard invokeGuard(fWeAreInvoking); - FOR_ALL_DESKTOP_LISTENER - listener->SetWindowWorkspaces(window, workspaces); + for (DesktopListener* listener = fDesktopListenerList.First(); + listener != NULL; listener = fDesktopListenerList.GetNext(listener)) + listener->WindowTabLocationChanged(window, location); } -void -DesktopObservable::InvokeShowWindow(Window* window) +bool +DesktopObservable::SetDecoratorSettings(Window* window, + const BMessage& settings) { if (fWeAreInvoking) - return; + return false; InvokeGuard invokeGuard(fWeAreInvoking); - FOR_ALL_DESKTOP_LISTENER - listener->ShowWindow(window); -} + bool changed = false; + for (DesktopListener* listener = fDesktopListenerList.First(); + listener != NULL; listener = fDesktopListenerList.GetNext(listener)) + changed = changed | listener->SetDecoratorSettings(window, settings); - -void -DesktopObservable::InvokeHideWindow(Window* window) -{ - if (fWeAreInvoking) - return; - InvokeGuard invokeGuard(fWeAreInvoking); - - FOR_ALL_DESKTOP_LISTENER - listener->HideWindow(window); + return changed; } void -DesktopObservable::InvokeMinimizeWindow(Window* window, bool minimize) +DesktopObservable::GetDecoratorSettings(Window* window, BMessage& settings) { if (fWeAreInvoking) return; InvokeGuard invokeGuard(fWeAreInvoking); - FOR_ALL_DESKTOP_LISTENER - listener->MinimizeWindow(window, minimize); + for (DesktopListener* listener = fDesktopListenerList.First(); + listener != NULL; listener = fDesktopListenerList.GetNext(listener)) + listener->GetDecoratorSettings(window, settings); } Modified: haiku/trunk/src/servers/app/DesktopListener.h =================================================================== --- haiku/trunk/src/servers/app/DesktopListener.h 2010-08-12 22:37:16 UTC (rev 38071) +++ haiku/trunk/src/servers/app/DesktopListener.h 2010-08-12 23:05:31 UTC (rev 38072) @@ -26,10 +26,10 @@ virtual void ListenerRegistered(Desktop* desktop) = 0; virtual void ListenerUnregistered() = 0; - virtual void AddWindow(Window* window) = 0; - virtual void RemoveWindow(Window* window) = 0; + virtual void WindowAdded(Window* window) = 0; + virtual void WindowRemoved(Window* window) = 0; - virtual void KeyEvent(uint32 what, int32 key, + virtual void KeyPressed(uint32 what, int32 key, int32 modifiers) = 0; virtual void MouseEvent(BMessage* message) = 0; virtual void MouseDown(Window* window, BMessage* message, @@ -39,19 +39,17 @@ virtual void MouseMoved(Window* window, BMessage* message, const BPoint& where) = 0; - virtual void MoveWindow(Window* window) = 0; - virtual void ResizeWindow(Window* window) = 0; - virtual void ActivateWindow(Window* window) = 0; - virtual void SendWindowBehind(Window* window, + virtual void WindowMoved(Window* window) = 0; + virtual void WindowResized(Window* window) = 0; + virtual void WindowActitvated(Window* window) = 0; + virtual void WindowSentBehind(Window* window, Window* behindOf) = 0; - virtual void SetWindowWorkspaces(Window* window, + virtual void WindowWorkspacesChanged(Window* window, uint32 workspaces) = 0; - virtual void ShowWindow(Window* window) = 0; - virtual void HideWindow(Window* window) = 0; - virtual void MinimizeWindow(Window* window, + virtual void WindowMinimized(Window* window, bool minimize) = 0; - virtual void SetWindowTabLocation(Window* window, + virtual void WindowTabLocationChanged(Window* window, float location) = 0; virtual bool SetDecoratorSettings(Window* window, @@ -73,36 +71,33 @@ void UnregisterListener(DesktopListener* listener); const DesktopListenerDLList& GetDesktopListenerList(); - void InvokeAddWindow(Window* window); - void InvokeRemoveWindow(Window* window); + void WindowAdded(Window* window); + void WindowRemoved(Window* window); - void InvokeKeyEvent(uint32 what, int32 key, + void KeyPressed(uint32 what, int32 key, int32 modifiers); - void InvokeMouseEvent(BMessage* message); - void InvokeMouseDown(Window* window, BMessage* message, + void MouseEvent(BMessage* message); + void MouseDown(Window* window, BMessage* message, const BPoint& where); - void InvokeMouseUp(Window* window, BMessage* message, + void MouseUp(Window* window, BMessage* message, const BPoint& where); - void InvokeMouseMoved(Window* window, BMessage* message, + void MouseMoved(Window* window, BMessage* message, const BPoint& where); - void InvokeMoveWindow(Window* window); - void InvokeResizeWindow(Window* window); - void InvokeActivateWindow(Window* window); - void InvokeSendWindowBehind(Window* window, - Window* behindOf); - void InvokeSetWindowWorkspaces(Window* window, + void WindowMoved(Window* window); + void WindowResized(Window* window); + void WindowActitvated(Window* window); + void WindowSentBehind(Window* window, Window* behindOf); + void WindowWorkspacesChanged(Window* window, uint32 workspaces); - void InvokeShowWindow(Window* window); - void InvokeHideWindow(Window* window); - void InvokeMinimizeWindow(Window* window, bool minimize); + void WindowMinimized(Window* window, bool minimize); - void InvokeSetWindowTabLocation(Window* window, + void WindowTabLocationChanged(Window* window, float location); - bool InvokeSetDecoratorSettings(Window* window, + bool SetDecoratorSettings(Window* window, const BMessage& settings); - void InvokeGetDecoratorSettings(Window* window, + void GetDecoratorSettings(Window* window, BMessage& settings); private: