diff options
author | Caolán McNamara <caolanm@redhat.com> | 2020-11-20 12:09:27 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2020-11-20 21:07:30 +0100 |
commit | 94ea1c89e959069aa7c735317470712012df2362 (patch) | |
tree | 6540e0497e315b11a38db6de84e7fd4a16856937 /vcl/unx | |
parent | 3e15955877eafc86654bd90cbb0db926cd30ed4f (diff) |
If we grab focus to a GtkToolbar then focus a GtkToolbarItem child
and consider focus in a GtkToolbar child as focus the GtkToolbar
has focus
Change-Id: Id3299dd9246da22b21b3e1a347faff8bc867c438
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/106270
Tested-by: Caolán McNamara <caolanm@redhat.com>
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'vcl/unx')
-rw-r--r-- | vcl/unx/gtk3/gtk3gtkinst.cxx | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx index 47da0859e962..2d10bc2d4647 100644 --- a/vcl/unx/gtk3/gtk3gtkinst.cxx +++ b/vcl/unx/gtk3/gtk3gtkinst.cxx @@ -8685,6 +8685,32 @@ public: return gtk_toolbar_get_drop_index(m_pToolbar, rPoint.X(), rPoint.Y()); } + virtual bool has_focus() const override + { + if (gtk_widget_has_focus(m_pWidget)) + return true; + GtkWidget* pTopLevel = gtk_widget_get_toplevel(m_pWidget); + if (!GTK_IS_WINDOW(pTopLevel)) + return false; + GtkWidget* pFocus = gtk_window_get_focus(GTK_WINDOW(pTopLevel)); + if (!pFocus) + return false; + return gtk_widget_is_ancestor(pFocus, m_pWidget); + } + + virtual void grab_focus() override + { + disable_notify_events(); + gtk_widget_grab_focus(m_pWidget); + if (!gtk_container_get_focus_child(GTK_CONTAINER(m_pWidget))) + { + GtkToolItem* pItem = gtk_toolbar_get_nth_item(m_pToolbar, 0); + gtk_container_set_focus_child(GTK_CONTAINER(m_pWidget), GTK_WIDGET(pItem)); + } + gtk_widget_child_focus(gtk_container_get_focus_child(GTK_CONTAINER(m_pWidget)), GTK_DIR_TAB_FORWARD); + enable_notify_events(); + } + virtual ~GtkInstanceToolbar() override { for (auto& a : m_aMap) |