summaryrefslogtreecommitdiff
path: root/vcl/unx/gtk3
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2019-08-15 20:29:40 +0100
committerCaolán McNamara <caolanm@redhat.com>2019-08-16 09:17:36 +0200
commit34e83dd95260d534464ff9a61eddefdde136013c (patch)
tree5e73789c1eac4c20337fe998ea306b7d5e3f6897 /vcl/unx/gtk3
parent7d7a7862a7dccb6764f80258f28685a0da3cbbcb (diff)
tdf#126007 tdf#122355 online help won't look into a dialog notebook
when the focus is on the help button, offline will through the help fallback route, but online will just fire and forget and let the server side do a fallback, which can't know what the current notebook page was. so bodge it to look at the notebook page right from the start if there is one and its the help button itself which starts the request Change-Id: Ida1d3101d838d99639dda12c438414c16b1ccda5 Reviewed-on: https://gerrit.libreoffice.org/77548 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'vcl/unx/gtk3')
-rw-r--r--vcl/unx/gtk3/gtk3gtkinst.cxx62
1 files changed, 43 insertions, 19 deletions
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index 044b36168aef..b015248a4acb 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -10548,6 +10548,31 @@ public:
m_aMnemonicButtons.clear();
}
+ OString get_current_page_help_id()
+ {
+ OString sPageHelpId;
+ // check to see if there is a notebook called tabcontrol and get the
+ // helpid for the current page of that
+ std::unique_ptr<weld::Notebook> xNotebook(weld_notebook("tabcontrol", false));
+ if (xNotebook)
+ {
+ if (GtkInstanceContainer* pPage = dynamic_cast<GtkInstanceContainer*>(xNotebook->get_page(xNotebook->get_current_page_ident())))
+ {
+ GtkWidget* pContainer = pPage->getWidget();
+ GList* pChildren = gtk_container_get_children(GTK_CONTAINER(pContainer));
+ GList* pChild = g_list_first(pChildren);
+ if (pChild)
+ {
+ GtkWidget* pPageWidget = static_cast<GtkWidget*>(pChild->data);
+ sPageHelpId = ::get_help_id(pPageWidget);
+ }
+ g_list_free(pChildren);
+ }
+ }
+ return sPageHelpId;
+ }
+
+
virtual ~GtkInstanceBuilder() override
{
g_slist_free(m_pObjectList);
@@ -10889,7 +10914,22 @@ void GtkInstanceWindow::help()
bool bRunNormalHelpRequest = !m_aHelpRequestHdl.IsSet() || m_aHelpRequestHdl.Call(*pSource);
Help* pHelp = bRunNormalHelpRequest ? Application::GetHelp() : nullptr;
if (pHelp)
+ {
+ // tdf#126007, there's a nice fallback route for offline help where
+ // the current page of a notebook will get checked when the help
+ // button is pressed and there was no help for the dialog found.
+ //
+ // But for online help that route doesn't get taken, so bodge this here
+ // by using the page help id if available and if the help button itself
+ // was the original id
+ if (m_pBuilder && sHelpId.endsWith("/help"))
+ {
+ OString sPageId = m_pBuilder->get_current_page_help_id();
+ if (!sPageId.isEmpty())
+ sHelpId = sPageId;
+ }
pHelp->Start(OStringToOUString(sHelpId, RTL_TEXTENCODING_UTF8), pSource);
+ }
}
//iterate upwards through the hierarchy from this widgets through its parents
@@ -10903,25 +10943,9 @@ void GtkInstanceWidget::help_hierarchy_foreach(const std::function<bool(const OS
// called tabcontrol, and try the help for the current page of that first
if (m_pBuilder && GTK_IS_DIALOG(pParent))
{
- std::unique_ptr<weld::Notebook> xNotebook(m_pBuilder->weld_notebook("tabcontrol", false));
- if (xNotebook)
- {
- if (GtkInstanceContainer* pPage = dynamic_cast<GtkInstanceContainer*>(xNotebook->get_page(xNotebook->get_current_page_ident())))
- {
- bool bFinished = false;
- GtkWidget* pContainer = pPage->getWidget();
- GList* pChildren = gtk_container_get_children(GTK_CONTAINER(pContainer));
- GList* pChild = g_list_first(pChildren);
- if (pChild)
- {
- GtkWidget* pPageWidget = static_cast<GtkWidget*>(pChild->data);
- bFinished = func(::get_help_id(pPageWidget));
- }
- g_list_free(pChildren);
- if (bFinished)
- return;
- }
- }
+ OString sPageHelpId(m_pBuilder->get_current_page_help_id());
+ if (!sPageHelpId.isEmpty() && func(sPageHelpId))
+ return;
}
if (func(::get_help_id(pParent)))
return;