]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphintabpage.cpp
Fix includes
[dolphin.git] / src / dolphintabpage.cpp
index c8e42633594d37671a237faef0c6928dccdeb936..f7000ea668d3f008bac9f0011bb0703f1d2e2e79 100644 (file)
@@ -41,6 +41,8 @@ DolphinTabPage::DolphinTabPage(const KUrl& primaryUrl, const KUrl& secondaryUrl,
     m_primaryViewContainer = createViewContainer(primaryUrl);
     connect(m_primaryViewContainer->view(), SIGNAL(urlChanged(KUrl)),
             this, SIGNAL(activeViewUrlChanged(KUrl)));
+    connect(m_primaryViewContainer->view(), SIGNAL(redirection(KUrl,KUrl)),
+            this, SLOT(slotViewUrlRedirection(KUrl,KUrl)));
 
     m_splitter->addWidget(m_primaryViewContainer);
     m_primaryViewContainer->show();
@@ -76,6 +78,10 @@ void DolphinTabPage::setSplitViewEnabled(bool enabled)
         if (enabled) {
             const KUrl& url = m_primaryViewContainer->url();
             m_secondaryViewContainer = createViewContainer(url);
+
+            const bool placesSelectorVisible = m_primaryViewContainer->urlNavigator()->isPlacesSelectorVisible();
+            m_secondaryViewContainer->urlNavigator()->setPlacesSelectorVisible(placesSelectorVisible);
+
             m_splitter->addWidget(m_secondaryViewContainer);
             m_secondaryViewContainer->show();
             m_secondaryViewContainer->setActive(true);
@@ -165,14 +171,18 @@ QByteArray DolphinTabPage::saveState() const
     QByteArray state;
     QDataStream stream(&state, QIODevice::WriteOnly);
 
+    stream << quint32(2); // Tab state version
+
     stream << m_splitViewEnabled;
 
     stream << m_primaryViewContainer->url();
     stream << m_primaryViewContainer->urlNavigator()->isUrlEditable();
+    m_primaryViewContainer->view()->saveState(stream);
 
     if (m_splitViewEnabled) {
         stream << m_secondaryViewContainer->url();
         stream << m_secondaryViewContainer->urlNavigator()->isUrlEditable();
+        m_secondaryViewContainer->view()->saveState(stream);
     }
 
     stream << m_primaryViewActive;
@@ -183,6 +193,62 @@ QByteArray DolphinTabPage::saveState() const
 
 void DolphinTabPage::restoreState(const QByteArray& state)
 {
+    if (state.isEmpty()) {
+        return;
+    }
+
+    QByteArray sd = state;
+    QDataStream stream(&sd, QIODevice::ReadOnly);
+
+    // Read the version number of the tab state and check if the version is supported.
+    quint32 version = 0;
+    stream >> version;
+    if (version != 2) {
+        // The version of the tab state isn't supported, we can't restore it.
+        return;
+    }
+
+    bool isSplitViewEnabled = false;
+    stream >> isSplitViewEnabled;
+    setSplitViewEnabled(isSplitViewEnabled);
+
+    KUrl primaryUrl;
+    stream >> primaryUrl;
+    m_primaryViewContainer->setUrl(primaryUrl);
+    bool primaryUrlEditable;
+    stream >> primaryUrlEditable;
+    m_primaryViewContainer->urlNavigator()->setUrlEditable(primaryUrlEditable);
+    m_primaryViewContainer->view()->restoreState(stream);
+
+    if (isSplitViewEnabled) {
+        KUrl secondaryUrl;
+        stream >> secondaryUrl;
+        m_secondaryViewContainer->setUrl(secondaryUrl);
+        bool secondaryUrlEditable;
+        stream >> secondaryUrlEditable;
+        m_secondaryViewContainer->urlNavigator()->setUrlEditable(secondaryUrlEditable);
+        m_secondaryViewContainer->view()->restoreState(stream);
+    }
+
+    stream >> m_primaryViewActive;
+    if (m_primaryViewActive) {
+        m_primaryViewContainer->setActive(true);
+    } else {
+        Q_ASSERT(m_splitViewEnabled);
+        m_secondaryViewContainer->setActive(true);
+    }
+
+    QByteArray splitterState;
+    stream >> splitterState;
+    m_splitter->restoreState(splitterState);
+}
+
+void DolphinTabPage::restoreStateV1(const QByteArray& state)
+{
+    if (state.isEmpty()) {
+        return;
+    }
+
     QByteArray sd = state;
     QDataStream stream(&sd, QIODevice::ReadOnly);
 
@@ -237,12 +303,23 @@ void DolphinTabPage::slotViewActivated()
     if (newActiveView != oldActiveView) {
         disconnect(oldActiveView, SIGNAL(urlChanged(KUrl)),
                    this, SIGNAL(activeViewUrlChanged(KUrl)));
+        disconnect(oldActiveView, SIGNAL(redirection(KUrl,KUrl)),
+                   this, SLOT(slotViewUrlRedirection(KUrl,KUrl)));
         connect(newActiveView, SIGNAL(urlChanged(KUrl)),
                 this, SIGNAL(activeViewUrlChanged(KUrl)));
+        connect(newActiveView, SIGNAL(redirection(KUrl,KUrl)),
+                this, SLOT(slotViewUrlRedirection(KUrl,KUrl)));
     }
 
     emit activeViewUrlChanged(activeViewContainer()->url());
-    emit activeViewChanged();
+    emit activeViewChanged(activeViewContainer());
+}
+
+void DolphinTabPage::slotViewUrlRedirection(const KUrl& oldUrl, const KUrl& newUrl)
+{
+    Q_UNUSED(oldUrl);
+
+    emit activeViewUrlChanged(newUrl);
 }
 
 DolphinViewContainer* DolphinTabPage::createViewContainer(const KUrl& url) const