tdf#129068 try dialog content area help before dialog itself

we already check current notebook page before the dialog, now
check the content area before the dialog

Change-Id: Ieedb5727ddec6d24adc6e70144977b5c3063c0fd
Reviewed-on: https://gerrit.libreoffice.org/84245
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index f45f550..9619540 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -6589,6 +6589,20 @@ void SalInstanceWindow::help()
            OString sPageId = m_pBuilder->get_current_page_help_id();
            if (!sPageId.isEmpty())
                sHelpId = sPageId;
            else
            {
                // tdf#129068 likewise the help for the wrapping dialog is less
                // helpful than the help for the content area could be
                vcl::Window *pContentArea = nullptr;
                if (::Dialog* pDialog = dynamic_cast<::Dialog*>(m_xWindow.get()))
                    pContentArea = pDialog->get_content_area();
                if (pContentArea)
                {
                    vcl::Window* pContentWidget = pContentArea->GetWindow(GetWindowType::LastChild);
                    if (pContentWidget)
                        sHelpId = pContentWidget->GetHelpId();
                }
            }
        }
        pHelp->Start(OStringToOUString(sHelpId, RTL_TEXTENCODING_UTF8), pSource);
    }
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index fc1e893..3f7d424 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -13162,6 +13162,30 @@ void GtkInstanceWindow::help()
            OString sPageId = m_pBuilder->get_current_page_help_id();
            if (!sPageId.isEmpty())
                sHelpId = sPageId;
            else
            {
                // tdf#129068 likewise the help for the wrapping dialog is less
                // helpful than the help for the content area could be
                GtkContainer* pContainer = nullptr;
                if (GTK_IS_DIALOG(m_pWindow))
                    pContainer = GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(m_pWindow)));
                else if (GTK_IS_ASSISTANT(m_pWindow))
                {
                    GtkAssistant* pAssistant = GTK_ASSISTANT(m_pWindow);
                    pContainer = GTK_CONTAINER(gtk_assistant_get_nth_page(pAssistant, gtk_assistant_get_current_page(pAssistant)));
                }
                if (pContainer)
                {
                    GList* pChildren = gtk_container_get_children(pContainer);
                    GList* pChild = g_list_first(pChildren);
                    if (pChild)
                    {
                        GtkWidget* pContentWidget = static_cast<GtkWidget*>(pChild->data);
                        sHelpId = ::get_help_id(pContentWidget);
                    }
                    g_list_free(pChildren);
                }
            }
        }
        pHelp->Start(OStringToOUString(sHelpId, RTL_TEXTENCODING_UTF8), pSource);
    }