1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 23:47:45 +00:00

WindowServer: Convert entire API to be message-based.

One big step towards userspace WindowServer. :^)
This commit is contained in:
Andreas Kling 2019-02-14 01:21:32 +01:00
parent ef4e9860fd
commit f529b845ec
25 changed files with 508 additions and 625 deletions

View file

@ -9,12 +9,8 @@ class WSMessage {
public:
enum Type {
Invalid = 0,
WM_ClientWantsToPaint,
WM_ClientFinishedPaint,
WM_SetWindowTitle,
WM_SetWindowRect,
WM_DeferredCompose,
WM_DestroyWindow,
WM_ClientDisconnected,
MouseMove,
MouseDown,
MouseUp,
@ -33,6 +29,17 @@ public:
APIDestroyMenuRequest,
APIAddMenuItemRequest,
APIAddMenuSeparatorRequest,
APICreateWindowRequest,
APIDestroyWindowRequest,
APISetWindowTitleRequest,
APIGetWindowTitleRequest,
APISetWindowRectRequest,
APIGetWindowRectRequest,
APIInvalidateRectRequest,
APIDidFinishPaintingNotification,
APIGetWindowBackingStoreRequest,
APIReleaseWindowBackingStoreRequest,
APISetGlobalCursorTrackingRequest,
__End_API_Client_Requests,
};
@ -50,6 +57,20 @@ private:
Type m_type { Invalid };
};
class WSClientDisconnectedNotification : public WSMessage {
public:
explicit WSClientDisconnectedNotification(int client_id)
: WSMessage(WM_ClientDisconnected)
, m_client_id(client_id)
{
}
int client_id() const { return m_client_id; }
private:
int m_client_id { 0 };
};
class WSAPIClientRequest : public WSMessage {
public:
WSAPIClientRequest(Type type, int client_id)
@ -64,6 +85,20 @@ private:
int m_client_id { 0 };
};
class WSAPISetGlobalCursorTrackingRequest : public WSAPIClientRequest {
public:
WSAPISetGlobalCursorTrackingRequest(int client_id, bool value)
: WSAPIClientRequest(WSMessage::APISetGlobalCursorTrackingRequest, client_id)
, m_value(value)
{
}
bool value() const { return m_value; }
private:
bool m_value { false };
};
class WSAPICreateMenubarRequest : public WSAPIClientRequest {
public:
WSAPICreateMenubarRequest(int client_id)
@ -179,58 +214,170 @@ private:
int m_menu_id { 0 };
};
class WSClientFinishedPaintMessage final : public WSMessage {
class WSAPISetWindowTitleRequest final : public WSAPIClientRequest {
public:
explicit WSClientFinishedPaintMessage(const Rect& rect = Rect())
: WSMessage(WSMessage::WM_ClientFinishedPaint)
, m_rect(rect)
{
}
const Rect& rect() const { return m_rect; }
private:
Rect m_rect;
};
class WSSetWindowTitleMessage final : public WSMessage {
public:
explicit WSSetWindowTitleMessage(String&& title)
: WSMessage(WSMessage::WM_SetWindowTitle)
explicit WSAPISetWindowTitleRequest(int client_id, int window_id, String&& title)
: WSAPIClientRequest(WSMessage::APISetWindowTitleRequest, client_id)
, m_client_id(client_id)
, m_window_id(window_id)
, m_title(move(title))
{
}
int client_id() const { return m_client_id; }
int window_id() const { return m_window_id; }
String title() const { return m_title; }
private:
int m_client_id { 0 };
int m_window_id { 0 };
String m_title;
};
class WSSetWindowRectMessage final : public WSMessage {
class WSAPIGetWindowTitleRequest final : public WSAPIClientRequest {
public:
explicit WSSetWindowRectMessage(const Rect& rect)
: WSMessage(WSMessage::WM_SetWindowRect)
explicit WSAPIGetWindowTitleRequest(int client_id, int window_id)
: WSAPIClientRequest(WSMessage::APIGetWindowTitleRequest, client_id)
, m_client_id(client_id)
, m_window_id(window_id)
{
}
int client_id() const { return m_client_id; }
int window_id() const { return m_window_id; }
private:
int m_client_id { 0 };
int m_window_id { 0 };
};
class WSAPISetWindowRectRequest final : public WSAPIClientRequest {
public:
explicit WSAPISetWindowRectRequest(int client_id, int window_id, const Rect& rect)
: WSAPIClientRequest(WSMessage::APISetWindowRectRequest, client_id)
, m_client_id(client_id)
, m_window_id(window_id)
, m_rect(rect)
{
}
int client_id() const { return m_client_id; }
int window_id() const { return m_window_id; }
Rect rect() const { return m_rect; }
private:
int m_client_id { 0 };
int m_window_id { 0 };
Rect m_rect;
};
class WSAPIGetWindowRectRequest final : public WSAPIClientRequest {
public:
explicit WSAPIGetWindowRectRequest(int client_id, int window_id)
: WSAPIClientRequest(WSMessage::APIGetWindowRectRequest, client_id)
, m_client_id(client_id)
, m_window_id(window_id)
{
}
int client_id() const { return m_client_id; }
int window_id() const { return m_window_id; }
private:
int m_client_id { 0 };
int m_window_id { 0 };
};
class WSAPICreateWindowRequest : public WSAPIClientRequest {
public:
WSAPICreateWindowRequest(int client_id, const Rect& rect, const String& title)
: WSAPIClientRequest(WSMessage::APICreateWindowRequest, client_id)
, m_rect(rect)
, m_title(title)
{
}
Rect rect() const { return m_rect; }
String title() const { return m_title; }
private:
Rect m_rect;
String m_title;
};
class WSClientWantsToPaintMessage final : public WSMessage {
class WSAPIDestroyWindowRequest : public WSAPIClientRequest {
public:
explicit WSClientWantsToPaintMessage(const Rect& rect = Rect())
: WSMessage(WSMessage::WM_ClientWantsToPaint)
WSAPIDestroyWindowRequest(int client_id, int window_id)
: WSAPIClientRequest(WSMessage::APIDestroyWindowRequest, client_id)
, m_window_id(window_id)
{
}
int window_id() const { return m_window_id; }
private:
int m_window_id { 0 };
};
class WSAPIInvalidateRectRequest final : public WSAPIClientRequest {
public:
explicit WSAPIInvalidateRectRequest(int client_id, int window_id, const Rect& rect)
: WSAPIClientRequest(WSMessage::APIInvalidateRectRequest, client_id)
, m_window_id(window_id)
, m_rect(rect)
{
}
const Rect& rect() const { return m_rect; }
int window_id() const { return m_window_id; }
Rect rect() const { return m_rect; }
private:
friend class WSWindowManager;
int m_window_id { 0 };
Rect m_rect;
};
class WSAPIGetWindowBackingStoreRequest final : public WSAPIClientRequest {
public:
explicit WSAPIGetWindowBackingStoreRequest(int client_id, int window_id)
: WSAPIClientRequest(WSMessage::APIGetWindowBackingStoreRequest, client_id)
, m_window_id(window_id)
{
}
int window_id() const { return m_window_id; }
private:
int m_window_id { 0 };
};
class WSAPIReleaseWindowBackingStoreRequest final : public WSAPIClientRequest {
public:
explicit WSAPIReleaseWindowBackingStoreRequest(int client_id, int backing_store_id)
: WSAPIClientRequest(WSMessage::APIReleaseWindowBackingStoreRequest, client_id)
, m_backing_store_id(backing_store_id)
{
}
int backing_store_id() const { return m_backing_store_id; }
private:
int m_backing_store_id { 0 };
};
class WSAPIDidFinishPaintingNotification final : public WSAPIClientRequest {
public:
explicit WSAPIDidFinishPaintingNotification(int client_id, int window_id, const Rect& rect)
: WSAPIClientRequest(WSMessage::APIDidFinishPaintingNotification, client_id)
, m_window_id(window_id)
, m_rect(rect)
{
}
int window_id() const { return m_window_id; }
Rect rect() const { return m_rect; }
private:
int m_window_id { 0 };
Rect m_rect;
};