Save the view states in addition to the view urls and splitter state in DolphinTabPage.

Also added version numbers to view and tab state.

REVIEW: 119792
This commit is contained in:
Emmanuel Pescosta 2014-08-20 23:06:39 +02:00
parent 46fdff0965
commit b377c6718b
4 changed files with 85 additions and 3 deletions

View 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);

View 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);

View 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);

View 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) {