summaryrefslogtreecommitdiffstats
path: root/src/widgets/dialogs/qfiledialog.cpp
diff options
context:
space:
mode:
authorShawn Rutledge <shawn.rutledge@digia.com>2014-09-01 10:32:25 +0200
committerShawn Rutledge <shawn.rutledge@digia.com>2014-09-01 12:54:48 +0200
commit2113bdee5dc78d6b615768afabc3ecd7d14f4b83 (patch)
treee168613bf2f09b29d9d5d1f6d3aaf2f3636cc4f2 /src/widgets/dialogs/qfiledialog.cpp
parent032ab648c44796b3b5bdc3d93a507efc60ac4391 (diff)
QFileDialog: save and restore all settings even if widgets not used
Some applications may use native file dialogs and some may use the widget implementation, but QFileDialog always saves all settings to the same place each time it destroyed. So it is important to remember all settings read in restoreState and put them back in saveState. This bug was introduced by 37ca2224eca671200a2710f57f970d2993e62aa5 Task-number: QTBUG-36888 Change-Id: Ied1db83817480312e963a042784d7bdd16f0a2b1 Reviewed-by: Jan Arve Sæther <jan-arve.saether@digia.com>
Diffstat (limited to 'src/widgets/dialogs/qfiledialog.cpp')
-rw-r--r--src/widgets/dialogs/qfiledialog.cpp21
1 files changed, 9 insertions, 12 deletions
diff --git a/src/widgets/dialogs/qfiledialog.cpp b/src/widgets/dialogs/qfiledialog.cpp
index 9219757dbf..e53cdeac29 100644
--- a/src/widgets/dialogs/qfiledialog.cpp
+++ b/src/widgets/dialogs/qfiledialog.cpp
@@ -454,15 +454,15 @@ QByteArray QFileDialog::saveState() const
stream << d->qFileDialogUi->splitter->saveState();
stream << d->qFileDialogUi->sidebar->urls();
} else {
- stream << QByteArray();
- stream << QList<QUrl>();
+ stream << d->splitterState;
+ stream << d->sidebarUrls;
}
stream << history();
stream << *lastVisitedDir();
if (d->usingWidgets())
stream << d->qFileDialogUi->treeView->header()->saveState();
else
- stream << QByteArray();
+ stream << d->headerData;
stream << qint32(viewMode());
return data;
}
@@ -484,9 +484,6 @@ bool QFileDialog::restoreState(const QByteArray &state)
QDataStream stream(&sd, QIODevice::ReadOnly);
if (stream.atEnd())
return false;
- QByteArray splitterState;
- QByteArray headerData;
- QList<QUrl> bookmarks;
QStringList history;
QString currentDirectory;
qint32 marker;
@@ -497,11 +494,11 @@ bool QFileDialog::restoreState(const QByteArray &state)
if (marker != QFileDialogMagic || v != version)
return false;
- stream >> splitterState
- >> bookmarks
+ stream >> d->splitterState
+ >> d->sidebarUrls
>> history
>> currentDirectory
- >> headerData
+ >> d->headerData
>> viewMode;
setDirectory(lastVisitedDir()->isEmpty() ? currentDirectory : *lastVisitedDir());
@@ -510,7 +507,7 @@ bool QFileDialog::restoreState(const QByteArray &state)
if (!d->usingWidgets())
return true;
- if (!d->qFileDialogUi->splitter->restoreState(splitterState))
+ if (!d->qFileDialogUi->splitter->restoreState(d->splitterState))
return false;
QList<int> list = d->qFileDialogUi->splitter->sizes();
if (list.count() >= 2 && list.at(0) == 0 && list.at(1) == 0) {
@@ -519,12 +516,12 @@ bool QFileDialog::restoreState(const QByteArray &state)
d->qFileDialogUi->splitter->setSizes(list);
}
- d->qFileDialogUi->sidebar->setUrls(bookmarks);
+ d->qFileDialogUi->sidebar->setUrls(d->sidebarUrls);
while (history.count() > 5)
history.pop_front();
setHistory(history);
QHeaderView *headerView = d->qFileDialogUi->treeView->header();
- if (!headerView->restoreState(headerData))
+ if (!headerView->restoreState(d->headerData))
return false;
QList<QAction*> actions = headerView->actions();