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

LibGUI: Move shortcut actions from GEventLoop to GApplications.

I'm gonna want to have nested event loops sooner or later, so let's not
pollute GEventLoop with things that are meant to work globally.

This patch also changes key events to pass around their modifiers as a
bitfield all the way around the system instead of breaking them up.
This commit is contained in:
Andreas Kling 2019-03-03 12:32:15 +01:00
parent 725b57fe1f
commit 5e40aa4f1a
11 changed files with 63 additions and 55 deletions

View file

@ -4,6 +4,7 @@
#include <SharedGraphics/Rect.h>
#include <AK/AKString.h>
#include <AK/Types.h>
#include <Kernel/KeyCode.h>
class WSMessage {
public:
@ -450,27 +451,27 @@ enum class MouseButton : byte {
class WSKeyEvent final : public WSMessage {
public:
WSKeyEvent(Type type, int key, char character)
WSKeyEvent(Type type, int key, char character, byte modifiers)
: WSMessage(type)
, m_key(key)
, m_character(character)
, m_modifiers(modifiers)
{
}
int key() const { return m_key; }
bool ctrl() const { return m_ctrl; }
bool alt() const { return m_alt; }
bool shift() const { return m_shift; }
bool ctrl() const { return m_modifiers & Mod_Ctrl; }
bool alt() const { return m_modifiers & Mod_Alt; }
bool shift() const { return m_modifiers & Mod_Shift; }
byte modifiers() const { return m_modifiers; }
char character() const { return m_character; }
private:
friend class WSMessageLoop;
friend class WSScreen;
int m_key { 0 };
bool m_ctrl { false };
bool m_alt { false };
bool m_shift { false };
char m_character { 0 };
byte m_modifiers { 0 };
};
class WSMouseEvent final : public WSMessage {

View file

@ -94,10 +94,7 @@ void WSScreen::on_receive_mouse_data(int dx, int dy, bool left_button, bool righ
void WSScreen::on_receive_keyboard_data(KeyEvent kernel_event)
{
auto message = make<WSKeyEvent>(kernel_event.is_press() ? WSMessage::KeyDown : WSMessage::KeyUp, kernel_event.key, kernel_event.character);
message->m_shift = kernel_event.shift();
message->m_ctrl = kernel_event.ctrl();
message->m_alt = kernel_event.alt();
auto message = make<WSKeyEvent>(kernel_event.is_press() ? WSMessage::KeyDown : WSMessage::KeyUp, kernel_event.key, kernel_event.character, kernel_event.modifiers());
WSMessageLoop::the().post_message(WSWindowManager::the(), move(message));
}

View file

@ -98,17 +98,13 @@ void WSWindow::on_message(WSMessage& message)
server_message.type = WSAPI_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();
server_message.key.modifiers = static_cast<WSKeyEvent&>(message).modifiers();
break;
case WSMessage::KeyUp:
server_message.type = WSAPI_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();
server_message.key.modifiers = static_cast<WSKeyEvent&>(message).modifiers();
break;
case WSMessage::WindowActivated:
server_message.type = WSAPI_ServerMessage::Type::WindowActivated;