1 /* 2 * Copyright 2010, Haiku. 3 * Distributed under the terms of the MIT License. 4 * 5 * Authors: 6 * Clemens Zeidler <haiku@clemens-zeidler.de> 7 */ 8 #ifndef DESKTOP_LISTENER_H 9 #define DESKTOP_LISTENER_H 10 11 12 #include <util/DoublyLinkedList.h> 13 14 #include <Point.h> 15 16 17 class BMessage; 18 class Desktop; 19 class Window; 20 21 22 class DesktopListener : public DoublyLinkedListLinkImpl<DesktopListener> { 23 public: 24 virtual ~DesktopListener(); 25 26 virtual void ListenerRegistered(Desktop* desktop) = 0; 27 virtual void ListenerUnregistered() = 0; 28 29 virtual void WindowAdded(Window* window) = 0; 30 virtual void WindowRemoved(Window* window) = 0; 31 32 virtual void KeyPressed(uint32 what, int32 key, 33 int32 modifiers) = 0; 34 virtual void MouseEvent(BMessage* message) = 0; 35 virtual void MouseDown(Window* window, BMessage* message, 36 const BPoint& where) = 0; 37 virtual void MouseUp(Window* window, BMessage* message, 38 const BPoint& where) = 0; 39 virtual void MouseMoved(Window* window, BMessage* message, 40 const BPoint& where) = 0; 41 42 virtual void WindowMoved(Window* window) = 0; 43 virtual void WindowResized(Window* window) = 0; 44 virtual void WindowActitvated(Window* window) = 0; 45 virtual void WindowSentBehind(Window* window, 46 Window* behindOf) = 0; 47 virtual void WindowWorkspacesChanged(Window* window, 48 uint32 workspaces) = 0; 49 virtual void WindowMinimized(Window* window, 50 bool minimize) = 0; 51 52 virtual void WindowTabLocationChanged(Window* window, 53 float location) = 0; 54 55 virtual bool SetDecoratorSettings(Window* window, 56 const BMessage& settings) = 0; 57 virtual void GetDecoratorSettings(Window* window, 58 BMessage& settings) = 0; 59 }; 60 61 62 typedef DoublyLinkedList<DesktopListener> DesktopListenerDLList; 63 64 65 class DesktopObservable { 66 public: 67 DesktopObservable(); 68 69 void RegisterListener(DesktopListener* listener, 70 Desktop* desktop); 71 void UnregisterListener(DesktopListener* listener); 72 const DesktopListenerDLList& GetDesktopListenerList(); 73 74 void WindowAdded(Window* window); 75 void WindowRemoved(Window* window); 76 77 void KeyPressed(uint32 what, int32 key, 78 int32 modifiers); 79 void MouseEvent(BMessage* message); 80 void MouseDown(Window* window, BMessage* message, 81 const BPoint& where); 82 void MouseUp(Window* window, BMessage* message, 83 const BPoint& where); 84 void MouseMoved(Window* window, BMessage* message, 85 const BPoint& where); 86 87 void WindowMoved(Window* window); 88 void WindowResized(Window* window); 89 void WindowActitvated(Window* window); 90 void WindowSentBehind(Window* window, Window* behindOf); 91 void WindowWorkspacesChanged(Window* window, 92 uint32 workspaces); 93 void WindowMinimized(Window* window, bool minimize); 94 95 void WindowTabLocationChanged(Window* window, 96 float location); 97 98 bool SetDecoratorSettings(Window* window, 99 const BMessage& settings); 100 void GetDecoratorSettings(Window* window, 101 BMessage& settings); 102 103 private: 104 class InvokeGuard { 105 public: 106 InvokeGuard(bool& invoking); 107 ~InvokeGuard(); 108 private: 109 bool& fInvoking; 110 }; 111 112 DesktopListenerDLList fDesktopListenerList; 113 114 // prevent recursive invokes 115 bool fWeAreInvoking; 116 }; 117 118 #endif 119