diff options
author | Paul Olav Tvete <paul.tvete@theqtcompany.com> | 2015-05-13 12:42:46 +0200 |
---|---|---|
committer | Paul Olav Tvete <paul.tvete@theqtcompany.com> | 2015-05-13 12:42:46 +0200 |
commit | 8524853227c753b5cfa14184a086ec0acff3930a (patch) | |
tree | 808fab49e65286a4b4416a8462bb78fc188dfeac /src/widgets | |
parent | d5a6c1613b52ebc015aa85a46c1387909d435926 (diff) | |
parent | bf06924f3ffd22747c93a720caa501d8478dcbe6 (diff) |
Merge branch 'wip/highdpi' of git://code.qt.io/qt/qtbase into dev-highdpi
Conflicts:
src/plugins/platforms/xcb/qxcbscreen.cpp
src/plugins/platforms/xcb/qxcbwindow.cpp
Diffstat (limited to 'src/widgets')
-rw-r--r-- | src/widgets/dialogs/qfiledialog.cpp | 155 | ||||
-rw-r--r-- | src/widgets/dialogs/qfiledialog_p.h | 8 | ||||
-rw-r--r-- | src/widgets/graphicsview/qgraphicsanchorlayout_p.h | 4 | ||||
-rw-r--r-- | src/widgets/graphicsview/qgraphicsitem.cpp | 2 | ||||
-rw-r--r-- | src/widgets/graphicsview/qgraphicssceneevent.h | 2 | ||||
-rw-r--r-- | src/widgets/itemviews/qtreeview.cpp | 2 | ||||
-rw-r--r-- | src/widgets/itemviews/qtreewidget.cpp | 8 | ||||
-rw-r--r-- | src/widgets/kernel/qapplication.cpp | 6 | ||||
-rw-r--r-- | src/widgets/kernel/qtooltip.cpp | 1 | ||||
-rw-r--r-- | src/widgets/kernel/qwhatsthis.cpp | 1 | ||||
-rw-r--r-- | src/widgets/kernel/qwidget.cpp | 3 | ||||
-rw-r--r-- | src/widgets/kernel/qwidget_p.h | 2 | ||||
-rw-r--r-- | src/widgets/kernel/qwidgetbackingstore.cpp | 1 | ||||
-rw-r--r-- | src/widgets/styles/qfusionstyle.cpp | 1 | ||||
-rw-r--r-- | src/widgets/styles/qwindowsstyle.cpp | 2 | ||||
-rw-r--r-- | src/widgets/styles/qwindowsstyle_p_p.h | 1 | ||||
-rw-r--r-- | src/widgets/util/qsystemtrayicon_x11.cpp | 2 | ||||
-rw-r--r-- | src/widgets/widgets/qcombobox_p.h | 1 | ||||
-rw-r--r-- | src/widgets/widgets/qdockwidget.cpp | 10 | ||||
-rw-r--r-- | src/widgets/widgets/qtoolbutton.cpp | 4 |
20 files changed, 154 insertions, 62 deletions
diff --git a/src/widgets/dialogs/qfiledialog.cpp b/src/widgets/dialogs/qfiledialog.cpp index 6a1374e3ee..1be2f93478 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); } /*! @@ -933,7 +906,7 @@ void QFileDialog::setDirectory(const QString &directory) return; QUrl newDirUrl = QUrl::fromLocalFile(newDirectory); - d->setLastVisitedDirectory(newDirUrl); + QFileDialogPrivate::setLastVisitedDirectory(newDirUrl); d->options->setInitialDirectory(QUrl::fromLocalFile(directory)); if (!d->usingWidgets()) { @@ -994,7 +967,7 @@ void QFileDialog::setDirectoryUrl(const QUrl &directory) if (!directory.isValid()) return; - d->setLastVisitedDirectory(directory); + QFileDialogPrivate::setLastVisitedDirectory(directory); d->options->setInitialDirectory(directory); if (d->nativeDialogInUse) @@ -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 @@ -3689,7 +3768,7 @@ QString QFileDialogPrivate::getEnvironmentVariable(const QString &string) { #ifdef Q_OS_UNIX if (string.size() > 1 && string.startsWith(QLatin1Char('$'))) { - return QString::fromLocal8Bit(getenv(string.mid(1).toLatin1().constData())); + return QString::fromLocal8Bit(qgetenv(string.mid(1).toLatin1().constData())); } #else if (string.size() > 2 && string.startsWith(QLatin1Char('%')) && string.endsWith(QLatin1Char('%'))) { diff --git a/src/widgets/dialogs/qfiledialog_p.h b/src/widgets/dialogs/qfiledialog_p.h index 9eb08f7a3a..f610e46f83 100644 --- a/src/widgets/dialogs/qfiledialog_p.h +++ b/src/widgets/dialogs/qfiledialog_p.h @@ -181,7 +181,13 @@ public: #endif } - void setLastVisitedDirectory(const QUrl &dir); +#ifndef QT_NO_SETTINGS + void saveSettings(); + bool restoreFromSettings(); +#endif + + bool restoreWidgetState(QStringList &history, int splitterPosition); + static void setLastVisitedDirectory(const QUrl &dir); void retranslateWindowTitle(); void retranslateStrings(); void emitFilesSelected(const QStringList &files); 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/graphicsview/qgraphicssceneevent.h b/src/widgets/graphicsview/qgraphicssceneevent.h index 1e3554fa36..ffa708ea23 100644 --- a/src/widgets/graphicsview/qgraphicssceneevent.h +++ b/src/widgets/graphicsview/qgraphicssceneevent.h @@ -40,7 +40,9 @@ #include <QtCore/qrect.h> #include <QtGui/qpolygon.h> #include <QtCore/qset.h> +#if QT_DEPRECATED_SINCE(5, 5) #include <QtCore/qhash.h> +#endif QT_BEGIN_NAMESPACE diff --git a/src/widgets/itemviews/qtreeview.cpp b/src/widgets/itemviews/qtreeview.cpp index 188a503d10..43db43fcd4 100644 --- a/src/widgets/itemviews/qtreeview.cpp +++ b/src/widgets/itemviews/qtreeview.cpp @@ -1913,7 +1913,7 @@ void QTreeView::mouseReleaseEvent(QMouseEvent *event) if (d->itemDecorationAt(event->pos()) == -1) { QAbstractItemView::mouseReleaseEvent(event); } else { - if (state() == QAbstractItemView::DragSelectingState) + if (state() == QAbstractItemView::DragSelectingState || state() == QAbstractItemView::DraggingState) setState(QAbstractItemView::NoState); if (style()->styleHint(QStyle::SH_ListViewExpand_SelectMouseType, 0, this) == QEvent::MouseButtonRelease) d->expandOrCollapseItemAtPos(event->pos()); diff --git a/src/widgets/itemviews/qtreewidget.cpp b/src/widgets/itemviews/qtreewidget.cpp index bf736bc387..1366a00318 100644 --- a/src/widgets/itemviews/qtreewidget.cpp +++ b/src/widgets/itemviews/qtreewidget.cpp @@ -1720,12 +1720,12 @@ void QTreeWidgetItem::setData(int column, int role, const QVariant &value) } } break; case Qt::CheckStateRole: - if ((itemFlags & Qt::ItemIsTristate) && value != Qt::PartiallyChecked) { + if ((itemFlags & Qt::ItemIsAutoTristate) && value != Qt::PartiallyChecked) { for (int i = 0; i < children.count(); ++i) { QTreeWidgetItem *child = children.at(i); if (child->data(column, role).isValid()) {// has a CheckState Qt::ItemFlags f = itemFlags; // a little hack to avoid multiple dataChanged signals - itemFlags &= ~Qt::ItemIsTristate; + itemFlags &= ~Qt::ItemIsAutoTristate; child->setData(column, role, value); itemFlags = f; } @@ -1760,7 +1760,7 @@ void QTreeWidgetItem::setData(int column, int role, const QVariant &value) model->emitDataChanged(this, column); if (role == Qt::CheckStateRole) { QTreeWidgetItem *p; - for (p = par; p && (p->itemFlags & Qt::ItemIsTristate); p = p->par) + for (p = par; p && (p->itemFlags & Qt::ItemIsAutoTristate); p = p->par) model->emitDataChanged(p, column); } } @@ -1779,7 +1779,7 @@ QVariant QTreeWidgetItem::data(int column, int role) const break; case Qt::CheckStateRole: // special case for check state in tristate - if (children.count() && (itemFlags & Qt::ItemIsTristate)) + if (children.count() && (itemFlags & Qt::ItemIsAutoTristate)) return childrenCheckState(column); // fallthrough intended default: diff --git a/src/widgets/kernel/qapplication.cpp b/src/widgets/kernel/qapplication.cpp index 00f590ebc2..dd7474b930 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); } } @@ -2311,7 +2312,6 @@ QWidget *QApplicationPrivate::focusNextPrevChild_helper(QWidget *toplevel, bool */ void QApplicationPrivate::dispatchEnterLeave(QWidget* enter, QWidget* leave, const QPointF &globalPosF) { - const QPoint globalPos = globalPosF.toPoint(); #if 0 if (leave) { QEvent e(QEvent::Leave); @@ -2398,6 +2398,10 @@ void QApplicationPrivate::dispatchEnterLeave(QWidget* enter, QWidget* leave, con } } if (!enterList.isEmpty()) { + // Guard against QGuiApplicationPrivate::lastCursorPosition initialized to qInf(), qInf(). + const QPoint globalPos = qIsInf(globalPosF.x()) + ? QPoint(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX) + : globalPosF.toPoint(); const QPoint windowPos = enterList.front()->window()->mapFromGlobal(globalPos); for (int i = 0; i < enterList.size(); ++i) { w = enterList.at(i); diff --git a/src/widgets/kernel/qtooltip.cpp b/src/widgets/kernel/qtooltip.cpp index 8a800ab9d0..51bf6e4684 100644 --- a/src/widgets/kernel/qtooltip.cpp +++ b/src/widgets/kernel/qtooltip.cpp @@ -37,7 +37,6 @@ #include <qapplication.h> #include <qdesktopwidget.h> #include <qevent.h> -#include <qhash.h> #include <qlabel.h> #include <qpointer.h> #include <qstyle.h> diff --git a/src/widgets/kernel/qwhatsthis.cpp b/src/widgets/kernel/qwhatsthis.cpp index 5fb4695687..1e437c4fb7 100644 --- a/src/widgets/kernel/qwhatsthis.cpp +++ b/src/widgets/kernel/qwhatsthis.cpp @@ -42,7 +42,6 @@ #include "qscreen.h" #include "qpainter.h" #include "qtimer.h" -#include "qhash.h" #include "qaction.h" #include "qcursor.h" #include "qbitmap.h" diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp index 65bc924492..f05094dd01 100644 --- a/src/widgets/kernel/qwidget.cpp +++ b/src/widgets/kernel/qwidget.cpp @@ -37,7 +37,6 @@ #include "qcursor.h" #include "qdesktopwidget_p.h" #include "qevent.h" -#include "qhash.h" #include "qlayout.h" #include "qmenu.h" #include "qmetaobject.h" @@ -2610,6 +2609,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/qwidget_p.h b/src/widgets/kernel/qwidget_p.h index 9425426215..fe65cb19c7 100644 --- a/src/widgets/kernel/qwidget_p.h +++ b/src/widgets/kernel/qwidget_p.h @@ -358,7 +358,7 @@ public: void updateFont(const QFont &); inline void setFont_helper(const QFont &font) { - if (data.fnt == font && data.fnt.resolve() == font.resolve()) + if (data.fnt.resolve() == font.resolve() && data.fnt == font) return; updateFont(font); } 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/styles/qfusionstyle.cpp b/src/widgets/styles/qfusionstyle.cpp index 6d722c680b..f87542ffa8 100644 --- a/src/widgets/styles/qfusionstyle.cpp +++ b/src/widgets/styles/qfusionstyle.cpp @@ -40,7 +40,6 @@ #include <qpushbutton.h> #include <qpainter.h> #include <qdir.h> -#include <qhash.h> #include <qstyleoption.h> #include <qapplication.h> #include <qmainwindow.h> diff --git a/src/widgets/styles/qwindowsstyle.cpp b/src/widgets/styles/qwindowsstyle.cpp index bed2b5c57a..40597a41f3 100644 --- a/src/widgets/styles/qwindowsstyle.cpp +++ b/src/widgets/styles/qwindowsstyle.cpp @@ -1795,7 +1795,7 @@ void QWindowsStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPai QColor left, right; //Titlebar gradient - if (widget && widget->isWindow()) { + if (opt->state & QStyle::State_Window) { floating = true; if (active) { left = d->activeCaptionColor; diff --git a/src/widgets/styles/qwindowsstyle_p_p.h b/src/widgets/styles/qwindowsstyle_p_p.h index a35ce3e6a1..c8778cc914 100644 --- a/src/widgets/styles/qwindowsstyle_p_p.h +++ b/src/widgets/styles/qwindowsstyle_p_p.h @@ -50,7 +50,6 @@ #ifndef QT_NO_STYLE_WINDOWS #include <qlist.h> -#include <qhash.h> QT_BEGIN_NAMESPACE diff --git a/src/widgets/util/qsystemtrayicon_x11.cpp b/src/widgets/util/qsystemtrayicon_x11.cpp index 2752c56c65..9a69db1bc8 100644 --- a/src/widgets/util/qsystemtrayicon_x11.cpp +++ b/src/widgets/util/qsystemtrayicon_x11.cpp @@ -354,7 +354,7 @@ void QSystemTrayIconPrivate::showMessage_sys(const QString &title, const QString } if (!sys) return; - QBalloonTip::showBalloon(icon, message, title, sys->systemTrayIcon(), + QBalloonTip::showBalloon(icon, title, message, sys->systemTrayIcon(), sys->globalGeometry().center(), msecs); } diff --git a/src/widgets/widgets/qcombobox_p.h b/src/widgets/widgets/qcombobox_p.h index 3fdfdcc22f..b69b94f3b9 100644 --- a/src/widgets/widgets/qcombobox_p.h +++ b/src/widgets/widgets/qcombobox_p.h @@ -57,7 +57,6 @@ #include "QtGui/qpainter.h" #include "QtWidgets/qstyle.h" #include "QtWidgets/qstyleoption.h" -#include "QtCore/qhash.h" #include "QtCore/qpair.h" #include "QtCore/qtimer.h" #include "private/qwidget_p.h" diff --git a/src/widgets/widgets/qdockwidget.cpp b/src/widgets/widgets/qdockwidget.cpp index db8d167b0d..21b0904cc0 100644 --- a/src/widgets/widgets/qdockwidget.cpp +++ b/src/widgets/widgets/qdockwidget.cpp @@ -1031,8 +1031,14 @@ void QDockWidgetPrivate::setWindowState(bool floating, bool unplug, const QRect q->setWindowFlags(flags); - if (!rect.isNull()) - q->setGeometry(rect); + if (!rect.isNull()) { + if (floating) { + q->resize(rect.size()); + q->move(rect.topLeft()); + } else { + q->setGeometry(rect); + } + } updateButtons(); 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()) { |