diff options
author | Frederik Gladhorn <frederik.gladhorn@digia.com> | 2013-08-19 09:47:35 +0200 |
---|---|---|
committer | Frederik Gladhorn <frederik.gladhorn@digia.com> | 2013-08-19 09:47:35 +0200 |
commit | d2628d9d7015e4b75007471d150acedecaa0c6c1 (patch) | |
tree | 00ab012c7ae190d5a64788ee945ca006e3759e41 /src | |
parent | b6a6a6387e279c431d520243345530fa19bd96c5 (diff) | |
parent | 566afc2d2e4156712ffec081715f12307cf46628 (diff) |
Merge remote-tracking branch 'origin/stable' into dev
Conflicts:
tests/auto/quick/qquickgridview/qquickgridview.pro
tests/auto/quick/qquickitem/qquickitem.pro
Change-Id: Ic54cafbdda1ac22757d2ee65dcc63a1b167c7556
Diffstat (limited to 'src')
-rw-r--r-- | src/imports/dialogs/qml/Button.qml | 6 | ||||
-rw-r--r-- | src/imports/dialogs/qquickabstractcolordialog.cpp | 5 | ||||
-rw-r--r-- | src/qml/qml/qqmllist.cpp | 5 | ||||
-rw-r--r-- | src/quick/items/context2d/qquickcanvasitem.cpp | 2 | ||||
-rw-r--r-- | src/quick/items/context2d/qquickcontext2dtexture.cpp | 2 | ||||
-rw-r--r-- | src/quick/items/qquickflickable.cpp | 6 | ||||
-rw-r--r-- | src/quick/items/qquickitem.cpp | 4 | ||||
-rw-r--r-- | src/quick/items/qquickitemview.cpp | 2 | ||||
-rw-r--r-- | src/quick/items/qquickwindow.cpp | 17 |
9 files changed, 33 insertions, 16 deletions
diff --git a/src/imports/dialogs/qml/Button.qml b/src/imports/dialogs/qml/Button.qml index 4a0ec12cd3..26cc23a5be 100644 --- a/src/imports/dialogs/qml/Button.qml +++ b/src/imports/dialogs/qml/Button.qml @@ -49,8 +49,8 @@ Item { signal clicked property alias containsMouse: mouseArea.containsMouse property alias pressed: mouseArea.pressed - implicitHeight: buttonLabel.implicitHeight * 1.2 - implicitWidth: Math.max(Screen.logicalPixelDensity * 10, buttonLabel.implicitWidth * 1.2) + implicitHeight: Math.max(Screen.logicalPixelDensity * 7, buttonLabel.implicitHeight * 1.2) + implicitWidth: Math.max(Screen.logicalPixelDensity * 11, buttonLabel.implicitWidth * 1.3) height: implicitHeight width: implicitWidth @@ -65,7 +65,7 @@ Item { GradientStop { position: 1.0; color: Qt.darker(palette.button, 1.3) } } antialiasing: true - radius: height / 4 + radius: height / 6 border.color: Qt.darker(palette.button, 1.5) border.width: 1 } diff --git a/src/imports/dialogs/qquickabstractcolordialog.cpp b/src/imports/dialogs/qquickabstractcolordialog.cpp index 7cfd7ea692..d565352af6 100644 --- a/src/imports/dialogs/qquickabstractcolordialog.cpp +++ b/src/imports/dialogs/qquickabstractcolordialog.cpp @@ -66,6 +66,8 @@ void QQuickAbstractColorDialog::setVisible(bool v) { if (helper() && v) { m_dlgHelper->setOptions(m_options); + // Due to the fact that QColorDialogOptions doesn't have currentColor... + m_dlgHelper->setCurrentColor(m_color); } QQuickAbstractDialog::setVisible(v); } @@ -100,6 +102,9 @@ void QQuickAbstractColorDialog::setTitle(const QString &t) void QQuickAbstractColorDialog::setColor(QColor arg) { + if (m_dlgHelper) + m_dlgHelper->setCurrentColor(arg); + // m_options->setCustomColor or setStandardColor don't make sense here if (m_color != arg) { m_color = arg; emit colorChanged(); diff --git a/src/qml/qml/qqmllist.cpp b/src/qml/qml/qqmllist.cpp index 91c9bc2416..d172c9a185 100644 --- a/src/qml/qml/qqmllist.cpp +++ b/src/qml/qml/qqmllist.cpp @@ -409,8 +409,9 @@ Construct a QQmlListProperty from a set of operation functions. An opaque \a da may be passed which can be accessed from within the operation functions. The list property remains valid while \a object exists. -You can pass a null pointer, but than the list will be not designable or changeable by the debugger. -So provide all function, except it is not possible. +Null pointers can be passed for any function. If any null pointers are passed in, the list +will be neither designable nor alterable by the debugger. It is recommended to provide valid +pointers for all functions. */ /*! diff --git a/src/quick/items/context2d/qquickcanvasitem.cpp b/src/quick/items/context2d/qquickcanvasitem.cpp index 55fb8b7fc5..c1df858310 100644 --- a/src/quick/items/context2d/qquickcanvasitem.cpp +++ b/src/quick/items/context2d/qquickcanvasitem.cpp @@ -601,7 +601,7 @@ void QQuickCanvasItem::geometryChanged(const QRectF &newGeometry, const QRectF & emit canvasWindowChanged(); } - if (d->available) + if (d->available && newSize != oldGeometry.size()) requestPaint(); } diff --git a/src/quick/items/context2d/qquickcontext2dtexture.cpp b/src/quick/items/context2d/qquickcontext2dtexture.cpp index 84ab5bb8fb..adba4b3059 100644 --- a/src/quick/items/context2d/qquickcontext2dtexture.cpp +++ b/src/quick/items/context2d/qquickcontext2dtexture.cpp @@ -585,8 +585,8 @@ QQuickCanvasItem::RenderTarget QQuickContext2DImageTexture::renderTarget() const void QQuickContext2DImageTexture::bind() { + imageTexture()->setFiltering(filtering()); imageTexture()->bind(); - updateBindOptions(); } bool QQuickContext2DImageTexture::updateTexture() diff --git a/src/quick/items/qquickflickable.cpp b/src/quick/items/qquickflickable.cpp index f77c427ccf..9a97b1efc2 100644 --- a/src/quick/items/qquickflickable.cpp +++ b/src/quick/items/qquickflickable.cpp @@ -983,6 +983,7 @@ void QQuickFlickablePrivate::handleMousePressEvent(QMouseEvent *event) q->setKeepMouseGrab(stealMouse); clearDelayedPress(); pressed = true; + if (hData.transitionToBounds) hData.transitionToBounds->stopTransition(); if (vData.transitionToBounds) @@ -2096,7 +2097,8 @@ bool QQuickFlickable::sendMouseEvent(QQuickItem *item, QMouseEvent *event) d->lastPosTime = -1; returnToBounds(); } - if (event->type() == QEvent::MouseButtonRelease) { + if (event->type() == QEvent::MouseButtonRelease || (grabber && grabber->keepMouseGrab() && !grabberDisabled)) { + // mouse released, or another item has claimed the grab d->lastPosTime = -1; d->clearDelayedPress(); d->stealMouse = false; @@ -2109,7 +2111,7 @@ bool QQuickFlickable::sendMouseEvent(QQuickItem *item, QMouseEvent *event) bool QQuickFlickable::childMouseEventFilter(QQuickItem *i, QEvent *e) { Q_D(QQuickFlickable); - if (!isVisible() || !isEnabled()) + if (!isVisible() || !isEnabled() || !isInteractive()) return QQuickItem::childMouseEventFilter(i, e); switch (e->type()) { case QEvent::MouseButtonPress: diff --git a/src/quick/items/qquickitem.cpp b/src/quick/items/qquickitem.cpp index ce23b99e8c..a7c7416b5f 100644 --- a/src/quick/items/qquickitem.cpp +++ b/src/quick/items/qquickitem.cpp @@ -2568,8 +2568,10 @@ void QQuickItemPrivate::derefWindow() if (c->mouseGrabberItem == q) c->mouseGrabberItem = 0; #ifndef QT_NO_CURSOR - if (c->cursorItem == q) + if (c->cursorItem == q) { c->cursorItem = 0; + window->unsetCursor(); + } #endif c->hoverItems.removeAll(q); if (itemNodeInstance) diff --git a/src/quick/items/qquickitemview.cpp b/src/quick/items/qquickitemview.cpp index f8f622a1b9..e19e780438 100644 --- a/src/quick/items/qquickitemview.cpp +++ b/src/quick/items/qquickitemview.cpp @@ -326,7 +326,7 @@ void QQuickItemView::setModel(const QVariant &model) d->updateSectionCriteria(); d->refill(); d->currentIndex = -1; - setCurrentIndex(0); + setCurrentIndex(d->model->count() > 0 ? 0 : -1); d->updateViewport(); if (d->transitioner && d->transitioner->populateTransition) { diff --git a/src/quick/items/qquickwindow.cpp b/src/quick/items/qquickwindow.cpp index c785405231..d209cb57c5 100644 --- a/src/quick/items/qquickwindow.cpp +++ b/src/quick/items/qquickwindow.cpp @@ -484,7 +484,7 @@ bool QQuickWindowPrivate::translateTouchToMouse(QQuickItem *item, QTouchEvent *e item->grabMouse(); item->grabTouchPoints(QVector<int>() << touchMouseId); - q->sendEvent(item, mousePress.data()); + QQuickItemPrivate::get(item)->deliverMouseEvent(mousePress.data()); event->setAccepted(mousePress->isAccepted()); if (!mousePress->isAccepted()) { touchMouseId = -1; @@ -497,7 +497,7 @@ bool QQuickWindowPrivate::translateTouchToMouse(QQuickItem *item, QTouchEvent *e if (mousePress->isAccepted() && checkIfDoubleClicked(event->timestamp())) { QScopedPointer<QMouseEvent> mouseDoubleClick(touchToMouseEvent(QEvent::MouseButtonDblClick, p, event, item)); - q->sendEvent(item, mouseDoubleClick.data()); + QQuickItemPrivate::get(item)->deliverMouseEvent(mouseDoubleClick.data()); event->setAccepted(mouseDoubleClick->isAccepted()); if (mouseDoubleClick->isAccepted()) { return true; @@ -518,7 +518,7 @@ bool QQuickWindowPrivate::translateTouchToMouse(QQuickItem *item, QTouchEvent *e if (p.state() & Qt::TouchPointMoved) { if (mouseGrabberItem) { QScopedPointer<QMouseEvent> me(touchToMouseEvent(QEvent::MouseMove, p, event, mouseGrabberItem)); - q->sendEvent(mouseGrabberItem, me.data()); + QQuickItemPrivate::get(item)->deliverMouseEvent(me.data()); event->setAccepted(me->isAccepted()); if (me->isAccepted()) { itemForTouchPointId[p.id()] = mouseGrabberItem; // N.B. the mouseGrabberItem may be different after returning from sendEvent() @@ -548,7 +548,7 @@ bool QQuickWindowPrivate::translateTouchToMouse(QQuickItem *item, QTouchEvent *e touchMouseId = -1; if (mouseGrabberItem) { QScopedPointer<QMouseEvent> me(touchToMouseEvent(QEvent::MouseButtonRelease, p, event, mouseGrabberItem)); - q->sendEvent(mouseGrabberItem, me.data()); + QQuickItemPrivate::get(item)->deliverMouseEvent(me.data()); if (mouseGrabberItem) // might have ungrabbed due to event mouseGrabberItem->ungrabMouse(); return me->isAccepted(); @@ -1414,6 +1414,7 @@ void QQuickWindow::mouseMoveEvent(QMouseEvent *event) bool QQuickWindowPrivate::deliverHoverEvent(QQuickItem *item, const QPointF &scenePos, const QPointF &lastScenePos, Qt::KeyboardModifiers modifiers, bool &accepted) { + Q_Q(QQuickWindow); QQuickItemPrivate *itemPrivate = QQuickItemPrivate::get(item); if (itemPrivate->flags & QQuickItem::ItemClipsChildrenToShape) { @@ -1463,7 +1464,13 @@ bool QQuickWindowPrivate::deliverHoverEvent(QQuickItem *item, const QPointF &sce for (int i = startIdx; i >= 0; i--) { QQuickItem *itemToHover = itemsToHover[i]; - if (QQuickItemPrivate::get(itemToHover)->hoverEnabled) { + QQuickItemPrivate *itemToHoverPrivate = QQuickItemPrivate::get(itemToHover); + // The item may be about to be deleted or reparented to another window + // due to another hover event delivered in this function. If that is the + // case, sending a hover event here will cause a crash or other bad + // behavior when the leave event is generated. Checking + // itemToHoverPrivate->window here prevents that case. + if (itemToHoverPrivate->window == q && itemToHoverPrivate->hoverEnabled) { hoverItems.prepend(itemToHover); sendHoverEvent(QEvent::HoverEnter, itemToHover, scenePos, lastScenePos, modifiers, accepted); } |