1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 14:17:45 +00:00

WindowServer: Move key event handling to its own function

Instead of making WindowManager::event() all about key events.
This commit is contained in:
Andreas Kling 2021-06-18 17:59:00 +02:00
parent 4895f46d8c
commit de8aa1b17d
2 changed files with 88 additions and 81 deletions

View file

@ -1154,11 +1154,19 @@ void WindowManager::event(Core::Event& event)
} }
if (static_cast<Event&>(event).is_key_event()) { if (static_cast<Event&>(event).is_key_event()) {
auto& key_event = static_cast<KeyEvent const&>(event); process_key_event(static_cast<KeyEvent&>(event));
m_keyboard_modifiers = key_event.modifiers(); return;
}
Core::Object::event(event);
}
void WindowManager::process_key_event(KeyEvent& event)
{
m_keyboard_modifiers = event.modifiers();
// Escape key cancels an ongoing drag. // Escape key cancels an ongoing drag.
if (key_event.type() == Event::KeyDown && key_event.key() == Key_Escape && m_dnd_client) { if (event.type() == Event::KeyDown && event.key() == Key_Escape && m_dnd_client) {
// Notify the drag-n-drop client that the drag was cancelled. // Notify the drag-n-drop client that the drag was cancelled.
m_dnd_client->async_drag_cancelled(); m_dnd_client->async_drag_cancelled();
@ -1170,37 +1178,39 @@ void WindowManager::event(Core::Event& event)
return; return;
} }
if (key_event.type() == Event::KeyDown && (key_event.modifiers() == (Mod_Ctrl | Mod_Super | Mod_Shift) && key_event.key() == Key_I)) { if (event.type() == Event::KeyDown && (event.modifiers() == (Mod_Ctrl | Mod_Super | Mod_Shift) && event.key() == Key_I)) {
reload_icon_bitmaps_after_scale_change(!m_allow_hidpi_icons); reload_icon_bitmaps_after_scale_change(!m_allow_hidpi_icons);
Compositor::the().invalidate_screen(); Compositor::the().invalidate_screen();
return; return;
} }
if (key_event.type() == Event::KeyDown && key_event.key() == Key_Super) { if (event.type() == Event::KeyDown && event.key() == Key_Super) {
m_previous_event_was_super_keydown = true; m_previous_event_was_super_keydown = true;
} else if (m_previous_event_was_super_keydown) { } else if (m_previous_event_was_super_keydown) {
m_previous_event_was_super_keydown = false; m_previous_event_was_super_keydown = false;
if (!m_dnd_client && !m_active_input_tracking_window && key_event.type() == Event::KeyUp && key_event.key() == Key_Super) { if (!m_dnd_client && !m_active_input_tracking_window && event.type() == Event::KeyUp && event.key() == Key_Super) {
tell_wms_super_key_pressed(); tell_wms_super_key_pressed();
return; return;
} }
} }
if (MenuManager::the().current_menu() && key_event.key() != Key_Super) { if (MenuManager::the().current_menu() && event.key() != Key_Super) {
MenuManager::the().dispatch_event(event); MenuManager::the().dispatch_event(event);
return; return;
} }
if (key_event.type() == Event::KeyDown && ((key_event.modifiers() == Mod_Super && key_event.key() == Key_Tab) || (key_event.modifiers() == (Mod_Super | Mod_Shift) && key_event.key() == Key_Tab))) if (event.type() == Event::KeyDown && ((event.modifiers() == Mod_Super && event.key() == Key_Tab) || (event.modifiers() == (Mod_Super | Mod_Shift) && event.key() == Key_Tab)))
m_switcher.show(); m_switcher.show();
if (m_switcher.is_visible()) { if (m_switcher.is_visible()) {
m_switcher.on_key_event(key_event); m_switcher.on_key_event(event);
return; return;
} }
if (m_active_input_window) { if (!m_active_input_window)
if (key_event.type() == Event::KeyDown && key_event.modifiers() == Mod_Super && m_active_input_window->type() != WindowType::Desktop) { return;
if (key_event.key() == Key_Down) {
if (event.type() == Event::KeyDown && event.modifiers() == Mod_Super && m_active_input_window->type() != WindowType::Desktop) {
if (event.key() == Key_Down) {
if (m_active_input_window->is_resizable() && m_active_input_window->is_maximized()) { if (m_active_input_window->is_resizable() && m_active_input_window->is_maximized()) {
maximize_windows(*m_active_input_window, false); maximize_windows(*m_active_input_window, false);
return; return;
@ -1210,11 +1220,11 @@ void WindowManager::event(Core::Event& event)
return; return;
} }
if (m_active_input_window->is_resizable()) { if (m_active_input_window->is_resizable()) {
if (key_event.key() == Key_Up) { if (event.key() == Key_Up) {
maximize_windows(*m_active_input_window, !m_active_input_window->is_maximized()); maximize_windows(*m_active_input_window, !m_active_input_window->is_maximized());
return; return;
} }
if (key_event.key() == Key_Left) { if (event.key() == Key_Left) {
if (m_active_input_window->tiled() == WindowTileType::Left) if (m_active_input_window->tiled() == WindowTileType::Left)
return; return;
if (m_active_input_window->tiled() != WindowTileType::None) { if (m_active_input_window->tiled() != WindowTileType::None) {
@ -1226,7 +1236,7 @@ void WindowManager::event(Core::Event& event)
m_active_input_window->set_tiled(WindowTileType::Left); m_active_input_window->set_tiled(WindowTileType::Left);
return; return;
} }
if (key_event.key() == Key_Right) { if (event.key() == Key_Right) {
if (m_active_input_window->tiled() == WindowTileType::Right) if (m_active_input_window->tiled() == WindowTileType::Right)
return; return;
if (m_active_input_window->tiled() != WindowTileType::None) { if (m_active_input_window->tiled() != WindowTileType::None) {
@ -1241,11 +1251,6 @@ void WindowManager::event(Core::Event& event)
} }
} }
m_active_input_window->dispatch_event(event); m_active_input_window->dispatch_event(event);
return;
}
}
Core::Object::event(event);
} }
void WindowManager::set_highlight_window(Window* new_highlight_window) void WindowManager::set_highlight_window(Window* new_highlight_window)

View file

@ -243,6 +243,8 @@ private:
bool process_mouse_event_for_titlebar_buttons(MouseEvent const&); bool process_mouse_event_for_titlebar_buttons(MouseEvent const&);
void process_mouse_event_for_window(HitTestResult&, MouseEvent const&); void process_mouse_event_for_window(HitTestResult&, MouseEvent const&);
void process_key_event(KeyEvent&);
template<typename Callback> template<typename Callback>
void for_each_window_manager(Callback); void for_each_window_manager(Callback);