From be6921e8605ef3951ff8e8f2528c4c2e4f8d9b71 Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Sun, 26 Jun 2016 15:36:15 +0200 Subject: Doc: fix app type notes for QDirModel and QFileSystemModel MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit "GUI application" is quite confusing, because in fact, these models are part of QtWidgets and thus require QApplication instead of QGuiApplication. Change-Id: I35ccc8bfeb74c75a84b2ffbe1cab0c0839495980 Reviewed-by: Sze Howe Koh Reviewed-by: Topi Reiniƶ Reviewed-by: Friedemann Kleint --- src/widgets/dialogs/qfilesystemmodel.cpp | 2 +- src/widgets/itemviews/qdirmodel.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/dialogs/qfilesystemmodel.cpp b/src/widgets/dialogs/qfilesystemmodel.cpp index 0e2eee3b47..441a54bd7d 100644 --- a/src/widgets/dialogs/qfilesystemmodel.cpp +++ b/src/widgets/dialogs/qfilesystemmodel.cpp @@ -81,7 +81,7 @@ QT_BEGIN_NAMESPACE about the underlying files and directories related to items in the model. Directories can be created and removed using mkdir(), rmdir(). - \note QFileSystemModel requires an instance of a GUI application. + \note QFileSystemModel requires an instance of \l QApplication. \section1 Example Usage diff --git a/src/widgets/itemviews/qdirmodel.cpp b/src/widgets/itemviews/qdirmodel.cpp index ac23e22ef7..b2d2a981fc 100644 --- a/src/widgets/itemviews/qdirmodel.cpp +++ b/src/widgets/itemviews/qdirmodel.cpp @@ -202,7 +202,7 @@ void QDirModelPrivate::invalidate() Directories can be created and removed using mkdir(), rmdir(), and the model will be automatically updated to take the changes into account. - \note QDirModel requires an instance of a GUI application. + \note QDirModel requires an instance of \l QApplication. \sa nameFilters(), setFilter(), filter(), QListView, QTreeView, QFileSystemModel, {Dir View Example}, {Model Classes} -- cgit v1.2.3 From 7a8330ddf7601608346036e2f120a4497e016ee8 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Wed, 22 Jun 2016 14:18:33 +0200 Subject: Fix QDockWidget losing decoration on undocking when GroupedDragging is enabled We should not remember the wrong undocked geometry. If the dockwidget is not floating, the geometry is not relative to the global coordinate, it makes no sense to store it. Task-number: QTBUG-53808 Change-Id: I242467d8da62d7c787eca2c784aeec646236cb44 Reviewed-by: Friedemann Kleint --- src/widgets/widgets/qdockwidget.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/widgets') diff --git a/src/widgets/widgets/qdockwidget.cpp b/src/widgets/widgets/qdockwidget.cpp index a7e04d3bfc..20f35cb211 100644 --- a/src/widgets/widgets/qdockwidget.cpp +++ b/src/widgets/widgets/qdockwidget.cpp @@ -805,7 +805,8 @@ void QDockWidgetPrivate::endDrag(bool abort) } else { setResizerActive(false); } - undockedGeometry = q->geometry(); + if (q->isFloating()) // Might not be floating when dragging a QDockWidgetGroupWindow + undockedGeometry = q->geometry(); q->activateWindow(); } else { // The tab was not plugged back in the QMainWindow but the QDockWidget cannot -- cgit v1.2.3 From 25db59d7723c3d05ff55104768da31b0a7ce68ee Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Thu, 30 Jun 2016 08:48:52 +0200 Subject: Fix QLineEdit not showing clear button on macOS Restore code path returning the resource pixmap for platforms that do not have themes in QCommonStyle. Amends change b657496a0ba326af0688e9935069139c002849cf. Task-number: QTBUG-54425 Change-Id: I764408622b825b86afbe7ccf37e1498d3efb3850 Reviewed-by: Timur Pocheptsov --- src/widgets/styles/qcommonstyle.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'src/widgets') diff --git a/src/widgets/styles/qcommonstyle.cpp b/src/widgets/styles/qcommonstyle.cpp index 7b0d8eacd5..6bf9d20b47 100644 --- a/src/widgets/styles/qcommonstyle.cpp +++ b/src/widgets/styles/qcommonstyle.cpp @@ -5194,6 +5194,13 @@ static QPixmap cachedPixmapFromXPM(const char * const *xpm) return result; } +#ifndef QT_NO_IMAGEFORMAT_PNG +static inline QString clearText16IconPath() +{ + return QStringLiteral(":/qt-project.org/styles/commonstyle/images/cleartext-16.png"); +} +#endif // !QT_NO_IMAGEFORMAT_PNG + static QIcon clearTextIcon(bool rtl) { const QString directionalThemeName = rtl @@ -5206,7 +5213,7 @@ static QIcon clearTextIcon(bool rtl) QIcon icon; #ifndef QT_NO_IMAGEFORMAT_PNG - QPixmap clearText16(QStringLiteral(":/qt-project.org/styles/commonstyle/images/cleartext-16.png")); + QPixmap clearText16(clearText16IconPath()); Q_ASSERT(!clearText16.size().isEmpty()); icon.addPixmap(clearText16); QPixmap clearText32(QStringLiteral(":/qt-project.org/styles/commonstyle/images/cleartext-32.png")); @@ -5521,6 +5528,8 @@ QPixmap QCommonStyle::standardPixmap(StandardPixmap sp, const QStyleOption *opti return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-volume-16.png")); case SP_MediaVolumeMuted: return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-volume-muted-16.png")); + case SP_LineEditClearButton: + return QPixmap(clearText16IconPath()); #endif // QT_NO_IMAGEFORMAT_PNG default: break; -- cgit v1.2.3 From d9b545152d8cddaa389256e869b994ecf3ce1119 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Fri, 17 Jun 2016 12:47:41 -0700 Subject: QFormLayout: Remove internal, unused functions Found by the Intel Compiler 17 Beta on Windows: qformlayout.cpp(68): error #177: function "::FixedColumnMatrix::addRow [with T=QFormLayoutItem *, NumColumns=2]" was declared but never referenced Change-Id: Ib57b52598e2f452985e9fffd1458f6a3c3a609dc Reviewed-by: Giuseppe D'Angelo --- src/widgets/kernel/qformlayout.cpp | 28 ---------------------------- 1 file changed, 28 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/kernel/qformlayout.cpp b/src/widgets/kernel/qformlayout.cpp index 9b346a2c50..d02cb7d6a9 100644 --- a/src/widgets/kernel/qformlayout.cpp +++ b/src/widgets/kernel/qformlayout.cpp @@ -65,12 +65,7 @@ public: T &operator()(int r, int c) { return m_storage[r * NumColumns + c]; } int rowCount() const { return m_storage.size() / NumColumns; } - void addRow(const T &value); void insertRow(int r, const T &value); - void removeRow(int r); - - bool find(const T &value, int *rowPtr, int *colPtr) const ; - int count(const T &value) const { return m_storage.count(value); } // Hmmpf.. Some things are faster that way. const Storage &storage() const { return m_storage; } @@ -81,13 +76,6 @@ private: Storage m_storage; }; -template -void FixedColumnMatrix::addRow(const T &value) -{ - for (int i = 0; i < NumColumns; ++i) - m_storage.append(value); -} - template void FixedColumnMatrix::insertRow(int r, const T &value) { @@ -96,22 +84,6 @@ void FixedColumnMatrix::insertRow(int r, const T &value) m_storage.insert(it, NumColumns, value); } -template -void FixedColumnMatrix::removeRow(int r) -{ - m_storage.remove(r * NumColumns, NumColumns); -} - -template -bool FixedColumnMatrix::find(const T &value, int *rowPtr, int *colPtr) const -{ - const int idx = m_storage.indexOf(value); - if (idx == -1) - return false; - storageIndexToPosition(idx, rowPtr, colPtr); - return true; -} - template void FixedColumnMatrix::storageIndexToPosition(int idx, int *rowPtr, int *colPtr) { -- cgit v1.2.3 From 27df6cb32d42c0a4475fc2d11b4c9d53d19fe394 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Mon, 27 Jun 2016 14:12:54 +0200 Subject: Fix the QMainWindow context menu when there are floating tabs If QMainWindow::GroupedDragging is enabled and there are QDockWidgetGroupWindow, we should still show actions for these QDockWidgets in the context menu Addresses point 4. of QTBUG-52108 Task-number: QTBUG-52108 Change-Id: I11ae401c4fe15e213b0f26e7579634e2062e953c Reviewed-by: Friedemann Kleint --- src/widgets/widgets/qmainwindow.cpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/widgets/qmainwindow.cpp b/src/widgets/widgets/qmainwindow.cpp index 1698ca1519..7a9a077e5f 100644 --- a/src/widgets/widgets/qmainwindow.cpp +++ b/src/widgets/widgets/qmainwindow.cpp @@ -1717,10 +1717,20 @@ QMenu *QMainWindow::createPopupMenu() menu = new QMenu(this); for (int i = 0; i < dockwidgets.size(); ++i) { QDockWidget *dockWidget = dockwidgets.at(i); - if (dockWidget->parentWidget() == this - && !d->layout->layoutState.dockAreaLayout.indexOf(dockWidget).isEmpty()) { - menu->addAction(dockwidgets.at(i)->toggleViewAction()); + // filter to find out if we own this QDockWidget + if (dockWidget->parentWidget() == this) { + if (d->layout->layoutState.dockAreaLayout.indexOf(dockWidget).isEmpty()) + continue; + } else if (QDockWidgetGroupWindow *dwgw = + qobject_cast(dockWidget->parentWidget())) { + if (dwgw->parentWidget() != this) + continue; + if (dwgw->layoutInfo()->indexOf(dockWidget).isEmpty()) + continue; + } else { + continue; } + menu->addAction(dockwidgets.at(i)->toggleViewAction()); } menu->addSeparator(); } -- cgit v1.2.3 From 9cb8ca2b5532c7a4bfb175cbe16fd5680d913822 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Fri, 24 Jun 2016 15:49:28 +0200 Subject: Allow to drag a QDockWidgetGroupWindow into one of its QDockWidget This fixes the 2. of QTBUG-52108 Change-Id: Id887f470c7822f6b264d6b739e8658d9809f6609 Task-numer: QTBUG-52108 Reviewed-by: Friedemann Kleint --- src/widgets/widgets/qmainwindowlayout.cpp | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/widgets/qmainwindowlayout.cpp b/src/widgets/widgets/qmainwindowlayout.cpp index 8dc12d853e..6b247d8d11 100644 --- a/src/widgets/widgets/qmainwindowlayout.cpp +++ b/src/widgets/widgets/qmainwindowlayout.cpp @@ -2366,13 +2366,10 @@ void QMainWindowLayout::hover(QLayoutItem *widgetItem, const QPoint &mousePos) QWidget *w = qobject_cast(c); if (!w) continue; - if (w == widget) - continue; - if (!w->isTopLevel() || !w->isVisible() || w->isMinimized()) - continue; if (!qobject_cast(w) && !qobject_cast(w)) continue; - candidates << w; + if (w != widget && w->isTopLevel() && w->isVisible() && !w->isMinimized()) + candidates << w; if (QDockWidgetGroupWindow *group = qobject_cast(w)) { // Sometimes, there are floating QDockWidget that have a QDockWidgetGroupWindow as a parent. foreach (QObject *c, group->children()) { -- cgit v1.2.3 From f217894152a29d4be14aaf604ee4230cb40b9c97 Mon Sep 17 00:00:00 2001 From: Anton Kudryavtsev Date: Tue, 5 Jul 2016 12:49:03 +0300 Subject: QDateTimeEdit: remove homebrew 'reverse' algorithm Use std::reverse Change-Id: Ia922f3e05e100587f0e7bc91bb1a95679bc03896 Reviewed-by: Marc Mutz --- src/widgets/widgets/qdatetimeedit.cpp | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/widgets/qdatetimeedit.cpp b/src/widgets/widgets/qdatetimeedit.cpp index cfba2cc87f..795f2cedd9 100644 --- a/src/widgets/widgets/qdatetimeedit.cpp +++ b/src/widgets/widgets/qdatetimeedit.cpp @@ -52,6 +52,8 @@ #include #include +#include + #ifndef QT_NO_DATETIMEEDIT //#define QDATETIMEEDIT_QDTEDEBUG @@ -861,14 +863,6 @@ QString QDateTimeEdit::displayFormat() const return isRightToLeft() ? d->unreversedFormat : d->displayFormat; } -template static inline C reverse(const C &l) -{ - C ret; - for (int i=l.size() - 1; i>=0; --i) - ret.append(l.at(i)); - return ret; -} - void QDateTimeEdit::setDisplayFormat(const QString &format) { Q_D(QDateTimeEdit); @@ -882,8 +876,8 @@ void QDateTimeEdit::setDisplayFormat(const QString &format) d->displayFormat += d->sectionNode(i).format(); } d->displayFormat += d->separators.at(0); - d->separators = reverse(d->separators); - d->sectionNodes = reverse(d->sectionNodes); + std::reverse(d->separators.begin(), d->separators.end()); + std::reverse(d->sectionNodes.begin(), d->sectionNodes.end()); } d->formatExplicitlySet = true; -- cgit v1.2.3 From b073ba57f821b2e79c553f974d9fba2cbb034ee9 Mon Sep 17 00:00:00 2001 From: Anton Kudryavtsev Date: Tue, 5 Jul 2016 12:12:45 +0300 Subject: Widgets: use const (and const APIs) more For CoW types, prefer const methods to avoid needless detach()ing. Change-Id: Ia6cad50a10facf6fd4f73d1390edb8642a0aed32 Reviewed-by: Marc Mutz --- .../graphicsview/qgraphicsanchorlayout_p.cpp | 10 ++-- src/widgets/graphicsview/qgraphicsitem.cpp | 2 +- src/widgets/graphicsview/qgraphicsscene.cpp | 60 +++++++++++----------- src/widgets/graphicsview/qgraphicsview.cpp | 6 +-- src/widgets/itemviews/qcolumnview.cpp | 20 ++++---- src/widgets/itemviews/qdirmodel.cpp | 2 +- src/widgets/itemviews/qlistview.cpp | 6 +-- src/widgets/itemviews/qtreeview.cpp | 8 +-- src/widgets/widgets/qdockarealayout.cpp | 2 +- src/widgets/widgets/qfontcombobox.cpp | 2 +- 10 files changed, 59 insertions(+), 59 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/graphicsview/qgraphicsanchorlayout_p.cpp b/src/widgets/graphicsview/qgraphicsanchorlayout_p.cpp index 53db11d2d7..4c01219d87 100644 --- a/src/widgets/graphicsview/qgraphicsanchorlayout_p.cpp +++ b/src/widgets/graphicsview/qgraphicsanchorlayout_p.cpp @@ -1082,7 +1082,7 @@ bool QGraphicsAnchorLayoutPrivate::simplifyGraphIteration(QGraphicsAnchorLayoutP if (candidates.isEmpty()) after = (beforeSequence == adjacents.last() ? adjacents.first() : adjacents.last()); else - after = (candidates.last() == adjacents.last() ? adjacents.first() : adjacents.last()); + after = (candidates.constLast() == adjacents.last() ? adjacents.first() : adjacents.last()); // ### At this point we assumed that candidates will not contain 'after', this may not hold // when simplifying FLOATing anchors. @@ -1134,9 +1134,9 @@ bool QGraphicsAnchorLayoutPrivate::simplifyGraphIteration(QGraphicsAnchorLayoutP // One restriction we have is to not simplify half of an anchor and let the other half // unsimplified. So we remove center edges before and after the sequence. - const AnchorData *firstAnchor = g.edgeData(beforeSequence, candidates.first()); + const AnchorData *firstAnchor = g.edgeData(beforeSequence, candidates.constFirst()); if (firstAnchor->isCenterAnchor) { - beforeSequence = candidates.first(); + beforeSequence = candidates.constFirst(); candidates.remove(0); // If there's not candidates to be simplified, leave. @@ -1144,9 +1144,9 @@ bool QGraphicsAnchorLayoutPrivate::simplifyGraphIteration(QGraphicsAnchorLayoutP continue; } - const AnchorData *lastAnchor = g.edgeData(candidates.last(), afterSequence); + const AnchorData *lastAnchor = g.edgeData(candidates.constLast(), afterSequence); if (lastAnchor->isCenterAnchor) { - afterSequence = candidates.last(); + afterSequence = candidates.constLast(); candidates.remove(candidates.count() - 1); if (candidates.isEmpty()) diff --git a/src/widgets/graphicsview/qgraphicsitem.cpp b/src/widgets/graphicsview/qgraphicsitem.cpp index db683a4e4d..df81d70742 100644 --- a/src/widgets/graphicsview/qgraphicsitem.cpp +++ b/src/widgets/graphicsview/qgraphicsitem.cpp @@ -2152,7 +2152,7 @@ bool QGraphicsItem::isBlockedByModalPanel(QGraphicsItem **blockingPanel) const if (!blockingPanel) blockingPanel = &dummy; - QGraphicsScenePrivate *scene_d = d_ptr->scene->d_func(); + const QGraphicsScenePrivate *scene_d = d_ptr->scene->d_func(); if (scene_d->modalPanels.isEmpty()) return false; diff --git a/src/widgets/graphicsview/qgraphicsscene.cpp b/src/widgets/graphicsview/qgraphicsscene.cpp index cb1d1e68d1..b63686cd77 100644 --- a/src/widgets/graphicsview/qgraphicsscene.cpp +++ b/src/widgets/graphicsview/qgraphicsscene.cpp @@ -940,7 +940,7 @@ void QGraphicsScenePrivate::grabMouse(QGraphicsItem *item, bool implicit) { // Append to list of mouse grabber items, and send a mouse grab event. if (mouseGrabberItems.contains(item)) { - if (mouseGrabberItems.last() == item) { + if (mouseGrabberItems.constLast() == item) { Q_ASSERT(!implicit); if (!lastMouseGrabberItemHasImplicitMouseGrab) { qWarning("QGraphicsItem::grabMouse: already a mouse grabber"); @@ -950,14 +950,14 @@ void QGraphicsScenePrivate::grabMouse(QGraphicsItem *item, bool implicit) } } else { qWarning("QGraphicsItem::grabMouse: already blocked by mouse grabber: %p", - mouseGrabberItems.last()); + mouseGrabberItems.constLast()); } return; } // Send ungrab event to the last grabber. if (!mouseGrabberItems.isEmpty()) { - QGraphicsItem *last = mouseGrabberItems.last(); + QGraphicsItem *last = mouseGrabberItems.constLast(); if (lastMouseGrabberItemHasImplicitMouseGrab) { // Implicit mouse grab is immediately lost. last->ungrabMouse(); @@ -987,12 +987,12 @@ void QGraphicsScenePrivate::ungrabMouse(QGraphicsItem *item, bool itemIsDying) return; } - if (item != mouseGrabberItems.last()) { + if (item != mouseGrabberItems.constLast()) { // Recursively ungrab the next mouse grabber until we reach this item // to ensure state consistency. ungrabMouse(mouseGrabberItems.at(index + 1), itemIsDying); } - if (!popupWidgets.isEmpty() && item == popupWidgets.last()) { + if (!popupWidgets.isEmpty() && item == popupWidgets.constLast()) { // If the item is a popup, go via removePopup to ensure state // consistency and that it gets hidden correctly - beware that // removePopup() reenters this function to continue removing the grab. @@ -1017,7 +1017,7 @@ void QGraphicsScenePrivate::ungrabMouse(QGraphicsItem *item, bool itemIsDying) // items get a GrabMouse event, but this is a rare case with a simple // implementation and it does ensure a consistent state. if (!itemIsDying && !mouseGrabberItems.isEmpty()) { - QGraphicsItem *last = mouseGrabberItems.last(); + QGraphicsItem *last = mouseGrabberItems.constLast(); QEvent event(QEvent::GrabMouse); sendEvent(last, &event); } @@ -1039,11 +1039,11 @@ void QGraphicsScenePrivate::clearMouseGrabber() void QGraphicsScenePrivate::grabKeyboard(QGraphicsItem *item) { if (keyboardGrabberItems.contains(item)) { - if (keyboardGrabberItems.last() == item) + if (keyboardGrabberItems.constLast() == item) qWarning("QGraphicsItem::grabKeyboard: already a keyboard grabber"); else qWarning("QGraphicsItem::grabKeyboard: already blocked by keyboard grabber: %p", - keyboardGrabberItems.last()); + keyboardGrabberItems.constLast()); return; } @@ -1051,7 +1051,7 @@ void QGraphicsScenePrivate::grabKeyboard(QGraphicsItem *item) if (!keyboardGrabberItems.isEmpty()) { // Just send ungrab event to current grabber. QEvent ungrabEvent(QEvent::UngrabKeyboard); - sendEvent(keyboardGrabberItems.last(), &ungrabEvent); + sendEvent(keyboardGrabberItems.constLast(), &ungrabEvent); } keyboardGrabberItems << item; @@ -1071,7 +1071,7 @@ void QGraphicsScenePrivate::ungrabKeyboard(QGraphicsItem *item, bool itemIsDying qWarning("QGraphicsItem::ungrabKeyboard: not a keyboard grabber"); return; } - if (item != keyboardGrabberItems.last()) { + if (item != keyboardGrabberItems.constLast()) { // Recursively ungrab the topmost keyboard grabber until we reach this // item to ensure state consistency. ungrabKeyboard(keyboardGrabberItems.at(index + 1), itemIsDying); @@ -1088,7 +1088,7 @@ void QGraphicsScenePrivate::ungrabKeyboard(QGraphicsItem *item, bool itemIsDying // Send notification about mouse regrab. if (!itemIsDying && !keyboardGrabberItems.isEmpty()) { - QGraphicsItem *last = keyboardGrabberItems.last(); + QGraphicsItem *last = keyboardGrabberItems.constLast(); QEvent event(QEvent::GrabKeyboard); sendEvent(last, &event); } @@ -1100,7 +1100,7 @@ void QGraphicsScenePrivate::ungrabKeyboard(QGraphicsItem *item, bool itemIsDying void QGraphicsScenePrivate::clearKeyboardGrabber() { if (!keyboardGrabberItems.isEmpty()) - ungrabKeyboard(keyboardGrabberItems.first()); + ungrabKeyboard(keyboardGrabberItems.constFirst()); } void QGraphicsScenePrivate::enableMouseTrackingOnViews() @@ -1142,8 +1142,8 @@ void QGraphicsScenePrivate::storeMouseButtonsForMouseGrabber(QGraphicsSceneMouse for (int i = 0x1; i <= 0x10; i <<= 1) { if (event->buttons() & i) { mouseGrabberButtonDownPos.insert(Qt::MouseButton(i), - mouseGrabberItems.last()->d_ptr->genericMapFromScene(event->scenePos(), - event->widget())); + mouseGrabberItems.constLast()->d_ptr->genericMapFromScene(event->scenePos(), + event->widget())); mouseGrabberButtonDownScenePos.insert(Qt::MouseButton(i), event->scenePos()); mouseGrabberButtonDownScreenPos.insert(Qt::MouseButton(i), event->screenPos()); } @@ -1308,7 +1308,7 @@ void QGraphicsScenePrivate::sendMouseEvent(QGraphicsSceneMouseEvent *mouseEvent) return; } - QGraphicsItem *item = mouseGrabberItems.last(); + QGraphicsItem *item = mouseGrabberItems.constLast(); if (item->isBlockedByModalPanel()) return; @@ -1335,7 +1335,7 @@ void QGraphicsScenePrivate::mousePressEventHandler(QGraphicsSceneMouseEvent *mou // Deliver to any existing mouse grabber. if (!mouseGrabberItems.isEmpty()) { - if (mouseGrabberItems.last()->isBlockedByModalPanel()) + if (mouseGrabberItems.constLast()->isBlockedByModalPanel()) return; // The event is ignored by default, but we disregard the event's // accepted state after delivery; the mouse is grabbed, after all. @@ -1401,7 +1401,7 @@ void QGraphicsScenePrivate::mousePressEventHandler(QGraphicsSceneMouseEvent *mou // Any item will do. if (sceneModality && cachedItemsUnderMouse.isEmpty()) - cachedItemsUnderMouse << modalPanels.first(); + cachedItemsUnderMouse << modalPanels.constFirst(); // Find a mouse grabber by sending mouse press events to all mouse grabber // candidates one at a time, until the event is accepted. It's accepted by @@ -1450,7 +1450,7 @@ void QGraphicsScenePrivate::mousePressEventHandler(QGraphicsSceneMouseEvent *mou sendMouseEvent(mouseEvent); } - bool dontSendUngrabEvents = mouseGrabberItems.isEmpty() || mouseGrabberItems.last() != item; + bool dontSendUngrabEvents = mouseGrabberItems.isEmpty() || mouseGrabberItems.constLast() != item; if (disabled) { ungrabMouse(item, /* itemIsDying = */ dontSendUngrabEvents); break; @@ -2167,8 +2167,8 @@ QList QGraphicsScene::collidingItems(const QGraphicsItem *item, */ QGraphicsItem *QGraphicsScene::itemAt(const QPointF &position, const QTransform &deviceTransform) const { - QList itemsAtPoint = items(position, Qt::IntersectsItemShape, - Qt::DescendingOrder, deviceTransform); + const QList itemsAtPoint = items(position, Qt::IntersectsItemShape, + Qt::DescendingOrder, deviceTransform); return itemsAtPoint.isEmpty() ? 0 : itemsAtPoint.first(); } @@ -3771,7 +3771,7 @@ void QGraphicsScene::focusOutEvent(QFocusEvent *focusEvent) // Remove all popups when the scene loses focus. if (!d->popupWidgets.isEmpty()) - d->removePopup(d->popupWidgets.first()); + d->removePopup(d->popupWidgets.constFirst()); } /*! @@ -3868,7 +3868,7 @@ bool QGraphicsScenePrivate::dispatchHoverEvent(QGraphicsSceneHoverEvent *hoverEv // Find the common ancestor item for the new topmost hoverItem and the // last item in the hoverItem list. - QGraphicsItem *commonAncestorItem = (item && !hoverItems.isEmpty()) ? item->commonAncestorItem(hoverItems.last()) : 0; + QGraphicsItem *commonAncestorItem = (item && !hoverItems.isEmpty()) ? item->commonAncestorItem(hoverItems.constLast()) : 0; while (commonAncestorItem && !itemAcceptsHoverEvents_helper(commonAncestorItem)) commonAncestorItem = commonAncestorItem->parentItem(); if (commonAncestorItem && commonAncestorItem->panel() != item->panel()) { @@ -3909,7 +3909,7 @@ bool QGraphicsScenePrivate::dispatchHoverEvent(QGraphicsSceneHoverEvent *hoverEv // Generate a move event for the item itself if (item && !hoverItems.isEmpty() - && item == hoverItems.last()) { + && item == hoverItems.constLast()) { sendHoverEvent(QEvent::GraphicsSceneHoverMove, item, hoverEvent); return true; } @@ -3959,7 +3959,7 @@ void QGraphicsScene::keyPressEvent(QKeyEvent *keyEvent) // ### Merge this function with keyReleaseEvent; they are identical // ### (except this comment). Q_D(QGraphicsScene); - QGraphicsItem *item = !d->keyboardGrabberItems.isEmpty() ? d->keyboardGrabberItems.last() : 0; + QGraphicsItem *item = !d->keyboardGrabberItems.isEmpty() ? d->keyboardGrabberItems.constLast() : 0; if (!item) item = focusItem(); if (item) { @@ -3991,7 +3991,7 @@ void QGraphicsScene::keyReleaseEvent(QKeyEvent *keyEvent) // ### Merge this function with keyPressEvent; they are identical (except // ### this comment). Q_D(QGraphicsScene); - QGraphicsItem *item = !d->keyboardGrabberItems.isEmpty() ? d->keyboardGrabberItems.last() : 0; + QGraphicsItem *item = !d->keyboardGrabberItems.isEmpty() ? d->keyboardGrabberItems.constLast() : 0; if (!item) item = focusItem(); if (item) { @@ -4100,9 +4100,9 @@ void QGraphicsScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent) // Reset the mouse grabber when the last mouse button has been released. if (!mouseEvent->buttons()) { if (!d->mouseGrabberItems.isEmpty()) { - d->lastMouseGrabberItem = d->mouseGrabberItems.last(); + d->lastMouseGrabberItem = d->mouseGrabberItems.constLast(); if (d->lastMouseGrabberItemHasImplicitMouseGrab) - d->mouseGrabberItems.last()->ungrabMouse(); + d->mouseGrabberItems.constLast()->ungrabMouse(); } else { d->lastMouseGrabberItem = 0; } @@ -5901,7 +5901,7 @@ void QGraphicsScenePrivate::touchEventHandler(QTouchEvent *sceneTouchEvent) cachedItemsUnderMouse = itemsAtPosition(touchPoint.screenPos().toPoint(), touchPoint.scenePos(), static_cast(sceneTouchEvent->target())); - item = cachedItemsUnderMouse.isEmpty() ? 0 : cachedItemsUnderMouse.first(); + item = cachedItemsUnderMouse.isEmpty() ? 0 : cachedItemsUnderMouse.constFirst(); } if (sceneTouchEvent->device()->type() == QTouchDevice::TouchScreen) { @@ -6012,7 +6012,7 @@ bool QGraphicsScenePrivate::sendTouchBeginEvent(QGraphicsItem *origin, QTouchEve { Q_Q(QGraphicsScene); - if (cachedItemsUnderMouse.isEmpty() || cachedItemsUnderMouse.first() != origin) { + if (cachedItemsUnderMouse.isEmpty() || cachedItemsUnderMouse.constFirst() != origin) { const QTouchEvent::TouchPoint &firstTouchPoint = touchEvent->touchPoints().first(); cachedItemsUnderMouse = itemsAtPosition(firstTouchPoint.screenPos().toPoint(), firstTouchPoint.scenePos(), @@ -6128,7 +6128,7 @@ void QGraphicsScenePrivate::enterModal(QGraphicsItem *panel, QGraphicsItem::Pane } if (!mouseGrabberItems.isEmpty() && lastMouseGrabberItemHasImplicitMouseGrab) { - QGraphicsItem *item = mouseGrabberItems.last(); + QGraphicsItem *item = mouseGrabberItems.constLast(); if (item->isBlockedByModalPanel()) ungrabMouse(item, /*itemIsDying =*/ false); } diff --git a/src/widgets/graphicsview/qgraphicsview.cpp b/src/widgets/graphicsview/qgraphicsview.cpp index fc5dbdd80a..442918169a 100644 --- a/src/widgets/graphicsview/qgraphicsview.cpp +++ b/src/widgets/graphicsview/qgraphicsview.cpp @@ -2378,7 +2378,7 @@ QGraphicsItem *QGraphicsView::itemAt(const QPoint &pos) const Q_D(const QGraphicsView); if (!d->scene) return 0; - QList itemsAtPos = items(pos); + const QList itemsAtPos = items(pos); return itemsAtPos.isEmpty() ? 0 : itemsAtPos.first(); } @@ -2865,7 +2865,7 @@ bool QGraphicsView::viewportEvent(QEvent *event) // the mouse grab. // Remove all popups when the scene loses focus. if (!d->scene->d_func()->popupWidgets.isEmpty()) - d->scene->d_func()->removePopup(d->scene->d_func()->popupWidgets.first()); + d->scene->d_func()->removePopup(d->scene->d_func()->popupWidgets.constFirst()); QApplication::sendEvent(d->scene, event); break; case QEvent::Show: @@ -2889,7 +2889,7 @@ bool QGraphicsView::viewportEvent(QEvent *event) || (QApplication::activeModalWidget() && QApplication::activeModalWidget() != window()) || (QApplication::activeWindow() != window())) { if (!d->scene->d_func()->popupWidgets.isEmpty()) - d->scene->d_func()->removePopup(d->scene->d_func()->popupWidgets.first()); + d->scene->d_func()->removePopup(d->scene->d_func()->popupWidgets.constFirst()); } d->useLastMouseEvent = false; // a hack to pass a viewport pointer to the scene inside the leave event diff --git a/src/widgets/itemviews/qcolumnview.cpp b/src/widgets/itemviews/qcolumnview.cpp index 26173b5e92..6c7c914bc0 100644 --- a/src/widgets/itemviews/qcolumnview.cpp +++ b/src/widgets/itemviews/qcolumnview.cpp @@ -412,9 +412,9 @@ void QColumnViewPrivate::updateScrollbars() // find the total horizontal length of the laid out columns int horizontalLength = 0; if (!columns.isEmpty()) { - horizontalLength = (columns.last()->x() + columns.last()->width()) - columns.first()->x(); + horizontalLength = (columns.constLast()->x() + columns.constLast()->width()) - columns.constFirst()->x(); if (horizontalLength <= 0) // reverse mode - horizontalLength = (columns.first()->x() + columns.first()->width()) - columns.last()->x(); + horizontalLength = (columns.constFirst()->x() + columns.constFirst()->width()) - columns.constLast()->x(); } QSize viewportSize = viewport->size(); @@ -629,7 +629,7 @@ void QColumnViewPrivate::closeColumns(const QModelIndex &parent, bool build) while (!dirsToAppend.isEmpty()) { QAbstractItemView *newView = createColumn(dirsToAppend.takeLast(), true); if (!dirsToAppend.isEmpty()) - newView->setCurrentIndex(dirsToAppend.last()); + newView->setCurrentIndex(dirsToAppend.constLast()); } if (build && !alreadyExists) @@ -713,8 +713,8 @@ QAbstractItemView *QColumnViewPrivate::createColumn(const QModelIndex &index, bo columnSizes.resize(qMax(columnSizes.count(), columns.count() + 1)); columnSizes[columns.count()] = initialWidth; } - if (!columns.isEmpty() && columns.last()->isHidden()) - columns.last()->setVisible(true); + if (!columns.isEmpty() && columns.constLast()->isHidden()) + columns.constLast()->setVisible(true); columns.append(view); doLayout(); @@ -835,7 +835,7 @@ void QColumnViewPrivate::setPreviewWidget(QWidget *widget) { Q_Q(QColumnView); if (previewColumn) { - if (!columns.isEmpty() && columns.last() == previewColumn) + if (!columns.isEmpty() && columns.constLast() == previewColumn) columns.removeLast(); previewColumn->deleteLater(); } @@ -1003,11 +1003,11 @@ void QColumnViewPrivate::_q_changeCurrentColumn() parentColumn->setCurrentIndex(current.parent()); } - if (columns.last()->isHidden()) { - columns.last()->setVisible(true); + if (columns.constLast()->isHidden()) { + columns.constLast()->setVisible(true); } - if (columns.last()->selectionModel()) - columns.last()->selectionModel()->clear(); + if (columns.constLast()->selectionModel()) + columns.constLast()->selectionModel()->clear(); updateScrollbars(); } diff --git a/src/widgets/itemviews/qdirmodel.cpp b/src/widgets/itemviews/qdirmodel.cpp index dfb1d7619e..58e586980f 100644 --- a/src/widgets/itemviews/qdirmodel.cpp +++ b/src/widgets/itemviews/qdirmodel.cpp @@ -885,7 +885,7 @@ QModelIndex QDirModel::index(const QString &path, int column) const #if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) if (absolutePath.startsWith(QLatin1String("//"))) { // UNC path - QString host = pathElements.first(); + QString host = pathElements.constFirst(); int r = 0; for (; r < d->root.children.count(); ++r) if (d->root.children.at(r).info.fileName() == host) diff --git a/src/widgets/itemviews/qlistview.cpp b/src/widgets/itemviews/qlistview.cpp index 3303aac6ed..0788e0287a 100644 --- a/src/widgets/itemviews/qlistview.cpp +++ b/src/widgets/itemviews/qlistview.cpp @@ -2396,9 +2396,9 @@ QPoint QListModeViewBase::initStaticLayout(const QListViewLayoutInfo &info) } else if (info.wrap) { if (info.flow == QListView::LeftToRight) { x = batchSavedPosition; - y = segmentPositions.last(); + y = segmentPositions.constLast(); } else { // flow == QListView::TopToBottom - x = segmentPositions.last(); + x = segmentPositions.constLast(); y = batchSavedPosition; } } else { // not first and not wrap @@ -2613,7 +2613,7 @@ int QListModeViewBase::perItemScrollingPageSteps(int length, int bounds, bool wr int steps = positions.count() - 1; int max = qMax(length, bounds); int min = qMin(length, bounds); - int pos = min - (max - positions.last()); + int pos = min - (max - positions.constLast()); while (pos >= 0 && steps > 0) { pos -= (positions.at(steps) - positions.at(steps - 1)); diff --git a/src/widgets/itemviews/qtreeview.cpp b/src/widgets/itemviews/qtreeview.cpp index b6fd9f8ba8..4ce7da0229 100644 --- a/src/widgets/itemviews/qtreeview.cpp +++ b/src/widgets/itemviews/qtreeview.cpp @@ -2357,10 +2357,10 @@ void QTreeView::setSelection(const QRect &rect, QItemSelectionModel::SelectionFl return; } if (!topLeft.isValid() && !d->viewItems.isEmpty()) - topLeft = d->viewItems.first().index; + topLeft = d->viewItems.constFirst().index; if (!bottomRight.isValid() && !d->viewItems.isEmpty()) { const int column = d->header->logicalIndex(d->header->count() - 1); - const QModelIndex index = d->viewItems.last().index; + const QModelIndex index = d->viewItems.constLast().index; bottomRight = index.sibling(index.row(), column); } @@ -2668,9 +2668,9 @@ void QTreeView::selectAll() SelectionMode mode = d->selectionMode; d->executePostedLayout(); //make sure we lay out the items if (mode != SingleSelection && mode != NoSelection && !d->viewItems.isEmpty()) { - const QModelIndex &idx = d->viewItems.last().index; + const QModelIndex &idx = d->viewItems.constLast().index; QModelIndex lastItemIndex = idx.sibling(idx.row(), d->model->columnCount(idx.parent()) - 1); - d->select(d->viewItems.first().index, lastItemIndex, + d->select(d->viewItems.constFirst().index, lastItemIndex, QItemSelectionModel::ClearAndSelect |QItemSelectionModel::Rows); } diff --git a/src/widgets/widgets/qdockarealayout.cpp b/src/widgets/widgets/qdockarealayout.cpp index ed630913e7..fd155bf156 100644 --- a/src/widgets/widgets/qdockarealayout.cpp +++ b/src/widgets/widgets/qdockarealayout.cpp @@ -3163,7 +3163,7 @@ void QDockAreaLayout::splitDockWidget(QDockWidget *after, QDockWidget *dockWidget, Qt::Orientation orientation) { - QList path = indexOf(after); + const QList path = indexOf(after); if (path.isEmpty()) return; diff --git a/src/widgets/widgets/qfontcombobox.cpp b/src/widgets/widgets/qfontcombobox.cpp index 1d736c8e96..9bd33409ae 100644 --- a/src/widgets/widgets/qfontcombobox.cpp +++ b/src/widgets/widgets/qfontcombobox.cpp @@ -162,7 +162,7 @@ static QFontDatabase::WritingSystem writingSystemForFont(const QFont &font, bool return QFontDatabase::TraditionalChinese; } - system = writingSystems.last(); + system = writingSystems.constLast(); if (!*hasLatin) { // we need to show something -- cgit v1.2.3 From 4927fdb389b9fbc0d5118437274d4fa3c59fc839 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Tue, 5 Jul 2016 15:13:44 +0200 Subject: Fix misleading code in QAbstractSpinBox::event() A static_cast never returns nullptr unless its argument already was nullptr. But we dereferenced 'event' already by the time we reach this code, so the if is always true. Fix by removing the temporary variable. Change-Id: Ia869d37eda74f0bcdd616e1f57f429cc86e9e525 Reviewed-by: Friedemann Kleint --- src/widgets/widgets/qabstractspinbox.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/widgets/qabstractspinbox.cpp b/src/widgets/widgets/qabstractspinbox.cpp index ba4bbe40a8..854befd265 100644 --- a/src/widgets/widgets/qabstractspinbox.cpp +++ b/src/widgets/widgets/qabstractspinbox.cpp @@ -751,8 +751,7 @@ bool QAbstractSpinBox::event(QEvent *event) case QEvent::HoverEnter: case QEvent::HoverLeave: case QEvent::HoverMove: - if (const QHoverEvent *he = static_cast(event)) - d->updateHoverControl(he->pos()); + d->updateHoverControl(static_cast(event)->pos()); break; case QEvent::ShortcutOverride: if (d->edit->event(event)) -- cgit v1.2.3 From 631b143b3f6650b5761ac2c78e7936e1594b6e4f Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Fri, 1 Jul 2016 17:28:37 +0200 Subject: QComboBox: fix crash on setEditable(false) called from editTextChanged() QLineEdit::setText() emits QLineEdit::textChanged(), which is connected to QComboBox::editTextChanged(). When a user slot connected to editTextChanged() sets QComboBox::editable to false, the line edit will be deleted in setEditable() and when control returns to QComboBoxPrivate::setCurrentIndex(), the formerly non-null 'lineEdit' has changed to nullptr, leading to a nullptr dereference when attempting to set the completionPrefix on lineEdit->completer(). Fix by re-checking 'lineEdit' after returning from the QLineEdit::setText() call. Add a test. Task-number: QTBUG-54191 Change-Id: I94154796cfde73fb490f8471c48b9d6f62825a92 Reviewed-by: Friedemann Kleint --- src/widgets/widgets/qcombobox.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/widgets/qcombobox.cpp b/src/widgets/widgets/qcombobox.cpp index 2abcd4d3c2..181671c493 100644 --- a/src/widgets/widgets/qcombobox.cpp +++ b/src/widgets/widgets/qcombobox.cpp @@ -2100,9 +2100,9 @@ void QComboBoxPrivate::setCurrentIndex(const QModelIndex &mi) if (lineEdit) { const QString newText = itemText(normalized); if (lineEdit->text() != newText) { - lineEdit->setText(newText); + lineEdit->setText(newText); // may cause lineEdit -> nullptr (QTBUG-54191) #ifndef QT_NO_COMPLETER - if (lineEdit->completer()) + if (lineEdit && lineEdit->completer()) lineEdit->completer()->setCompletionPrefix(newText); #endif } -- cgit v1.2.3 From 802c31bdbd4cd8d9a94bbd02ad1955d648682be7 Mon Sep 17 00:00:00 2001 From: Anton Kudryavtsev Date: Tue, 5 Jul 2016 12:36:58 +0300 Subject: QDateTimeEdit: de-duplicate calls and cache results Change-Id: I32162846f5f412c7563e66015ea371f9a1af7748 Reviewed-by: Edward Welbourne --- src/widgets/widgets/qdatetimeedit.cpp | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/widgets/qdatetimeedit.cpp b/src/widgets/widgets/qdatetimeedit.cpp index 795f2cedd9..b168c98410 100644 --- a/src/widgets/widgets/qdatetimeedit.cpp +++ b/src/widgets/widgets/qdatetimeedit.cpp @@ -248,9 +248,10 @@ void QDateTimeEdit::setDateTime(const QDateTime &datetime) Q_D(QDateTimeEdit); if (datetime.isValid()) { d->clearCache(); + const QDate date = datetime.date(); if (!(d->sections & DateSections_Mask)) - setDateRange(datetime.date(), datetime.date()); - d->setValue(QDateTime(datetime.date(), datetime.time(), d->spec), EmitIfChanged); + setDateRange(date, date); + d->setValue(QDateTime(date, datetime.time(), d->spec), EmitIfChanged); } } @@ -1770,15 +1771,18 @@ void QDateTimeEditPrivate::setSelected(int sectionIndex, bool forward) int QDateTimeEditPrivate::sectionAt(int pos) const { - if (pos < separators.first().size()) { + if (pos < separators.first().size()) return (pos == 0 ? FirstSectionIndex : NoSectionIndex); - } else if (displayText().size() - pos < separators.last().size() + 1) { + + const QString text = displayText(); + const int textSize = text.size(); + if (textSize - pos < separators.last().size() + 1) { if (separators.last().size() == 0) { return sectionNodes.count() - 1; } - return (pos == displayText().size() ? LastSectionIndex : NoSectionIndex); + return (pos == textSize ? LastSectionIndex : NoSectionIndex); } - updateCache(value, displayText()); + updateCache(value, text); for (int i=0; i= 0); - if (pos < separators.first().size()) { + if (pos < separators.first().size()) return forward ? 0 : FirstSectionIndex; - } else if (displayText().size() - pos < separators.last().size() + 1) { + + const QString text = displayText(); + if (text.size() - pos < separators.last().size() + 1) return forward ? LastSectionIndex : sectionNodes.size() - 1; - } - updateCache(value, displayText()); + + updateCache(value, text); for (int i=0; i Date: Wed, 6 Jul 2016 11:32:54 +0300 Subject: Use QStringLiteral more judiciously Replace it with QL1S in QStringBuilder expressions and in overloaded functions. Replace patterns 'QString::number() + QStringLiteral' and 'QStringLiteral + QString::number()' with QString::asprintf. Saves some text size. Change-Id: Ib39b2332264dfc3df04e77f2c101b47a1030cef4 Reviewed-by: Edward Welbourne Reviewed-by: Thiago Macieira --- src/widgets/accessible/qaccessiblewidgets.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/accessible/qaccessiblewidgets.cpp b/src/widgets/accessible/qaccessiblewidgets.cpp index 2f57fa08ee..95888924fb 100644 --- a/src/widgets/accessible/qaccessiblewidgets.cpp +++ b/src/widgets/accessible/qaccessiblewidgets.cpp @@ -824,12 +824,12 @@ QString QAccessibleTextWidget::attributes(int offset, int *startOffset, int *end AttributeFormatter attrs; QString family = charFormatFont.family(); if (!family.isEmpty()) { - family = family.replace('\\',QStringLiteral("\\\\")); - family = family.replace(':',QStringLiteral("\\:")); - family = family.replace(',',QStringLiteral("\\,")); - family = family.replace('=',QStringLiteral("\\=")); - family = family.replace(';',QStringLiteral("\\;")); - family = family.replace('\"',QStringLiteral("\\\"")); + family = family.replace('\\', QLatin1String("\\\\")); + family = family.replace(':', QLatin1String("\\:")); + family = family.replace(',', QLatin1String("\\,")); + family = family.replace('=', QLatin1String("\\=")); + family = family.replace(';', QLatin1String("\\;")); + family = family.replace('\"', QLatin1String("\\\"")); attrs["font-family"] = QString::fromLatin1("\"%1\"").arg(family); } -- cgit v1.2.3 From a0bb2fc4061a91edab8222158fd88454f40dab27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9rgio=20Martins?= Date: Fri, 24 Jun 2016 10:01:01 +0100 Subject: Fix typo in QStyle documentation Change-Id: Id1f65dcc473effbdd0ccd7362b2986382c827ed8 Reviewed-by: Martin Smith --- src/widgets/styles/qstyle.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/widgets') diff --git a/src/widgets/styles/qstyle.cpp b/src/widgets/styles/qstyle.cpp index 97ed8eec3d..6a03d73c72 100644 --- a/src/widgets/styles/qstyle.cpp +++ b/src/widgets/styles/qstyle.cpp @@ -725,7 +725,7 @@ void QStyle::drawItemPixmap(QPainter *painter, const QRect &rect, int alignment, \value State_None Indicates that the widget does not have a state. \value State_Active Indicates that the widget is active. - \value State_AutoRaise Used to indicate if auto-raise appearance should be usd on a tool button. + \value State_AutoRaise Used to indicate if auto-raise appearance should be used on a tool button. \value State_Children Used to indicate if an item view branch has children. \value State_DownArrow Used to indicate if a down arrow should be visible on the widget. \value State_Editing Used to indicate if an editor is opened on the widget. -- cgit v1.2.3 From 7cfdbe510259d186707cce900170f844b6cfd2f4 Mon Sep 17 00:00:00 2001 From: Nico Vertriest Date: Mon, 11 Jul 2016 13:54:26 +0200 Subject: Doc: corrected link to Qt Widgets Examples qwidget.cpp:498: warning: Can't link to 'Qt Examples' Change-Id: I5eed4ac4fd5514a1e1ff7130997df8449d5c5e7f Reviewed-by: Martin Smith --- src/widgets/kernel/qwidget.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/widgets') diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp index a4830130f1..4d402ca1bd 100644 --- a/src/widgets/kernel/qwidget.cpp +++ b/src/widgets/kernel/qwidget.cpp @@ -565,7 +565,7 @@ void QWidget::setAutoFillBackground(bool enabled) Composite widgets can also be created by subclassing a standard widget, such as QWidget or QFrame, and adding the necessary layout and child - widgets in the constructor of the subclass. Many of the \l{Qt Examples} + widgets in the constructor of the subclass. Many of the \l{Qt Widgets Examples} {examples provided with Qt} use this approach, and it is also covered in the Qt \l{Tutorials}. -- cgit v1.2.3 From 9131f6e56139924162778c6c0538dda58d839bbb Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Tue, 12 Jul 2016 16:02:53 +0200 Subject: QCompleter::setModel(): Restore completion role When setting a QFileSystemModel as model, the completion role is set to QFileSystemModel::FileNameRole. This needs to be reset to the default Qt::EditRole when setting another model. Task-number: QTBUG-54642 Change-Id: Ie78d5d417e008ad05a2f995bdbc218b3ad1bc49c Reviewed-by: Andy Shaw --- src/widgets/util/qcompleter.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src/widgets') diff --git a/src/widgets/util/qcompleter.cpp b/src/widgets/util/qcompleter.cpp index 55bb51d0a3..a036071893 100644 --- a/src/widgets/util/qcompleter.cpp +++ b/src/widgets/util/qcompleter.cpp @@ -1038,6 +1038,10 @@ void QCompleter::setModel(QAbstractItemModel *model) { Q_D(QCompleter); QAbstractItemModel *oldModel = d->proxy->sourceModel(); +#ifndef QT_NO_FILESYSTEMMODEL + if (qobject_cast(oldModel)) + setCompletionRole(Qt::EditRole); // QTBUG-54642, clear FileNameRole set by QFileSystemModel +#endif d->proxy->setSourceModel(model); if (d->popup) setPopup(d->popup); // set the model and make new connections -- cgit v1.2.3 From d7cb2fd44b7801799401dca343014bbf53ad130c Mon Sep 17 00:00:00 2001 From: Timur Pocheptsov Date: Fri, 8 Jul 2016 14:10:34 +0200 Subject: QMacStyle::styleHint - test pixmap sizes styleHint for SH_FocusFrame_Mask calls drawControl with a painter created for pixmap. We only test pixmapSize.isValid(), but the size (0,0) is also 'isValid', and we end up with a QPainter with an invalid paintEngine (null) crashing in drawControl. Task-number: QTBUG-54630 Change-Id: I84d1785f04ffb3e608812076a6d1bc36ffb92adc Reviewed-by: Gabriel de Dietrich --- src/widgets/styles/qmacstyle_mac.mm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/widgets') diff --git a/src/widgets/styles/qmacstyle_mac.mm b/src/widgets/styles/qmacstyle_mac.mm index 18ba2f45f5..3352c5d589 100644 --- a/src/widgets/styles/qmacstyle_mac.mm +++ b/src/widgets/styles/qmacstyle_mac.mm @@ -2961,7 +2961,7 @@ int QMacStyle::styleHint(StyleHint sh, const QStyleOption *opt, const QWidget *w QImage img; QSize pixmapSize = opt->rect.size(); - if (pixmapSize.isValid()) { + if (!pixmapSize.isEmpty()) { QPixmap pix(pixmapSize); pix.fill(QColor(fillR, fillG, fillB)); QPainter pix_paint(&pix); -- cgit v1.2.3 From e46e112eb10850801218bd810ecaeb8fd29f4c34 Mon Sep 17 00:00:00 2001 From: Anton Kudryavtsev Date: Fri, 8 Jul 2016 13:51:06 +0300 Subject: Optimize string usage Use QStringBuilder more. Use QL1S directly, without QString construction. Change-Id: Iad844391367681fc1013b9725403d009e7c346e6 Reviewed-by: Edward Welbourne --- src/widgets/widgets/qspinbox.cpp | 5 ++--- src/widgets/widgets/qwidgettextcontrol.cpp | 4 ++-- 2 files changed, 4 insertions(+), 5 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/widgets/qspinbox.cpp b/src/widgets/widgets/qspinbox.cpp index a5c096c3a8..0daa624ae8 100644 --- a/src/widgets/widgets/qspinbox.cpp +++ b/src/widgets/widgets/qspinbox.cpp @@ -479,9 +479,8 @@ QString QSpinBox::textFromValue(int value) const QString str; if (d->displayIntegerBase != 10) { - str = QString::number(qAbs(value), d->displayIntegerBase); - if (value < 0) - str.prepend('-'); + const QLatin1String prefix = value < 0 ? QLatin1String("-") : QLatin1String(); + str = prefix + QString::number(qAbs(value), d->displayIntegerBase); } else { str = locale().toString(value); if (!d->showGroupSeparator && (qAbs(value) >= 1000 || value == INT_MIN)) { diff --git a/src/widgets/widgets/qwidgettextcontrol.cpp b/src/widgets/widgets/qwidgettextcontrol.cpp index 77b5a4830b..d5ecb150a8 100644 --- a/src/widgets/widgets/qwidgettextcontrol.cpp +++ b/src/widgets/widgets/qwidgettextcontrol.cpp @@ -2641,8 +2641,8 @@ void QWidgetTextControl::insertFromMimeData(const QMimeData *source) #ifndef QT_NO_TEXTHTMLPARSER if (source->hasFormat(QLatin1String("application/x-qrichtext")) && d->acceptRichText) { // x-qrichtext is always UTF-8 (taken from Qt3 since we don't use it anymore). - QString richtext = QString::fromUtf8(source->data(QLatin1String("application/x-qrichtext"))); - richtext.prepend(QLatin1String("")); + const QString richtext = QLatin1String("") + + QString::fromUtf8(source->data(QLatin1String("application/x-qrichtext"))); fragment = QTextDocumentFragment::fromHtml(richtext, d->doc); hasData = true; } else if (source->hasHtml() && d->acceptRichText) { -- cgit v1.2.3 From 89765ced6e9ce7e20aa1090439869509f86a070a Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Thu, 14 Jul 2016 16:19:42 +0200 Subject: Windows: Add a workaround for render-to-texture widgets for translucent windows Do not attempt to switch from translucent GL windows (emulated by DWM blur behind) to translucent raster windows (using layered windows) as this produces warnings from UpdateLayeredWindowIndirect() failing. Task-number: QTBUG-54734 Change-Id: Ie05126c5cb091a00f17b88a74b287c90aa2dfebd Reviewed-by: Joni Poikelin Reviewed-by: Laszlo Agocs --- src/widgets/kernel/qwidgetbackingstore.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src/widgets') diff --git a/src/widgets/kernel/qwidgetbackingstore.cpp b/src/widgets/kernel/qwidgetbackingstore.cpp index 7473dd1dfb..3f62e7913f 100644 --- a/src/widgets/kernel/qwidgetbackingstore.cpp +++ b/src/widgets/kernel/qwidgetbackingstore.cpp @@ -1018,9 +1018,11 @@ static QPlatformTextureList *widgetTexturesFor(QWidget *tlw, QWidget *widget) // The Windows compositor handles fullscreen OpenGL window specially. Besides // having trouble with popups, it also has issues with flip-flopping between // OpenGL-based and normal flushing. Therefore, stick with GL for fullscreen -// windows. (QTBUG-53515) +// windows (QTBUG-53515). Similary, translucent windows should not switch to +// layered native windows (QTBUG-54734). #if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) && !defined(Q_OS_WINCE) || tlw->windowState().testFlag(Qt::WindowFullScreen) + || tlw->testAttribute(Qt::WA_TranslucentBackground) #endif ) { -- cgit v1.2.3