summaryrefslogtreecommitdiffstats
path: root/src/widgets
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@theqtcompany.com>2015-04-22 09:04:29 +0200
committerLiang Qi <liang.qi@theqtcompany.com>2015-04-22 09:25:54 +0200
commitaed5a7168354c6ae47687d20b4bd3f0adcc14f8e (patch)
treed2060479a7c12fdba8c1955e5d363754feffabb8 /src/widgets
parentd3d10cf23d61f4a011f1a7e9abdee1a92717e80f (diff)
parent628fa13ea4d6ff0e2e2ee76c9adfc78676de3c59 (diff)
Merge remote-tracking branch 'origin/5.5' into dev
Conflicts: src/corelib/statemachine/qstatemachine.cpp src/corelib/statemachine/qstatemachine_p.h src/gui/painting/qdrawhelper.cpp src/plugins/platforms/xcb/qxcbnativeinterface.cpp src/plugins/platforms/xcb/qxcbwindow.cpp src/plugins/platforms/xcb/qxcbwindow.h src/testlib/qtestblacklist.cpp src/tools/qdoc/node.cpp src/tools/qdoc/node.h tests/auto/gui/painting/qcolor/tst_qcolor.cpp Change-Id: I6c78b7b162001712d5774293f501b06b4ff32684
Diffstat (limited to 'src/widgets')
-rw-r--r--src/widgets/dialogs/qfiledialog.cpp149
-rw-r--r--src/widgets/dialogs/qfiledialog_p.h6
-rw-r--r--src/widgets/graphicsview/qgraphicsanchorlayout_p.h4
-rw-r--r--src/widgets/graphicsview/qgraphicsitem.cpp2
-rw-r--r--src/widgets/kernel/qapplication.cpp1
-rw-r--r--src/widgets/kernel/qwidget.cpp2
-rw-r--r--src/widgets/kernel/qwidgetbackingstore.cpp1
-rw-r--r--src/widgets/widgets/qtoolbutton.cpp4
8 files changed, 128 insertions, 41 deletions
diff --git a/src/widgets/dialogs/qfiledialog.cpp b/src/widgets/dialogs/qfiledialog.cpp
index 6a1374e3ee..9e5548ab4c 100644
--- a/src/widgets/dialogs/qfiledialog.cpp
+++ b/src/widgets/dialogs/qfiledialog.cpp
@@ -331,6 +331,7 @@ QT_BEGIN_INCLUDE_NAMESPACE
#ifdef Q_DEAD_CODE_FROM_QT4_WIN
#include <qwindowsstyle_p.h>
#endif
+#include <QMetaEnum>
#include <qshortcut.h>
#ifdef Q_DEAD_CODE_FROM_QT4_MAC
#include <qmacstyle_mac_p.h>
@@ -385,9 +386,8 @@ QFileDialog::QFileDialog(const QFileDialogArgs &args)
QFileDialog::~QFileDialog()
{
#ifndef QT_NO_SETTINGS
- QSettings settings(QSettings::UserScope, QLatin1String("QtProject"));
- settings.beginGroup(QLatin1String("Qt"));
- settings.setValue(QLatin1String("filedialog"), saveState());
+ Q_D(QFileDialog);
+ d->saveSettings();
#endif
}
@@ -503,34 +503,7 @@ bool QFileDialog::restoreState(const QByteArray &state)
if (!d->usingWidgets())
return true;
- 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)) {
- for (int i = 0; i < list.count(); ++i)
- list[i] = d->qFileDialogUi->splitter->widget(i)->sizeHint().width();
- d->qFileDialogUi->splitter->setSizes(list);
- }
-
- d->qFileDialogUi->sidebar->setUrls(d->sidebarUrls);
- while (history.count() > 5)
- history.pop_front();
- setHistory(history);
- QHeaderView *headerView = d->qFileDialogUi->treeView->header();
- if (!headerView->restoreState(d->headerData))
- return false;
-
- QList<QAction*> actions = headerView->actions();
- QAbstractItemModel *abstractModel = d->model;
-#ifndef QT_NO_PROXYMODEL
- if (d->proxyModel)
- abstractModel = d->proxyModel;
-#endif
- int total = qMin(abstractModel->columnCount(QModelIndex()), actions.count() + 1);
- for (int i = 1; i < total; ++i)
- actions.at(i - 1)->setChecked(!headerView->isSectionHidden(i));
-
- return true;
+ return d->restoreWidgetState(history, -1);
}
/*!
@@ -2670,6 +2643,104 @@ void QFileDialog::accept()
}
}
+#ifndef QT_NO_SETTINGS
+void QFileDialogPrivate::saveSettings()
+{
+ Q_Q(QFileDialog);
+ QSettings settings(QSettings::UserScope, QLatin1String("QtProject"));
+ settings.beginGroup(QLatin1String("FileDialog"));
+
+ if (usingWidgets()) {
+ settings.setValue(QLatin1String("sidebarWidth"), qFileDialogUi->splitter->sizes().first());
+ settings.setValue(QLatin1String("shortcuts"), QUrl::toStringList(qFileDialogUi->sidebar->urls()));
+ settings.setValue(QLatin1String("treeViewHeader"), qFileDialogUi->treeView->header()->saveState());
+ }
+ QStringList historyUrls;
+ foreach (const QString &path, q->history())
+ historyUrls << QUrl::fromLocalFile(path).toString();
+ settings.setValue(QLatin1String("history"), historyUrls);
+ settings.setValue(QLatin1String("lastVisited"), lastVisitedDir()->toString());
+ const QMetaEnum &viewModeMeta = q->metaObject()->enumerator(q->metaObject()->indexOfEnumerator("ViewMode"));
+ settings.setValue(QLatin1String("viewMode"), QLatin1String(viewModeMeta.key(q->viewMode())));
+ settings.setValue(QLatin1String("qtVersion"), QLatin1String(QT_VERSION_STR));
+}
+
+bool QFileDialogPrivate::restoreFromSettings()
+{
+ Q_Q(QFileDialog);
+ QSettings settings(QSettings::UserScope, QLatin1String("QtProject"));
+ if (!settings.childGroups().contains(QLatin1String("FileDialog")))
+ return false;
+ settings.beginGroup(QLatin1String("FileDialog"));
+
+ q->setDirectoryUrl(lastVisitedDir()->isEmpty() ? settings.value(QLatin1String("lastVisited")).toUrl() : *lastVisitedDir());
+
+ QByteArray viewModeStr = settings.value(QLatin1String("viewMode")).toString().toLatin1();
+ const QMetaEnum &viewModeMeta = q->metaObject()->enumerator(q->metaObject()->indexOfEnumerator("ViewMode"));
+ bool ok = false;
+ int viewMode = viewModeMeta.keyToValue(viewModeStr.constData(), &ok);
+ if (!ok)
+ viewMode = QFileDialog::List;
+ q->setViewMode(static_cast<QFileDialog::ViewMode>(viewMode));
+
+ sidebarUrls = QUrl::fromStringList(settings.value(QLatin1String("shortcuts")).toStringList());
+ headerData = settings.value(QLatin1String("treeViewHeader")).toByteArray();
+
+ if (!usingWidgets())
+ return true;
+
+ QStringList history;
+ foreach (const QString &urlStr, settings.value(QLatin1String("history")).toStringList()) {
+ QUrl url(urlStr);
+ if (url.isLocalFile())
+ history << url.toLocalFile();
+ }
+
+ return restoreWidgetState(history, settings.value(QLatin1String("sidebarWidth"), -1).toInt());
+}
+#endif // QT_NO_SETTINGS
+
+bool QFileDialogPrivate::restoreWidgetState(QStringList &history, int splitterPosition)
+{
+ Q_Q(QFileDialog);
+ if (splitterPosition >= 0) {
+ QList<int> splitterSizes;
+ splitterSizes.append(splitterPosition);
+ splitterSizes.append(qFileDialogUi->splitter->widget(1)->sizeHint().width());
+ qFileDialogUi->splitter->setSizes(splitterSizes);
+ } else {
+ if (!qFileDialogUi->splitter->restoreState(splitterState))
+ return false;
+ QList<int> list = qFileDialogUi->splitter->sizes();
+ if (list.count() >= 2 && (list.at(0) == 0 || list.at(1) == 0)) {
+ for (int i = 0; i < list.count(); ++i)
+ list[i] = qFileDialogUi->splitter->widget(i)->sizeHint().width();
+ qFileDialogUi->splitter->setSizes(list);
+ }
+ }
+
+ qFileDialogUi->sidebar->setUrls(sidebarUrls);
+ while (history.count() > 5)
+ history.pop_front();
+ q->setHistory(history);
+
+ QHeaderView *headerView = qFileDialogUi->treeView->header();
+ if (!headerView->restoreState(headerData))
+ return false;
+
+ QList<QAction*> actions = headerView->actions();
+ QAbstractItemModel *abstractModel = model;
+#ifndef QT_NO_PROXYMODEL
+ if (proxyModel)
+ abstractModel = proxyModel;
+#endif
+ int total = qMin(abstractModel->columnCount(QModelIndex()), actions.count() + 1);
+ for (int i = 1; i < total; ++i)
+ actions.at(i - 1)->setChecked(!headerView->isSectionHidden(i));
+
+ return true;
+}
+
/*!
\internal
@@ -2696,8 +2767,12 @@ void QFileDialogPrivate::init(const QUrl &directory, const QString &nameFilter,
q->selectFile(initialSelection(directory));
#ifndef QT_NO_SETTINGS
- const QSettings settings(QSettings::UserScope, QLatin1String("QtProject"));
- q->restoreState(settings.value(QLatin1String("Qt/filedialog")).toByteArray());
+ // Try to restore from the FileDialog settings group; if it fails, fall back
+ // to the pre-5.5 QByteArray serialized settings.
+ if (!restoreFromSettings()) {
+ const QSettings settings(QSettings::UserScope, QLatin1String("QtProject"));
+ q->restoreState(settings.value(QLatin1String("Qt/filedialog")).toByteArray());
+ }
#endif
#if defined(Q_EMBEDDED_SMALLSCREEN)
@@ -2845,8 +2920,12 @@ void QFileDialogPrivate::createWidgets()
createMenuActions();
#ifndef QT_NO_SETTINGS
- const QSettings settings(QSettings::UserScope, QLatin1String("QtProject"));
- q->restoreState(settings.value(QLatin1String("Qt/filedialog")).toByteArray());
+ // Try to restore from the FileDialog settings group; if it fails, fall back
+ // to the pre-5.5 QByteArray serialized settings.
+ if (!restoreFromSettings()) {
+ const QSettings settings(QSettings::UserScope, QLatin1String("QtProject"));
+ q->restoreState(settings.value(QLatin1String("Qt/filedialog")).toByteArray());
+ }
#endif
// Initial widget states from options
diff --git a/src/widgets/dialogs/qfiledialog_p.h b/src/widgets/dialogs/qfiledialog_p.h
index 9eb08f7a3a..8a10896966 100644
--- a/src/widgets/dialogs/qfiledialog_p.h
+++ b/src/widgets/dialogs/qfiledialog_p.h
@@ -181,6 +181,12 @@ public:
#endif
}
+#ifndef QT_NO_SETTINGS
+ void saveSettings();
+ bool restoreFromSettings();
+#endif
+
+ bool restoreWidgetState(QStringList &history, int splitterPosition);
void setLastVisitedDirectory(const QUrl &dir);
void retranslateWindowTitle();
void retranslateStrings();
diff --git a/src/widgets/graphicsview/qgraphicsanchorlayout_p.h b/src/widgets/graphicsview/qgraphicsanchorlayout_p.h
index a4609c41cf..c0bb8ef63a 100644
--- a/src/widgets/graphicsview/qgraphicsanchorlayout_p.h
+++ b/src/widgets/graphicsview/qgraphicsanchorlayout_p.h
@@ -251,9 +251,7 @@ struct AnchorVertexPair : public AnchorVertex {
#ifdef QT_DEBUG
inline QString AnchorVertex::toString() const
{
- if (!this) {
- return QLatin1String("NULL");
- } else if (m_type == Pair) {
+ if (m_type == Pair) {
const AnchorVertexPair *vp = static_cast<const AnchorVertexPair *>(this);
return QString::fromLatin1("(%1, %2)").arg(vp->m_first->toString()).arg(vp->m_second->toString());
} else if (!m_item) {
diff --git a/src/widgets/graphicsview/qgraphicsitem.cpp b/src/widgets/graphicsview/qgraphicsitem.cpp
index eaa5cb99e4..cd30410097 100644
--- a/src/widgets/graphicsview/qgraphicsitem.cpp
+++ b/src/widgets/graphicsview/qgraphicsitem.cpp
@@ -11290,7 +11290,7 @@ static void formatGraphicsItemHelper(QDebug debug, const QGraphicsItem *item)
debug << ", pos=";
QtDebugUtils::formatQPoint(debug, item->pos());
if (const qreal z = item->zValue())
- debug << ", z=" << item->zValue();
+ debug << ", z=" << z;
if (item->flags())
debug << ", flags=" << item->flags();
}
diff --git a/src/widgets/kernel/qapplication.cpp b/src/widgets/kernel/qapplication.cpp
index 00f590ebc2..ed10beddd4 100644
--- a/src/widgets/kernel/qapplication.cpp
+++ b/src/widgets/kernel/qapplication.cpp
@@ -1508,6 +1508,7 @@ void QApplicationPrivate::setPalette_helper(const QPalette &palette, const char*
QApplicationPrivate::set_pal = new QPalette(palette);
else
*QApplicationPrivate::set_pal = palette;
+ QCoreApplication::setAttribute(Qt::AA_SetPalette);
}
}
diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp
index 1f13a34ac0..b49fd9b3b6 100644
--- a/src/widgets/kernel/qwidget.cpp
+++ b/src/widgets/kernel/qwidget.cpp
@@ -2608,6 +2608,8 @@ QString QWidget::styleSheet() const
void QWidget::setStyleSheet(const QString& styleSheet)
{
Q_D(QWidget);
+ if (data->in_destructor)
+ return;
d->createExtra();
QStyleSheetStyle *proxy = qobject_cast<QStyleSheetStyle *>(d->extra->style);
diff --git a/src/widgets/kernel/qwidgetbackingstore.cpp b/src/widgets/kernel/qwidgetbackingstore.cpp
index f8b8ec5ea3..485cf82078 100644
--- a/src/widgets/kernel/qwidgetbackingstore.cpp
+++ b/src/widgets/kernel/qwidgetbackingstore.cpp
@@ -762,6 +762,7 @@ QWidgetBackingStore::~QWidgetBackingStore()
resetWidget(dirtyRenderToTextureWidgets.at(c));
#ifndef QT_NO_OPENGL
+ delete widgetTextures;
delete dirtyOnScreenWidgets;
#endif
dirtyOnScreenWidgets = 0;
diff --git a/src/widgets/widgets/qtoolbutton.cpp b/src/widgets/widgets/qtoolbutton.cpp
index 1efe88acde..5a56c592a6 100644
--- a/src/widgets/widgets/qtoolbutton.cpp
+++ b/src/widgets/widgets/qtoolbutton.cpp
@@ -733,9 +733,9 @@ void QToolButtonPrivate::popupTimerDone()
horizontal = false;
#endif
QPoint p;
- QRect screen = QApplication::desktop()->availableGeometry(q);
+ const QRect rect = q->rect(); // Find screen via point in case of QGraphicsProxyWidget.
+ QRect screen = QApplication::desktop()->availableGeometry(q->mapToGlobal(rect.center()));
QSize sh = ((QToolButton*)(QMenu*)actualMenu)->receivers(SIGNAL(aboutToShow()))? QSize() : actualMenu->sizeHint();
- QRect rect = q->rect();
if (horizontal) {
if (q->isRightToLeft()) {
if (q->mapToGlobal(QPoint(0, rect.bottom())).y() + sh.height() <= screen.height()) {