xref: /haiku/src/servers/app/AppServer.h (revision 0b2dbe7d46ee888392907c60131b7f7652314175)
1 /*
2  * Copyright (c) 2001-2005, Haiku, Inc.
3  * Distributed under the terms of the MIT license.
4  *
5  * Author: DarkWyrm <bpmagic@columbus.rr.com>
6  */
7 #ifndef	_HAIKU_APP_SERVER_H_
8 #define	_HAIKU_APP_SERVER_H_
9 
10 #include <OS.h>
11 #include <Locker.h>
12 #include <List.h>
13 #include <Application.h>
14 #include <Window.h>
15 #include <String.h>
16 
17 #include "ServerConfig.h"
18 
19 class Layer;
20 class BMessage;
21 class ServerApp;
22 class DisplayDriver;
23 class CursorManager;
24 class BitmapManager;
25 class DecorManager;
26 class ColorSet;
27 
28 namespace BPrivate {
29 	class PortLink;
30 };
31 
32 /*!
33 	\class AppServer AppServer.h
34 	\brief main manager object for the app_server
35 
36 	File for the main app_server thread. This particular thread monitors for
37 	application start and quit messages. It also starts the housekeeping threads
38 	and initializes most of the server's globals.
39 */
40 
41 class AppServer
42 #if TEST_MODE
43 	: public BApplication
44 #endif
45 {
46 public:
47 						AppServer(void);
48 						~AppServer(void);
49 
50 	static	int32		PollerThread(void *data);
51 	static	int32		PicassoThread(void *data);
52 			thread_id	Run(void);
53 			void 		MainLoop(void);
54 
55 			void		PostMessage(int32 code);
56 			void		DispatchMessage(int32 code, BPrivate::PortLink &link);
57 			ServerApp*	FindApp(const char *sig);
58 
59 private:
60 	friend		void			BroadcastToAllApps(const int32 &code);
61 
62 				void			LaunchCursorThread();
63 				void			LaunchInputServer();
64 	static		int32			CursorThread(void *data);
65 
66 				port_id			fMessagePort;
67 				port_id			fServerInputPort;
68 
69 	volatile	bool			fQuitting;
70 
71 				BList			fAppList;
72 				thread_id		fPicassoThreadID;
73 
74 				thread_id		fISThreadID;
75 				thread_id		fCursorThreadID;
76 				sem_id			fCursorSem;
77 				area_id			fCursorArea;
78 				uint32			*fCursorAddr;
79 
80 				port_id			fISASPort;
81 				port_id			fISPort;
82 
83 				sem_id			fActiveAppLock;
84 				sem_id			fAppListLock;
85 				sem_id			fDecoratorLock;
86 
87 				DisplayDriver	*fDriver;
88 };
89 
90 extern BitmapManager *gBitmapManager;
91 extern ColorSet gGUIColorSet;
92 extern port_id gAppServerPort;
93 
94 #endif	/* _HAIKU_APP_SERVER_H_ */
95