mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 03:37:43 +00:00
LibGUI: Allow Windows to set a default return key widget
The default return key widget takes precendence when dispatching return key events with the exception of focused buttons.
This commit is contained in:
parent
ac4583660b
commit
aefe3ef539
2 changed files with 19 additions and 0 deletions
|
@ -453,6 +453,10 @@ void Window::handle_key_event(KeyEvent& event)
|
||||||
focus_a_widget_if_possible(FocusSource::Keyboard);
|
focus_a_widget_if_possible(FocusSource::Keyboard);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (m_default_return_key_widget && event.key() == Key_Return)
|
||||||
|
if (!m_focused_widget || !is<Button>(m_focused_widget.ptr()))
|
||||||
|
return default_return_key_widget()->dispatch_event(event, this);
|
||||||
|
|
||||||
if (m_focused_widget)
|
if (m_focused_widget)
|
||||||
return m_focused_widget->dispatch_event(event, this);
|
return m_focused_widget->dispatch_event(event, this);
|
||||||
if (m_main_widget)
|
if (m_main_widget)
|
||||||
|
@ -732,6 +736,13 @@ void Window::set_main_widget(Widget* widget)
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Window::set_default_return_key_widget(Widget* widget)
|
||||||
|
{
|
||||||
|
if (m_default_return_key_widget == widget)
|
||||||
|
return;
|
||||||
|
m_default_return_key_widget = widget;
|
||||||
|
}
|
||||||
|
|
||||||
void Window::set_focused_widget(Widget* widget, FocusSource source)
|
void Window::set_focused_widget(Widget* widget, FocusSource source)
|
||||||
{
|
{
|
||||||
if (m_focused_widget == widget)
|
if (m_focused_widget == widget)
|
||||||
|
@ -743,6 +754,9 @@ void Window::set_focused_widget(Widget* widget, FocusSource source)
|
||||||
if (!m_focused_widget && m_previously_focused_widget)
|
if (!m_focused_widget && m_previously_focused_widget)
|
||||||
m_focused_widget = m_previously_focused_widget;
|
m_focused_widget = m_previously_focused_widget;
|
||||||
|
|
||||||
|
if (m_default_return_key_widget && m_default_return_key_widget->on_focus_change)
|
||||||
|
m_default_return_key_widget->on_focus_change(m_default_return_key_widget->is_focused(), source);
|
||||||
|
|
||||||
if (previously_focused_widget) {
|
if (previously_focused_widget) {
|
||||||
Core::EventLoop::current().post_event(*previously_focused_widget, make<FocusEvent>(Event::FocusOut, source));
|
Core::EventLoop::current().post_event(*previously_focused_widget, make<FocusEvent>(Event::FocusOut, source));
|
||||||
previously_focused_widget->update();
|
previously_focused_widget->update();
|
||||||
|
|
|
@ -151,6 +151,10 @@ public:
|
||||||
return *widget;
|
return *widget;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Widget* default_return_key_widget() { return m_default_return_key_widget; }
|
||||||
|
Widget const* default_return_key_widget() const { return m_default_return_key_widget; }
|
||||||
|
void set_default_return_key_widget(Widget*);
|
||||||
|
|
||||||
Widget* focused_widget() { return m_focused_widget; }
|
Widget* focused_widget() { return m_focused_widget; }
|
||||||
const Widget* focused_widget() const { return m_focused_widget; }
|
const Widget* focused_widget() const { return m_focused_widget; }
|
||||||
void set_focused_widget(Widget*, FocusSource = FocusSource::Programmatic);
|
void set_focused_widget(Widget*, FocusSource = FocusSource::Programmatic);
|
||||||
|
@ -265,6 +269,7 @@ private:
|
||||||
float m_opacity_when_windowless { 1.0f };
|
float m_opacity_when_windowless { 1.0f };
|
||||||
float m_alpha_hit_threshold { 0.0f };
|
float m_alpha_hit_threshold { 0.0f };
|
||||||
RefPtr<Widget> m_main_widget;
|
RefPtr<Widget> m_main_widget;
|
||||||
|
WeakPtr<Widget> m_default_return_key_widget;
|
||||||
WeakPtr<Widget> m_focused_widget;
|
WeakPtr<Widget> m_focused_widget;
|
||||||
WeakPtr<Widget> m_automatic_cursor_tracking_widget;
|
WeakPtr<Widget> m_automatic_cursor_tracking_widget;
|
||||||
WeakPtr<Widget> m_hovered_widget;
|
WeakPtr<Widget> m_hovered_widget;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue