diff options
author | Caolán McNamara <caolanm@redhat.com> | 2021-03-16 12:56:42 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2021-03-16 21:38:23 +0100 |
commit | 5aef0085cadb03c5c6b64747cf0ea76657a3a2ca (patch) | |
tree | bd234ca61b98996078d9d342f747c04462a223b4 /vcl/unx/gtk3/gtk3gtkinst.cxx | |
parent | 486f329b9589f1c795286228a513cb3751492fd2 (diff) |
enable grabbing focus to an unspecified container child
Change-Id: I269f76a3e71832ef2e8961952d9362838bd49cfc
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/112577
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'vcl/unx/gtk3/gtk3gtkinst.cxx')
-rw-r--r-- | vcl/unx/gtk3/gtk3gtkinst.cxx | 34 |
1 files changed, 30 insertions, 4 deletions
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx index d15ee5d5a7e8..fc958c780f18 100644 --- a/vcl/unx/gtk3/gtk3gtkinst.cxx +++ b/vcl/unx/gtk3/gtk3gtkinst.cxx @@ -3817,6 +3817,27 @@ public: GtkContainer* getContainer() { return m_pContainer; } + virtual void child_grab_focus() override + { + disable_notify_events(); + gtk_widget_grab_focus(m_pWidget); + bool bHasFocusChild = gtk_container_get_focus_child(m_pContainer); + if (!bHasFocusChild) + { + GList* pChildren = gtk_container_get_children(m_pContainer); + for (GList* pChild = g_list_first(pChildren); pChild; pChild = g_list_next(pChild)) + { + gtk_container_set_focus_child(m_pContainer, static_cast<GtkWidget*>(pChild->data)); + bHasFocusChild = true; + break; + } + g_list_free(pChildren); + } + if (bHasFocusChild) + gtk_widget_child_focus(gtk_container_get_focus_child(GTK_CONTAINER(m_pWidget)), GTK_DIR_TAB_FORWARD); + enable_notify_events(); + } + virtual void move(weld::Widget* pWidget, weld::Container* pNewParent) override { GtkInstanceWidget* pGtkWidget = dynamic_cast<GtkInstanceWidget*>(pWidget); @@ -8897,12 +8918,17 @@ public: { disable_notify_events(); gtk_widget_grab_focus(m_pWidget); - if (!gtk_container_get_focus_child(GTK_CONTAINER(m_pWidget))) + bool bHasFocusChild = gtk_container_get_focus_child(GTK_CONTAINER(m_pWidget)); + if (!bHasFocusChild) { - GtkToolItem* pItem = gtk_toolbar_get_nth_item(m_pToolbar, 0); - gtk_container_set_focus_child(GTK_CONTAINER(m_pWidget), GTK_WIDGET(pItem)); + if (GtkToolItem* pItem = gtk_toolbar_get_nth_item(m_pToolbar, 0)) + { + gtk_container_set_focus_child(GTK_CONTAINER(m_pWidget), GTK_WIDGET(pItem)); + bHasFocusChild = true; + } } - gtk_widget_child_focus(gtk_container_get_focus_child(GTK_CONTAINER(m_pWidget)), GTK_DIR_TAB_FORWARD); + if (bHasFocusChild) + gtk_widget_child_focus(gtk_container_get_focus_child(GTK_CONTAINER(m_pWidget)), GTK_DIR_TAB_FORWARD); enable_notify_events(); } |