mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 22:32:44 +00:00 
			
		
		
		
	 7a53096e8d
			
		
	
	
		7a53096e8d
		
	
	
	
	
		
			
			This was a mistake, of course. Nested event loops don't need (or want) independent server connections. We initialize the connection early in GEventLoop for e.g. users that want to get the size of a GDesktop before the connection has been established. Bug noticed by Andreas, introduced by me ;-)
		
			
				
	
	
		
			45 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #pragma once
 | |
| 
 | |
| #include <LibCore/CEventLoop.h>
 | |
| #include <LibCore/CoreIPCClient.h>
 | |
| #include <LibGUI/GEvent.h>
 | |
| #include <WindowServer/WSAPITypes.h>
 | |
| 
 | |
| class GAction;
 | |
| class CObject;
 | |
| class CNotifier;
 | |
| class GWindow;
 | |
| 
 | |
| class GWindowServerConnection : public IPC::Client::Connection<WSAPI_ServerMessage, WSAPI_ClientMessage> {
 | |
| public:
 | |
|     GWindowServerConnection()
 | |
|         : Connection("/tmp/wsportal")
 | |
|     {}
 | |
| 
 | |
|     void handshake() override;
 | |
|     static GWindowServerConnection& the();
 | |
| 
 | |
| private:
 | |
|     void postprocess_bundles(Vector<IncomingMessageBundle>& m_unprocessed_bundles) override;
 | |
|     void handle_paint_event(const WSAPI_ServerMessage&, GWindow&, const ByteBuffer& extra_data);
 | |
|     void handle_resize_event(const WSAPI_ServerMessage&, GWindow&);
 | |
|     void handle_mouse_event(const WSAPI_ServerMessage&, GWindow&);
 | |
|     void handle_key_event(const WSAPI_ServerMessage&, GWindow&);
 | |
|     void handle_window_activation_event(const WSAPI_ServerMessage&, GWindow&);
 | |
|     void handle_window_close_request_event(const WSAPI_ServerMessage&, GWindow&);
 | |
|     void handle_menu_event(const WSAPI_ServerMessage&);
 | |
|     void handle_window_entered_or_left_event(const WSAPI_ServerMessage&, GWindow&);
 | |
|     void handle_wm_event(const WSAPI_ServerMessage&, GWindow&);
 | |
|     void handle_greeting(WSAPI_ServerMessage&);
 | |
| };
 | |
| 
 | |
| class GEventLoop final : public CEventLoop {
 | |
| public:
 | |
|     GEventLoop();
 | |
|     virtual ~GEventLoop() override;
 | |
| 
 | |
|     static GEventLoop& current() { return static_cast<GEventLoop&>(CEventLoop::current()); }
 | |
| 
 | |
| private:
 | |
|     void process_unprocessed_bundles();
 | |
| };
 |