xref: /haiku/src/servers/app/Desktop.h (revision b5ba4badb3098efc0ef2fb32cf8347823379dd75)
16a0a0a80SAxel Dörfler /*
2773d5303STri-Edge AI  * Copyright 2001-2020, Haiku.
36a0a0a80SAxel Dörfler  * Distributed under the terms of the MIT License.
46a0a0a80SAxel Dörfler  *
56a0a0a80SAxel Dörfler  * Authors:
6773d5303STri-Edge AI  *		Adrian Oanca, adioanca@cotty.iren.ro
7773d5303STri-Edge AI  *		Stephan Aßmus, superstippi@gmx.de
8773d5303STri-Edge AI  *		Axel Dörfler, axeld@pinc-software.de
9773d5303STri-Edge AI  *		Andrej Spielmann, andrej.spielmann@seh.ox.ac.uk
10773d5303STri-Edge AI  *		Brecht Machiels, brecht@mos6581.org
11773d5303STri-Edge AI  *		Clemens Zeidler, haiku@clemens-zeidler.de
12773d5303STri-Edge AI  *		Joseph Groover, looncraz@looncraz.net
13773d5303STri-Edge AI  *		Tri-Edge AI
14773d5303STri-Edge AI  *		Jacob Secunda, secundja@gmail.com
156a0a0a80SAxel Dörfler  */
1627adb969SAxel Dörfler #ifndef DESKTOP_H
1727adb969SAxel Dörfler #define DESKTOP_H
1833bbe223SAxel Dörfler 
1908f35604SAxel Dörfler 
20d99d8dbdSX512 #include <AutoDeleter.h>
21b6ba2290SClemens Zeidler #include <Autolock.h>
22b6ba2290SClemens Zeidler #include <InterfaceDefs.h>
23b6ba2290SClemens Zeidler #include <List.h>
24b6ba2290SClemens Zeidler #include <Menu.h>
25b6ba2290SClemens Zeidler #include <ObjectList.h>
26b6ba2290SClemens Zeidler #include <Region.h>
27d99d8dbdSX512 #include <String.h>
28b6ba2290SClemens Zeidler #include <Window.h>
29b6ba2290SClemens Zeidler 
307f9368caSlooncraz #include <ServerProtocolStructs.h>
317f9368caSlooncraz 
323ddebe7eSMichael Lotz #include "CursorManager.h"
337f9368caSlooncraz #include "DelayedMessage.h"
34860dfc9aSClemens Zeidler #include "DesktopListener.h"
35ace2d5eeSStephan Aßmus #include "DesktopSettings.h"
3608f35604SAxel Dörfler #include "EventDispatcher.h"
37ace2d5eeSStephan Aßmus #include "MessageLooper.h"
3852ede95cSStephan Aßmus #include "MultiLocker.h"
39953d895eSAxel Dörfler #include "Screen.h"
40fd5bec1eSAxel Dörfler #include "ScreenManager.h"
41ace2d5eeSStephan Aßmus #include "ServerCursor.h"
426a0ed7daSClemens Zeidler #include "StackAndTile.h"
43fd5bec1eSAxel Dörfler #include "VirtualScreen.h"
44e83820edSAxel Dörfler #include "WindowList.h"
4527adb969SAxel Dörfler #include "Workspace.h"
465ca8477eSAxel Dörfler #include "WorkspacePrivate.h"
47fd5bec1eSAxel Dörfler 
4823e00a25SAxel Dörfler 
493dcb3b07SStephan Aßmus class BMessage;
506a0a0a80SAxel Dörfler 
5189887831SClemens Zeidler class DecorAddOn;
5258468dfeSStephan Aßmus class DrawingEngine;
533dcb3b07SStephan Aßmus class HWInterface;
54e83820edSAxel Dörfler class ServerApp;
55953d895eSAxel Dörfler class Window;
56953d895eSAxel Dörfler class WorkspacesView;
576d5488e1SAxel Dörfler struct server_read_only_memory;
5833bbe223SAxel Dörfler 
596a0a0a80SAxel Dörfler namespace BPrivate {
606a0a0a80SAxel Dörfler 	class LinkSender;
616a0a0a80SAxel Dörfler };
626a0a0a80SAxel Dörfler 
630eed9183SAxel Dörfler 
64860dfc9aSClemens Zeidler class Desktop : public DesktopObservable, public MessageLooper,
65860dfc9aSClemens Zeidler 	public ScreenOwner {
6633bbe223SAxel Dörfler public:
677f9368caSlooncraz 								Desktop(uid_t userID,
687f9368caSlooncraz 									const char* targetScreen);
693dcb3b07SStephan Aßmus 	virtual						~Desktop();
703dcb3b07SStephan Aßmus 
71d6734c08SClemens Zeidler 			void				RegisterListener(DesktopListener* listener);
72d6734c08SClemens Zeidler 
736d5488e1SAxel Dörfler 			status_t			Init();
7436deda69SAxel Dörfler 
UserID()7536deda69SAxel Dörfler 			uid_t				UserID() const { return fUserID; }
TargetScreen()7668667bf4SMichael Lotz 			const char*			TargetScreen() { return fTargetScreen; }
MessagePort()77770c05d6SAxel Dörfler 	virtual port_id				MessagePort() const { return fMessagePort; }
SharedReadOnlyArea()789dbce7a4SAxel Dörfler 			area_id				SharedReadOnlyArea() const
799dbce7a4SAxel Dörfler 									{ return fSharedReadOnlyArea; }
80770c05d6SAxel Dörfler 
EventDispatcher()81f7598223SAxel Dörfler 			::EventDispatcher&	EventDispatcher() { return fEventDispatcher; }
826c17d025SAxel Dörfler 
83770c05d6SAxel Dörfler 			void				BroadcastToAllApps(int32 code);
840a3f410fSAxel Dörfler 			void				BroadcastToAllWindows(int32 code);
8533bbe223SAxel Dörfler 
867f9368caSlooncraz 			int32				GetAllWindowTargets(DelayedMessage& message);
877f9368caSlooncraz 			int32				GetAllAppTargets(DelayedMessage& message);
887f9368caSlooncraz 
8983cdf43fSClemens Zeidler 			filter_result		KeyEvent(uint32 what, int32 key,
90860dfc9aSClemens Zeidler 									int32 modifiers);
91cc93fbbbSAxel Dörfler 	// Locking
LockSingleWindow()92cc93fbbbSAxel Dörfler 			bool				LockSingleWindow()
93cc93fbbbSAxel Dörfler 									{ return fWindowLock.ReadLock(); }
UnlockSingleWindow()94cc93fbbbSAxel Dörfler 			void				UnlockSingleWindow()
95cc93fbbbSAxel Dörfler 									{ fWindowLock.ReadUnlock(); }
96cc93fbbbSAxel Dörfler 
LockAllWindows()97cc93fbbbSAxel Dörfler 			bool				LockAllWindows()
98cc93fbbbSAxel Dörfler 									{ return fWindowLock.WriteLock(); }
UnlockAllWindows()99cc93fbbbSAxel Dörfler 			void				UnlockAllWindows()
100cc93fbbbSAxel Dörfler 									{ fWindowLock.WriteUnlock(); }
101cc93fbbbSAxel Dörfler 
WindowLocker()10278ca6157SAxel Dörfler 			const MultiLocker&	WindowLocker() { return fWindowLock; }
103cc93fbbbSAxel Dörfler 
1040eed9183SAxel Dörfler 	// Mouse and cursor methods
10533bbe223SAxel Dörfler 
106195e980eSAxel Dörfler 			void				SetCursor(ServerCursor* cursor);
107ace2d5eeSStephan Aßmus 			ServerCursorReference Cursor() const;
1088689fe06SIngo Weinhold 			void				SetManagementCursor(ServerCursor* newCursor);
1098689fe06SIngo Weinhold 
1104d1c4228SStephan Aßmus 			void				SetLastMouseState(const BPoint& position,
11121b40eddSStephan Aßmus 									int32 buttons, Window* windowUnderMouse);
1124d1c4228SStephan Aßmus 									// for use by the mouse filter only
1134d1c4228SStephan Aßmus 									// both mouse position calls require
1144d1c4228SStephan Aßmus 									// the Desktop object to be locked
1154d1c4228SStephan Aßmus 									// already
1164d1c4228SStephan Aßmus 			void				GetLastMouseState(BPoint* position,
1174d1c4228SStephan Aßmus 									int32* buttons) const;
1184d1c4228SStephan Aßmus 									// for use by ServerWindow
1190eed9183SAxel Dörfler 
GetCursorManager()1200eed9183SAxel Dörfler 			CursorManager&		GetCursorManager() { return fCursorManager; }
1210eed9183SAxel Dörfler 
122fe7f167dSAxel Dörfler 	// Screen and drawing related methods
123fe7f167dSAxel Dörfler 
1240eed9183SAxel Dörfler 			status_t			SetScreenMode(int32 workspace, int32 id,
1250eed9183SAxel Dörfler 									const display_mode& mode, bool makeDefault);
1260eed9183SAxel Dörfler 			status_t			GetScreenMode(int32 workspace, int32 id,
1270eed9183SAxel Dörfler 									display_mode& mode);
128e18224cdSAxel Dörfler 			status_t			GetScreenFrame(int32 workspace, int32 id,
129e18224cdSAxel Dörfler 									BRect& frame);
1305e3f4c41SAxel Dörfler 			void				RevertScreenModes(uint32 workspaces);
1310eed9183SAxel Dörfler 
1328b2b3010SAdrien Destugues 			status_t			SetBrightness(int32 id, float brightness);
1338b2b3010SAdrien Destugues 
ScreenLocker()13478ca6157SAxel Dörfler 			MultiLocker&		ScreenLocker() { return fScreenLock; }
13578ca6157SAxel Dörfler 
1369fe35223SAxel Dörfler 			status_t			LockDirectScreen(team_id team);
1379fe35223SAxel Dörfler 			status_t			UnlockDirectScreen(team_id team);
1389fe35223SAxel Dörfler 
VirtualScreen()1395e3f4c41SAxel Dörfler 			const ::VirtualScreen& VirtualScreen() const
1405e3f4c41SAxel Dörfler 									{ return fVirtualScreen; }
GetDrawingEngine()14127adb969SAxel Dörfler 			DrawingEngine*		GetDrawingEngine() const
14258468dfeSStephan Aßmus 									{ return fVirtualScreen.DrawingEngine(); }
HWInterface()14327adb969SAxel Dörfler 			::HWInterface*		HWInterface() const
144fd5bec1eSAxel Dörfler 									{ return fVirtualScreen.HWInterface(); }
14594fa2bd2SAdi Oanca 
1465483fa4eSClemens Zeidler 			void				RebuildAndRedrawAfterWindowChange(
1475483fa4eSClemens Zeidler 									Window* window, BRegion& dirty);
1485483fa4eSClemens Zeidler 									// the window lock must be held when calling
1495483fa4eSClemens Zeidler 									// this function
1505483fa4eSClemens Zeidler 
1510eed9183SAxel Dörfler 	// ScreenOwner implementation
ScreenRemoved(Screen * screen)1525e3f4c41SAxel Dörfler 	virtual	void				ScreenRemoved(Screen* screen) {}
ScreenAdded(Screen * screen)1535e3f4c41SAxel Dörfler 	virtual	void				ScreenAdded(Screen* screen) {}
154f3e8ed4dSMichael Lotz 	virtual	void				ScreenChanged(Screen* screen);
ReleaseScreen(Screen * screen)1555e3f4c41SAxel Dörfler 	virtual	bool				ReleaseScreen(Screen* screen) { return false; }
1560eed9183SAxel Dörfler 
15727adb969SAxel Dörfler 	// Workspace methods
15827adb969SAxel Dörfler 
15947212dddSAxel Dörfler 			void				SetWorkspaceAsync(int32 index,
16047212dddSAxel Dörfler 									bool moveFocusWindow = false);
16147212dddSAxel Dörfler 			void				SetWorkspace(int32 index,
16247212dddSAxel Dörfler 									bool moveFocusWindow = false);
CurrentWorkspace()16327adb969SAxel Dörfler 			int32				CurrentWorkspace()
16427adb969SAxel Dörfler 									{ return fCurrentWorkspace; }
WorkspaceAt(int32 index)1655ca8477eSAxel Dörfler 			Workspace::Private&	WorkspaceAt(int32 index)
16627adb969SAxel Dörfler 									{ return fWorkspaces[index]; }
16769f9a367SAxel Dörfler 			status_t			SetWorkspacesLayout(int32 columns, int32 rows);
16827c43a2dSRene Gollent 			BRect				WorkspaceFrame(int32 index) const;
16927adb969SAxel Dörfler 
170cc93fbbbSAxel Dörfler 			void				StoreWorkspaceConfiguration(int32 index);
171cc93fbbbSAxel Dörfler 
172cc93fbbbSAxel Dörfler 			void				AddWorkspacesView(WorkspacesView* view);
173cc93fbbbSAxel Dörfler 			void				RemoveWorkspacesView(WorkspacesView* view);
174cc93fbbbSAxel Dörfler 
175953d895eSAxel Dörfler 	// Window methods
17627adb969SAxel Dörfler 
177926e63c8SBrecht Machiels 			void				SelectWindow(Window* window);
178f33cf3fdSClemens Zeidler 			void				ActivateWindow(Window* window);
179953d895eSAxel Dörfler 			void				SendWindowBehind(Window* window,
180f33cf3fdSClemens Zeidler 									Window* behindOf = NULL,
181f33cf3fdSClemens Zeidler 									bool sendStack = true);
18227adb969SAxel Dörfler 
183953d895eSAxel Dörfler 			void				ShowWindow(Window* window);
184cd67c205SClemens Zeidler 			void				HideWindow(Window* window,
185cd67c205SClemens Zeidler 									bool fromMinimize = false);
186860dfc9aSClemens Zeidler 			void				MinimizeWindow(Window* window, bool minimize);
18715918e4fSAxel Dörfler 
188953d895eSAxel Dörfler 			void				MoveWindowBy(Window* window, float x, float y,
18914fe11cfSAxel Dörfler 									int32 workspace = -1);
1909dbce7a4SAxel Dörfler 			void				ResizeWindowBy(Window* window, float x,
1919dbce7a4SAxel Dörfler 									float y);
192773d5303STri-Edge AI 			void				SetWindowOutlinesDelta(Window* window,
193773d5303STri-Edge AI 									BPoint delta);
1949dbce7a4SAxel Dörfler 			bool				SetWindowTabLocation(Window* window,
195bb2e9b06SClemens Zeidler 									float location, bool isShifting);
196953d895eSAxel Dörfler 			bool				SetWindowDecoratorSettings(Window* window,
197b30e9021SStephan Aßmus 									const BMessage& settings);
19819d801a6SAxel Dörfler 
199953d895eSAxel Dörfler 			void				SetWindowWorkspaces(Window* window,
200a631158aSAxel Dörfler 									uint32 workspaces);
20127adb969SAxel Dörfler 
202953d895eSAxel Dörfler 			void				AddWindow(Window* window);
203953d895eSAxel Dörfler 			void				RemoveWindow(Window* window);
20457be2866SAxel Dörfler 
205953d895eSAxel Dörfler 			bool				AddWindowToSubset(Window* subset,
206953d895eSAxel Dörfler 									Window* window);
207953d895eSAxel Dörfler 			void				RemoveWindowFromSubset(Window* subset,
208953d895eSAxel Dörfler 									Window* window);
20934227d2cSAxel Dörfler 
2100a3f410fSAxel Dörfler 			void				FontsChanged(Window* window);
2117f9368caSlooncraz 			void				ColorUpdated(Window* window, color_which which,
2127f9368caSlooncraz 									rgb_color color);
2130a3f410fSAxel Dörfler 
214953d895eSAxel Dörfler 			void				SetWindowLook(Window* window, window_look look);
215953d895eSAxel Dörfler 			void				SetWindowFeel(Window* window, window_feel feel);
216953d895eSAxel Dörfler 			void				SetWindowFlags(Window* window, uint32 flags);
2179dbce7a4SAxel Dörfler 			void				SetWindowTitle(Window* window,
2189dbce7a4SAxel Dörfler 									const char* title);
21933bbe223SAxel Dörfler 
FocusWindow()220953d895eSAxel Dörfler 			Window*				FocusWindow() const { return fFocus; }
FrontWindow()221953d895eSAxel Dörfler 			Window*				FrontWindow() const { return fFront; }
BackWindow()222953d895eSAxel Dörfler 			Window*				BackWindow() const { return fBack; }
223e83820edSAxel Dörfler 
224953d895eSAxel Dörfler 			Window*				WindowAt(BPoint where);
225e83820edSAxel Dörfler 
MouseEventWindow()2269dbce7a4SAxel Dörfler 			Window*				MouseEventWindow() const
2279dbce7a4SAxel Dörfler 									{ return fMouseEventWindow; }
228953d895eSAxel Dörfler 			void				SetMouseEventWindow(Window* window);
229e83820edSAxel Dörfler 
2309dbce7a4SAxel Dörfler 			void				SetViewUnderMouse(const Window* window,
2319dbce7a4SAxel Dörfler 									int32 viewToken);
232953d895eSAxel Dörfler 			int32				ViewUnderMouse(const Window* window);
2331e766d46SAxel Dörfler 
23407dc2c69SAxel Dörfler 			EventTarget*		KeyboardEventTarget();
235cc93fbbbSAxel Dörfler 
236cc93fbbbSAxel Dörfler 			void				SetFocusWindow(Window* window = NULL);
23721b40eddSStephan Aßmus 			void				SetFocusLocked(const Window* window);
238e83820edSAxel Dörfler 
239953d895eSAxel Dörfler 			Window*				FindWindowByClientToken(int32 token,
240953d895eSAxel Dörfler 									team_id teamID);
24195530739SAxel Dörfler 			EventTarget*		FindTarget(BMessenger& messenger);
2426a0a0a80SAxel Dörfler 
243*b5ba4badSX512 			void				MarkDirty(BRegion& dirtyRegion, BRegion& exposeRegion);
MarkDirty(BRegion & region)244*b5ba4badSX512 			void				MarkDirty(BRegion& region)
245*b5ba4badSX512 									{ return MarkDirty(region, region); }
246b09e2f6fSStephan Aßmus 			void				Redraw();
247cc93fbbbSAxel Dörfler 			void				RedrawBackground();
248e83820edSAxel Dörfler 
24989887831SClemens Zeidler 			bool				ReloadDecor(DecorAddOn* oldDecor);
250bb86786aSClemens Zeidler 
BackgroundRegion()251e83820edSAxel Dörfler 			BRegion&			BackgroundRegion()
252e83820edSAxel Dörfler 									{ return fBackgroundRegion; }
25333bbe223SAxel Dörfler 
254f877af82SAxel Dörfler 			void				MinimizeApplication(team_id team);
255f877af82SAxel Dörfler 			void				BringApplicationToFront(team_id team);
256bfe69873SAxel Dörfler 			void				WindowAction(int32 windowToken, int32 action);
257f877af82SAxel Dörfler 
25827adb969SAxel Dörfler 			void				WriteWindowList(team_id team,
25927adb969SAxel Dörfler 									BPrivate::LinkSender& sender);
26027adb969SAxel Dörfler 			void				WriteWindowInfo(int32 serverToken,
26127adb969SAxel Dörfler 									BPrivate::LinkSender& sender);
262ae0606beSAxel Dörfler 			void				WriteApplicationOrder(int32 workspace,
263ae0606beSAxel Dörfler 									BPrivate::LinkSender& sender);
264ae0606beSAxel Dörfler 			void				WriteWindowOrder(int32 workspace,
265ae0606beSAxel Dörfler 									BPrivate::LinkSender& sender);
26633bbe223SAxel Dörfler 
26752ede95cSStephan Aßmus 			//! The window lock must be held when accessing a window list!
268860dfc9aSClemens Zeidler 			WindowList&			CurrentWindows();
269d6734c08SClemens Zeidler 			WindowList&			AllWindows();
270860dfc9aSClemens Zeidler 
271b8a44a25SClemens Zeidler 			Window*				WindowForClientLooperPort(port_id port);
272b8a44a25SClemens Zeidler 
GetStackAndTile()2736a0ed7daSClemens Zeidler 			StackAndTile*		GetStackAndTile() { return &fStackAndTile; }
27433bbe223SAxel Dörfler private:
2750265102fSClemens Zeidler 			WindowList&			_Windows(int32 index);
2760265102fSClemens Zeidler 
2777f9368caSlooncraz 			void				_FlushPendingColors();
2787f9368caSlooncraz 
2796869c8a5SRyan Leavengood 			void				_LaunchInputServer();
280cc93fbbbSAxel Dörfler 			void				_GetLooperName(char* name, size_t size);
281cc93fbbbSAxel Dörfler 			void				_PrepareQuit();
282cc93fbbbSAxel Dörfler 			void				_DispatchMessage(int32 code,
283cc93fbbbSAxel Dörfler 									BPrivate::LinkReceiver &link);
284e83820edSAxel Dörfler 
28534227d2cSAxel Dörfler 			void				_UpdateFloating(int32 previousWorkspace = -1,
286d479fa7aSAxel Dörfler 									int32 nextWorkspace = -1,
287953d895eSAxel Dörfler 									Window* mouseEventWindow = NULL);
288e83820edSAxel Dörfler 			void				_UpdateBack();
28934227d2cSAxel Dörfler 			void				_UpdateFront(bool updateFloating = true);
29034227d2cSAxel Dörfler 			void				_UpdateFronts(bool updateFloating = true);
2914db1a8c6SAxel Dörfler 			bool				_WindowHasModal(Window* window) const;
2924db1a8c6SAxel Dörfler 			bool				_WindowCanHaveFocus(Window* window) const;
293e83820edSAxel Dörfler 
294953d895eSAxel Dörfler 			void				_WindowChanged(Window* window);
295953d895eSAxel Dörfler 			void				_WindowRemoved(Window* window);
296ce8c4d79SAxel Dörfler 
297cc93fbbbSAxel Dörfler 			void				_ShowWindow(Window* window,
298cc93fbbbSAxel Dörfler 									bool affectsOtherWindows = true);
299cc93fbbbSAxel Dörfler 			void				_HideWindow(Window* window);
3005f2edc0fSAxel Dörfler 
301cc93fbbbSAxel Dörfler 			void				_UpdateSubsetWorkspaces(Window* window,
302cc93fbbbSAxel Dörfler 									int32 previousIndex = -1,
303cc93fbbbSAxel Dörfler 									int32 newIndex = -1);
304cc93fbbbSAxel Dörfler 			void				_ChangeWindowWorkspaces(Window* window,
305cc93fbbbSAxel Dörfler 									uint32 oldWorkspaces, uint32 newWorkspaces);
306cc93fbbbSAxel Dörfler 			void				_BringWindowsToFront(WindowList& windows,
307cc93fbbbSAxel Dörfler 									int32 list, bool wereVisible);
308cc93fbbbSAxel Dörfler 			Window*				_LastFocusSubsetWindow(Window* window);
309fa6fca91SAxel Dörfler 			bool				_CheckSendFakeMouseMoved(
310fa6fca91SAxel Dörfler 									const Window* lastWindowUnderMouse);
311cc93fbbbSAxel Dörfler 			void				_SendFakeMouseMoved(Window* window = NULL);
312cc93fbbbSAxel Dörfler 
31378ca6157SAxel Dörfler 			Screen*				_DetermineScreenFor(BRect frame);
314cc93fbbbSAxel Dörfler 			void				_RebuildClippingForAllWindows(
315cc93fbbbSAxel Dörfler 									BRegion& stillAvailableOnScreen);
316cc93fbbbSAxel Dörfler 			void				_TriggerWindowRedrawing(
317*b5ba4badSX512 									BRegion& dirtyRegion, BRegion& exposeRegion);
318cc93fbbbSAxel Dörfler 			void				_SetBackground(BRegion& background);
319cc93fbbbSAxel Dörfler 
320cc93fbbbSAxel Dörfler 			status_t			_ActivateApp(team_id team);
321cc93fbbbSAxel Dörfler 
32278ca6157SAxel Dörfler 			void				_SuspendDirectFrameBufferAccess();
32378ca6157SAxel Dörfler 			void				_ResumeDirectFrameBufferAccess();
32478ca6157SAxel Dörfler 
325cc93fbbbSAxel Dörfler 			void				_ScreenChanged(Screen* screen);
326cc93fbbbSAxel Dörfler 			void				_SetCurrentWorkspaceConfiguration();
32747212dddSAxel Dörfler 			void				_SetWorkspace(int32 index,
32847212dddSAxel Dörfler 									bool moveFocusWindow = false);
329e83820edSAxel Dörfler 
3305f2edc0fSAxel Dörfler private:
331ef8810f2SAxel Dörfler 	friend class DesktopSettings;
332a17c3a48SAxel Dörfler 	friend class LockedDesktopSettings;
333ef8810f2SAxel Dörfler 
33436deda69SAxel Dörfler 			uid_t				fUserID;
335d65593aaSMichael Lotz 			char*				fTargetScreen;
336fd5bec1eSAxel Dörfler 			::VirtualScreen		fVirtualScreen;
337d99d8dbdSX512 			ObjectDeleter<DesktopSettingsPrivate>
338d99d8dbdSX512 								fSettings;
3395f2edc0fSAxel Dörfler 			port_id				fMessagePort;
340f7598223SAxel Dörfler 			::EventDispatcher	fEventDispatcher;
3416d5488e1SAxel Dörfler 			area_id				fSharedReadOnlyArea;
3426d5488e1SAxel Dörfler 			server_read_only_memory* fServerReadOnlyMemory;
343770c05d6SAxel Dörfler 
344e83820edSAxel Dörfler 			BLocker				fApplicationsLock;
345e83820edSAxel Dörfler 			BObjectList<ServerApp> fApplications;
346770c05d6SAxel Dörfler 
347770c05d6SAxel Dörfler 			sem_id				fShutdownSemaphore;
348770c05d6SAxel Dörfler 			int32				fShutdownCount;
349770c05d6SAxel Dörfler 
35082081c70SJérôme Duval 			::Workspace::Private fWorkspaces[kMaxWorkspaces];
35178ca6157SAxel Dörfler 			MultiLocker			fScreenLock;
3529fe35223SAxel Dörfler 			BLocker				fDirectScreenLock;
3539fe35223SAxel Dörfler 			team_id				fDirectScreenTeam;
35427adb969SAxel Dörfler 			int32				fCurrentWorkspace;
3554932bc5eSAxel Dörfler 			int32				fPreviousWorkspace;
35627adb969SAxel Dörfler 
357e83820edSAxel Dörfler 			WindowList			fAllWindows;
35834227d2cSAxel Dörfler 			WindowList			fSubsetWindows;
359d01879e5SAxel Dörfler 			WindowList			fFocusList;
3600b63cc93SAxel Dörfler 			Window*				fLastWorkspaceFocus[kMaxWorkspaces];
361d8ebe612SAxel Dörfler 
362953d895eSAxel Dörfler 			BObjectList<WorkspacesView> fWorkspacesViews;
363d8ebe612SAxel Dörfler 			BLocker				fWorkspacesLock;
36433bbe223SAxel Dörfler 
3653ddebe7eSMichael Lotz 			CursorManager		fCursorManager;
3668689fe06SIngo Weinhold 			ServerCursorReference fCursor;
3678689fe06SIngo Weinhold 			ServerCursorReference fManagementCursor;
368e83820edSAxel Dörfler 
369e83820edSAxel Dörfler 			MultiLocker			fWindowLock;
370e83820edSAxel Dörfler 
371e83820edSAxel Dörfler 			BRegion				fBackgroundRegion;
372e83820edSAxel Dörfler 			BRegion				fScreenRegion;
373e83820edSAxel Dörfler 
374953d895eSAxel Dörfler 			Window*				fMouseEventWindow;
375953d895eSAxel Dörfler 			const Window*		fWindowUnderMouse;
37621b40eddSStephan Aßmus 			const Window*		fLockedFocusWindow;
3771e766d46SAxel Dörfler 			int32				fViewUnderMouse;
3784d1c4228SStephan Aßmus 			BPoint				fLastMousePosition;
3794d1c4228SStephan Aßmus 			int32				fLastMouseButtons;
3801e766d46SAxel Dörfler 
381953d895eSAxel Dörfler 			Window*				fFocus;
382953d895eSAxel Dörfler 			Window*				fFront;
383953d895eSAxel Dörfler 			Window*				fBack;
3846a0ed7daSClemens Zeidler 
3856a0ed7daSClemens Zeidler 			StackAndTile		fStackAndTile;
3867f9368caSlooncraz 
3877f9368caSlooncraz 			BMessage			fPendingColors;
38833bbe223SAxel Dörfler };
38933bbe223SAxel Dörfler 
39027adb969SAxel Dörfler #endif	// DESKTOP_H
391