aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorFrederik Gladhorn <frederik.gladhorn@digia.com>2013-08-19 09:47:35 +0200
committerFrederik Gladhorn <frederik.gladhorn@digia.com>2013-08-19 09:47:35 +0200
commitd2628d9d7015e4b75007471d150acedecaa0c6c1 (patch)
tree00ab012c7ae190d5a64788ee945ca006e3759e41 /src
parentb6a6a6387e279c431d520243345530fa19bd96c5 (diff)
parent566afc2d2e4156712ffec081715f12307cf46628 (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.qml6
-rw-r--r--src/imports/dialogs/qquickabstractcolordialog.cpp5
-rw-r--r--src/qml/qml/qqmllist.cpp5
-rw-r--r--src/quick/items/context2d/qquickcanvasitem.cpp2
-rw-r--r--src/quick/items/context2d/qquickcontext2dtexture.cpp2
-rw-r--r--src/quick/items/qquickflickable.cpp6
-rw-r--r--src/quick/items/qquickitem.cpp4
-rw-r--r--src/quick/items/qquickitemview.cpp2
-rw-r--r--src/quick/items/qquickwindow.cpp17
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);
}