From 99ae7ef46bb43e8523a0079130c8a83d13c67217 Mon Sep 17 00:00:00 2001
From: kh <qtc-committer@nokia.com>
Date: Mon, 27 Jul 2009 14:35:00 +0200
Subject: [PATCH] Sync with Assistant source, fixes empty tab title.

---
 src/plugins/help/centralwidget.cpp | 28 ++++++++++++++--------------
 src/shared/help/helpviewer.cpp     |  9 +++++++++
 src/shared/help/helpviewer.h       |  4 ++++
 3 files changed, 27 insertions(+), 14 deletions(-)

diff --git a/src/plugins/help/centralwidget.cpp b/src/plugins/help/centralwidget.cpp
index 89d711722bb..787d0475359 100644
--- a/src/plugins/help/centralwidget.cpp
+++ b/src/plugins/help/centralwidget.cpp
@@ -153,7 +153,11 @@ CentralWidget *CentralWidget::instance()
 void CentralWidget::newTab()
 {
     HelpViewer* viewer = currentHelpViewer();
+#if !defined(QT_NO_WEBKIT)
+    if (viewer && viewer->hasLoadFinished())
+#else
     if (viewer)
+#endif
         setSourceInNewTab(viewer->source());
 }
 
@@ -500,26 +504,22 @@ void CentralWidget::activateTab(bool onlyHelpViewer)
 
 void CentralWidget::setTabTitle(const QUrl& url)
 {
-    int tab = lastTabPage;
-    HelpViewer* viewer = currentHelpViewer();
-
+    Q_UNUSED(url)
 #if !defined(QT_NO_WEBKIT)
-    if (!viewer || viewer->source() != url) {
         QTabBar *tabBar = qFindChild<QTabBar*>(tabWidget);
-        for (tab = 0; tab < tabBar->count(); ++tab) {
-            viewer = qobject_cast<HelpViewer*>(tabWidget->widget(tab));
-            if (viewer && viewer->source() == url)
-                break;
+        for (int i = 0; i < tabBar->count(); ++i) {
+            HelpViewer* view = qobject_cast<HelpViewer*>(tabWidget->widget(i));
+            if (view) {
+                tabWidget->setTabText(i,
+                    quoteTabTitle(view->documentTitle().trimmed()));
+            }
         }
-    }
 #else
-    Q_UNUSED(url)
-#endif
-
-    if (viewer) {
-        tabWidget->setTabText(tab,
+    if (HelpViewer* viewer = currentHelpViewer()) {
+        tabWidget->setTabText(lastTabPage,
             quoteTabTitle(viewer->documentTitle().trimmed()));
     }
+#endif
 }
 
 void CentralWidget::currentPageChanged(int index)
diff --git a/src/shared/help/helpviewer.cpp b/src/shared/help/helpviewer.cpp
index 5d0a43166d5..701c632b23f 100644
--- a/src/shared/help/helpviewer.cpp
+++ b/src/shared/help/helpviewer.cpp
@@ -235,6 +235,7 @@ HelpViewer::HelpViewer(QHelpEngine *engine, Help::Internal::CentralWidget *paren
     , helpEngine(engine)
     , parentWidget(parent)
     , multiTabsAllowed(true)
+    , loadFinished(false)
 {
     setPage(new HelpPage(parent, helpEngine, this));
     settings()->setAttribute(QWebSettings::PluginsEnabled, false);
@@ -262,11 +263,13 @@ HelpViewer::HelpViewer(QHelpEngine *engine, Help::Internal::CentralWidget *paren
     connect(page(), SIGNAL(linkHovered(QString, QString, QString)), this,
         SIGNAL(highlighted(QString)));
     connect(this, SIGNAL(urlChanged(QUrl)), this, SIGNAL(sourceChanged(QUrl)));
+    connect(this, SIGNAL(loadFinished(bool)), this, SLOT(setLoadFinished(bool)));
     setAcceptDrops(false);
 }
 
 void HelpViewer::setSource(const QUrl &url)
 {
+    loadFinished = false;
     if (!homeUrl.isValid())
         homeUrl = url;
     load(url);
@@ -356,6 +359,12 @@ void HelpViewer::mousePressEvent(QMouseEvent *event)
     QWebView::mousePressEvent(event);
 }
 
+void HelpViewer::setLoadFinished(bool ok)
+{
+    loadFinished = ok;
+    emit sourceChanged(url());
+}
+
 #else  // !defined(QT_NO_WEBKIT)
 
 HelpViewer::HelpViewer(QHelpEngine *engine, Help::Internal::CentralWidget *parent)
diff --git a/src/shared/help/helpviewer.h b/src/shared/help/helpviewer.h
index cd6f699feb2..fea0b2dd4bf 100644
--- a/src/shared/help/helpviewer.h
+++ b/src/shared/help/helpviewer.h
@@ -90,6 +90,8 @@ public:
     { return pageAction(QWebPage::Forward)->isEnabled(); }
     inline bool isBackwardAvailable() const
     { return pageAction(QWebPage::Back)->isEnabled(); }
+    inline bool hasLoadFinished() const
+    { return loadFinished; }
 
 public Q_SLOTS:
     void home();
@@ -109,12 +111,14 @@ protected:
 
 private Q_SLOTS:
     void actionChanged();
+    void setLoadFinished(bool ok);
 
 private:
     QHelpEngine *helpEngine;
     Help::Internal::CentralWidget* parentWidget;
     QUrl homeUrl;
     bool multiTabsAllowed;
+    bool loadFinished;
 };
 
 #else
-- 
GitLab