diff --git a/Libraries/LibGUI/TabWidget.cpp b/Libraries/LibGUI/TabWidget.cpp index e3a6dcdb44..e329f9a2ac 100644 --- a/Libraries/LibGUI/TabWidget.cpp +++ b/Libraries/LibGUI/TabWidget.cpp @@ -41,7 +41,7 @@ namespace GUI { TabWidget::TabWidget() { - set_focus_policy(FocusPolicy::TabFocus); + set_focus_policy(FocusPolicy::NoFocus); REGISTER_INT_PROPERTY("container_padding", container_padding, set_container_padding); REGISTER_BOOL_PROPERTY("uniform_tabs", uniform_tabs, set_uniform_tabs); @@ -67,6 +67,7 @@ void TabWidget::add_widget(const StringView& title, Widget& widget) { m_tabs.append({ title, nullptr, &widget }); add_child(widget); + update_focus_policy(); } void TabWidget::remove_widget(Widget& widget) @@ -75,8 +76,18 @@ void TabWidget::remove_widget(Widget& widget) activate_next_tab(); m_tabs.remove_first_matching([&widget](auto& entry) { return &widget == entry.widget; }); remove_child(widget); + update_focus_policy(); } +void TabWidget::update_focus_policy() +{ + FocusPolicy policy; + if (is_bar_visible() && !m_tabs.is_empty()) + policy = FocusPolicy::TabFocus; + else + policy = FocusPolicy::NoFocus; + set_focus_policy(policy); +} void TabWidget::set_active_widget(Widget* widget) { if (widget == m_active_widget) diff --git a/Libraries/LibGUI/TabWidget.h b/Libraries/LibGUI/TabWidget.h index 9fa487f482..9cd424b7d9 100644 --- a/Libraries/LibGUI/TabWidget.h +++ b/Libraries/LibGUI/TabWidget.h @@ -105,6 +105,7 @@ private: Gfx::IntRect bar_rect() const; Gfx::IntRect container_rect() const; void update_bar(); + void update_focus_policy(); RefPtr m_active_widget;