1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 13:17:35 +00:00

WindowServer: Add WSClientConnection::post_message().

This way WSWindow doesn't have to grab at the Process.
This commit is contained in:
Andreas Kling 2019-02-14 10:15:49 +01:00
parent 427df5f312
commit 9ab9734da0
3 changed files with 43 additions and 39 deletions

View file

@ -85,69 +85,62 @@ void WSWindow::on_message(WSMessage& message)
return;
}
GUI_ServerMessage gui_event;
gui_event.window_id = window_id();
GUI_ServerMessage server_message;
server_message.window_id = window_id();
switch (message.type()) {
case WSMessage::MouseMove:
gui_event.type = GUI_ServerMessage::Type::MouseMove;
gui_event.mouse.position = static_cast<WSMouseEvent&>(message).position();
gui_event.mouse.button = GUI_MouseButton::NoButton;
gui_event.mouse.buttons = static_cast<WSMouseEvent&>(message).buttons();
server_message.type = GUI_ServerMessage::Type::MouseMove;
server_message.mouse.position = static_cast<WSMouseEvent&>(message).position();
server_message.mouse.button = GUI_MouseButton::NoButton;
server_message.mouse.buttons = static_cast<WSMouseEvent&>(message).buttons();
break;
case WSMessage::MouseDown:
gui_event.type = GUI_ServerMessage::Type::MouseDown;
gui_event.mouse.position = static_cast<WSMouseEvent&>(message).position();
gui_event.mouse.button = to_api(static_cast<WSMouseEvent&>(message).button());
gui_event.mouse.buttons = static_cast<WSMouseEvent&>(message).buttons();
server_message.type = GUI_ServerMessage::Type::MouseDown;
server_message.mouse.position = static_cast<WSMouseEvent&>(message).position();
server_message.mouse.button = to_api(static_cast<WSMouseEvent&>(message).button());
server_message.mouse.buttons = static_cast<WSMouseEvent&>(message).buttons();
break;
case WSMessage::MouseUp:
gui_event.type = GUI_ServerMessage::Type::MouseUp;
gui_event.mouse.position = static_cast<WSMouseEvent&>(message).position();
gui_event.mouse.button = to_api(static_cast<WSMouseEvent&>(message).button());
gui_event.mouse.buttons = static_cast<WSMouseEvent&>(message).buttons();
server_message.type = GUI_ServerMessage::Type::MouseUp;
server_message.mouse.position = static_cast<WSMouseEvent&>(message).position();
server_message.mouse.button = to_api(static_cast<WSMouseEvent&>(message).button());
server_message.mouse.buttons = static_cast<WSMouseEvent&>(message).buttons();
break;
case WSMessage::KeyDown:
gui_event.type = GUI_ServerMessage::Type::KeyDown;
gui_event.key.character = static_cast<WSKeyEvent&>(message).character();
gui_event.key.key = static_cast<WSKeyEvent&>(message).key();
gui_event.key.alt = static_cast<WSKeyEvent&>(message).alt();
gui_event.key.ctrl = static_cast<WSKeyEvent&>(message).ctrl();
gui_event.key.shift = static_cast<WSKeyEvent&>(message).shift();
server_message.type = GUI_ServerMessage::Type::KeyDown;
server_message.key.character = static_cast<WSKeyEvent&>(message).character();
server_message.key.key = static_cast<WSKeyEvent&>(message).key();
server_message.key.alt = static_cast<WSKeyEvent&>(message).alt();
server_message.key.ctrl = static_cast<WSKeyEvent&>(message).ctrl();
server_message.key.shift = static_cast<WSKeyEvent&>(message).shift();
break;
case WSMessage::KeyUp:
gui_event.type = GUI_ServerMessage::Type::KeyUp;
gui_event.key.character = static_cast<WSKeyEvent&>(message).character();
gui_event.key.key = static_cast<WSKeyEvent&>(message).key();
gui_event.key.alt = static_cast<WSKeyEvent&>(message).alt();
gui_event.key.ctrl = static_cast<WSKeyEvent&>(message).ctrl();
gui_event.key.shift = static_cast<WSKeyEvent&>(message).shift();
server_message.type = GUI_ServerMessage::Type::KeyUp;
server_message.key.character = static_cast<WSKeyEvent&>(message).character();
server_message.key.key = static_cast<WSKeyEvent&>(message).key();
server_message.key.alt = static_cast<WSKeyEvent&>(message).alt();
server_message.key.ctrl = static_cast<WSKeyEvent&>(message).ctrl();
server_message.key.shift = static_cast<WSKeyEvent&>(message).shift();
break;
case WSMessage::WindowActivated:
gui_event.type = GUI_ServerMessage::Type::WindowActivated;
server_message.type = GUI_ServerMessage::Type::WindowActivated;
break;
case WSMessage::WindowDeactivated:
gui_event.type = GUI_ServerMessage::Type::WindowDeactivated;
server_message.type = GUI_ServerMessage::Type::WindowDeactivated;
break;
case WSMessage::WindowCloseRequest:
gui_event.type = GUI_ServerMessage::Type::WindowCloseRequest;
server_message.type = GUI_ServerMessage::Type::WindowCloseRequest;
break;
default:
break;
}
if (gui_event.type == GUI_ServerMessage::Type::Invalid)
if (server_message.type == GUI_ServerMessage::Type::Invalid)
return;
{
WSWindowLocker window_locker(*this);
if (auto* client = WSClientConnection::from_client_id(m_client_id)) {
if (auto* process = client->process()) {
LOCKER(process->gui_events_lock());
process->gui_events().append(move(gui_event));
}
}
}
if (auto* client = WSClientConnection::from_client_id(m_client_id))
client->post_message(move(server_message));
}
void WSWindow::set_global_cursor_tracking_enabled(bool enabled)