mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 20:17:44 +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);
|
||||
}
|
||||
|
||||
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)
|
||||
return m_focused_widget->dispatch_event(event, this);
|
||||
if (m_main_widget)
|
||||
|
@ -732,6 +736,13 @@ void Window::set_main_widget(Widget* widget)
|
|||
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)
|
||||
{
|
||||
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)
|
||||
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) {
|
||||
Core::EventLoop::current().post_event(*previously_focused_widget, make<FocusEvent>(Event::FocusOut, source));
|
||||
previously_focused_widget->update();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue