diff --git a/Libraries/LibGUI/GAbstractButton.h b/Libraries/LibGUI/GAbstractButton.h index 163ae89670..db3f5dd26e 100644 --- a/Libraries/LibGUI/GAbstractButton.h +++ b/Libraries/LibGUI/GAbstractButton.h @@ -30,7 +30,6 @@ public: virtual void click() = 0; virtual bool accepts_focus() const override { return true; } - virtual bool supports_keyboard_activation() const override { return true; } virtual bool is_uncheckable() const { return true; } int auto_repeat_interval() const { return m_auto_repeat_interval; } diff --git a/Libraries/LibGUI/GButton.cpp b/Libraries/LibGUI/GButton.cpp index 305224fbfe..395adbb23b 100644 --- a/Libraries/LibGUI/GButton.cpp +++ b/Libraries/LibGUI/GButton.cpp @@ -72,11 +72,6 @@ void GButton::click() m_action->activate(this); } -bool GButton::supports_keyboard_activation() const -{ - return is_enabled(); -} - void GButton::set_action(GAction& action) { m_action = action.make_weak_ptr(); diff --git a/Libraries/LibGUI/GButton.h b/Libraries/LibGUI/GButton.h index 33e24a81dc..22c82352ee 100644 --- a/Libraries/LibGUI/GButton.h +++ b/Libraries/LibGUI/GButton.h @@ -31,7 +31,6 @@ public: void set_action(GAction&); virtual bool accepts_focus() const override { return m_focusable; } - virtual bool supports_keyboard_activation() const override; virtual bool is_uncheckable() const override; void set_focusable(bool b) { m_focusable = b; } diff --git a/Libraries/LibGUI/GWidget.h b/Libraries/LibGUI/GWidget.h index b993a84f8d..9ff587ae79 100644 --- a/Libraries/LibGUI/GWidget.h +++ b/Libraries/LibGUI/GWidget.h @@ -121,7 +121,6 @@ public: void update(const Rect&); virtual bool accepts_focus() const { return false; } - virtual bool supports_keyboard_activation() const { return false; } bool is_focused() const; void set_focus(bool); diff --git a/Libraries/LibGUI/GWindow.cpp b/Libraries/LibGUI/GWindow.cpp index 7860c9ece1..2c9433a482 100644 --- a/Libraries/LibGUI/GWindow.cpp +++ b/Libraries/LibGUI/GWindow.cpp @@ -1,7 +1,6 @@ #include #include #include -#include #include #include #include @@ -230,8 +229,6 @@ void GWindow::event(CEvent& event) for (auto& rect : rects) m_main_widget->dispatch_event(*make(rect), this); - paint_keybinds(); - if (m_double_buffering_enabled) flip(rects); else if (created_new_backing_store) @@ -247,53 +244,14 @@ void GWindow::event(CEvent& event) } if (event.type() == GEvent::KeyUp || event.type() == GEvent::KeyDown) { - auto keyevent = static_cast(event); - if (keyevent.logo() && event.type() == GEvent::KeyUp) { - if (m_keybind_mode) { - m_keybind_mode = false; - } else { - m_keybind_mode = true; - collect_keyboard_activation_targets(); - m_entered_keybind = ""; - } - update(); - return; - } - - if (m_keybind_mode) { - if (event.type() == GEvent::KeyUp) { - StringBuilder builder; - builder.append(m_entered_keybind); - builder.append(keyevent.text()); - m_entered_keybind = builder.to_string(); - - auto found_widget = m_keyboard_activation_targets.find(m_entered_keybind); - if (found_widget != m_keyboard_activation_targets.end()) { - m_keybind_mode = false; - auto event = make(GEvent::MouseDown, Point(), 0, GMouseButton::Left, 0, 0); - found_widget->value->dispatch_event(*event, this); - event = make(GEvent::MouseUp, Point(), 0, GMouseButton::Left, 0, 0); - found_widget->value->dispatch_event(*event, this); - } else if (m_entered_keybind.length() >= m_max_keybind_length) { - m_keybind_mode = false; - } - update(); - } - } else { - if (m_focused_widget) - return m_focused_widget->dispatch_event(event, this); - if (m_main_widget) - return m_main_widget->dispatch_event(event, this); - } + if (m_focused_widget) + return m_focused_widget->dispatch_event(event, this); + if (m_main_widget) + return m_main_widget->dispatch_event(event, this); return; } if (event.type() == GEvent::WindowBecameActive || event.type() == GEvent::WindowBecameInactive) { - if (event.type() == GEvent::WindowBecameInactive && m_keybind_mode) { - m_keybind_mode = false; - update(); - } - m_is_active = event.type() == GEvent::WindowBecameActive; if (m_main_widget) m_main_widget->dispatch_event(event, this); @@ -335,76 +293,6 @@ void GWindow::event(CEvent& event) CObject::event(event); } -void GWindow::paint_keybinds() -{ - if (!m_keybind_mode) - return; - GPainter painter(*m_main_widget); - - for (auto& keypair : m_keyboard_activation_targets) { - if (!keypair.value) - continue; - auto& widget = *keypair.value; - bool could_be_keybind = true; - for (size_t i = 0; i < m_entered_keybind.length(); ++i) { - if (keypair.key.characters()[i] != m_entered_keybind.characters()[i]) { - could_be_keybind = false; - break; - } - } - - if (could_be_keybind) { - Rect rect { widget.x() - 5, widget.y() - 5, 4 + Font::default_font().width(keypair.key), 16 }; - Rect highlight_rect { widget.x() - 3, widget.y() - 5, 0, 16 }; - - painter.fill_rect(rect, Color::WarmGray); - painter.draw_rect(rect, Color::Black); - painter.draw_text(rect, keypair.key.characters(), TextAlignment::Center, Color::Black); - painter.draw_text(highlight_rect, m_entered_keybind.characters(), TextAlignment::CenterLeft, Color::MidGray); - } - } -} - -static void collect_keyboard_activation_targets_impl(GWidget& widget, Vector& targets) -{ - widget.for_each_child_widget([&](auto& child) { - if (child.supports_keyboard_activation()) { - targets.append(&child); - collect_keyboard_activation_targets_impl(child, targets); - } - return IterationDecision::Continue; - }); -} - -void GWindow::collect_keyboard_activation_targets() -{ - m_keyboard_activation_targets.clear(); - if (!m_main_widget) - return; - - Vector targets; - collect_keyboard_activation_targets_impl(*m_main_widget, targets); - - m_max_keybind_length = ceil_div(targets.size(), ('z' - 'a')); - size_t buffer_length = m_max_keybind_length + 1; - char keybind_buffer[buffer_length]; - for (size_t i = 0; i < buffer_length - 1; ++i) - keybind_buffer[i] = 'a'; - keybind_buffer[buffer_length - 1] = '\0'; - - for (auto& widget : targets) { - m_keyboard_activation_targets.set(String(keybind_buffer), widget->make_weak_ptr()); - for (size_t i = 0; i < buffer_length - 1; ++i) { - if (keybind_buffer[i] >= 'z') { - keybind_buffer[i] = 'a'; - } else { - ++keybind_buffer[i]; - break; - } - } - } -} - bool GWindow::is_visible() const { return m_window_id != 0; diff --git a/Libraries/LibGUI/GWindow.h b/Libraries/LibGUI/GWindow.h index 0a6219ecb5..66f815c5fa 100644 --- a/Libraries/LibGUI/GWindow.h +++ b/Libraries/LibGUI/GWindow.h @@ -145,10 +145,6 @@ protected: private: virtual bool is_window() const override final { return true; } - void paint_keybinds(); - - void collect_keyboard_activation_targets(); - NonnullRefPtr create_backing_bitmap(const Size&); NonnullRefPtr create_shared_bitmap(GraphicsBitmap::Format, const Size&); void set_current_backing_bitmap(GraphicsBitmap&, bool flush_immediately = false); @@ -178,9 +174,5 @@ private: bool m_resizable { true }; bool m_fullscreen { false }; bool m_show_titlebar { true }; - bool m_keybind_mode { false }; - String m_entered_keybind; - size_t m_max_keybind_length { 0 }; - HashMap> m_keyboard_activation_targets; bool m_layout_pending { false }; };