xref: /haiku/src/servers/app/DesktopListener.h (revision 1345706a9ff6ad0dc041339a02d4259998b0765d)
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