]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Save the view states in addition to the view urls and splitter state in DolphinTabPage.
authorEmmanuel Pescosta <emmanuelpescosta099@gmail.com>
Wed, 20 Aug 2014 21:06:39 +0000 (23:06 +0200)
committerEmmanuel Pescosta <emmanuelpescosta099@gmail.com>
Wed, 20 Aug 2014 21:06:39 +0000 (23:06 +0200)
Also added version numbers to view and tab state.

REVIEW: 119792

src/dolphintabpage.cpp
src/dolphintabpage.h
src/dolphintabwidget.cpp
src/views/dolphinview.cpp

index 3d1ba5a3e85babcff66bde960ada232dfbc51063..f7000ea668d3f008bac9f0011bb0703f1d2e2e79 100644 (file)
@@ -171,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;
@@ -196,6 +200,58 @@ void DolphinTabPage::restoreState(const QByteArray& state)
     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);
+
     bool isSplitViewEnabled = false;
     stream >> isSplitViewEnabled;
     setSplitViewEnabled(isSplitViewEnabled);
index de5a589152d7ceeb70031e87c8eb2f677dc128a6..2a406f4a9a065687eff0d07ff6d15de421d752af 100644 (file)
@@ -120,6 +120,15 @@ public:
      */
     void restoreState(const QByteArray& state);
 
+    /**
+     * Restores all tab related properties (urls, splitter layout, ...) from
+     * the given \a state.
+     *
+     * @deprecated The first tab state version has no version number, we keep
+     *             this method to restore old states (<= Dolphin 4.14.x).
+     */
+    void restoreStateV1(const QByteArray& state);
+
 signals:
     void activeViewChanged(DolphinViewContainer* viewContainer);
     void activeViewUrlChanged(const KUrl& url);
index 76d4b8d48d48b49a7d1f4585d53d95c3e667992b..b1b2d858f77f92db96ec48096f9bdd642a6817dd 100644 (file)
@@ -72,7 +72,7 @@ void DolphinTabWidget::saveProperties(KConfigGroup& group) const
 
     for (int i = 0; i < tabCount; ++i) {
         const DolphinTabPage* tabPage = tabPageAt(i);
-        group.writeEntry("Tab " % QString::number(i), tabPage->saveState());
+        group.writeEntry("Tab Data " % QString::number(i), tabPage->saveState());
     }
 }
 
@@ -83,8 +83,15 @@ void DolphinTabWidget::readProperties(const KConfigGroup& group)
         if (i >= count()) {
             openNewActivatedTab();
         }
-        const QByteArray state = group.readEntry("Tab " % QString::number(i), QByteArray());
-        tabPageAt(i)->restoreState(state);
+        if (group.hasKey("Tab Data " % QString::number(i))) {
+            // Tab state created with Dolphin > 4.14.x
+            const QByteArray state = group.readEntry("Tab Data " % QString::number(i), QByteArray());
+            tabPageAt(i)->restoreState(state);
+        } else {
+            // Tab state created with Dolphin <= 4.14.x
+            const QByteArray state = group.readEntry("Tab " % QString::number(i), QByteArray());
+            tabPageAt(i)->restoreStateV1(state);
+        }
     }
 
     const int index = group.readEntry("Active Tab Index", 0);
index 02b8815e07a8e7377991d600fc8ba41e4cc89f05..1de973bd5489704dd5cfcad1681f3c732502e8c5 100644 (file)
@@ -1167,6 +1167,14 @@ bool DolphinView::itemsExpandable() const
 
 void DolphinView::restoreState(QDataStream& stream)
 {
+    // Read the version number of the view state and check if the version is supported.
+    quint32 version = 0;
+    stream >> version;
+    if (version != 1) {
+        // The version of the view state isn't supported, we can't restore it.
+        return;
+    }
+
     // Restore the current item that had the keyboard focus
     stream >> m_currentItemUrl;
 
@@ -1181,6 +1189,8 @@ void DolphinView::restoreState(QDataStream& stream)
 
 void DolphinView::saveState(QDataStream& stream)
 {
+    stream << quint32(1); // View state version
+
     // Save the current item that has the keyboard focus
     const int currentIndex = m_container->controller()->selectionManager()->currentItem();
     if (currentIndex != -1) {