From bbd4f4195f6efd78c8668839b0756b5a46ce5b09 Mon Sep 17 00:00:00 2001 From: Frank Osterfeld Date: Wed, 22 Jan 2014 12:14:51 +0100 Subject: Fix QNX 6.6 build The stdlib of the upcoming QNX 6.6 has this abs overload, so check for the version when redefining it. Change-Id: Ib5650226c65417b42d8d7a79fac7ca53d3f315f1 Reviewed-by: Fabian Bumberger Reviewed-by: Andreas Holzammer Reviewed-by: Bernd Weimer Reviewed-by: Rafael Roquetto --- src/3rdparty/masm/wtf/MathExtras.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/3rdparty/masm/wtf/MathExtras.h b/src/3rdparty/masm/wtf/MathExtras.h index 5b12157148..9a85291ae2 100644 --- a/src/3rdparty/masm/wtf/MathExtras.h +++ b/src/3rdparty/masm/wtf/MathExtras.h @@ -147,8 +147,8 @@ inline long lroundf(float num) { return static_cast(roundf(num)); } #endif -#if COMPILER(GCC) && OS(QNX) -// The stdlib on QNX doesn't contain long abs(long). See PR #104666. +#if COMPILER(GCC) && OS(QNX) && _CPPLIB_VER < 640 +// The stdlib on QNX < 6.6 doesn't contain long abs(long). See PR #104666. inline long long abs(long num) { return labs(num); } #endif -- cgit v1.2.3 From afb5bf71c942d411d6102ce637bc7499d8ae467c Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Tue, 21 Jan 2014 23:40:50 +0200 Subject: Positioners: fix layout mirroring MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Listen to positioner geometry changes when the _effective_ layout direction is RTL. Task-number: QTBUG-35095 Change-Id: If06955c6bb04e5bed2126b05489229278c192173 Reviewed-by: Jan Arve Sæther --- src/quick/items/qquickpositioners.cpp | 80 +++++++++++++++++++++++++-------- src/quick/items/qquickpositioners_p.h | 4 ++ src/quick/items/qquickpositioners_p_p.h | 8 ++-- 3 files changed, 70 insertions(+), 22 deletions(-) (limited to 'src') diff --git a/src/quick/items/qquickpositioners.cpp b/src/quick/items/qquickpositioners.cpp index c72c2276e0..0ef871be43 100644 --- a/src/quick/items/qquickpositioners.cpp +++ b/src/quick/items/qquickpositioners.cpp @@ -869,8 +869,31 @@ void QQuickColumn::reportConflictingAnchors() \sa Grid::spacing */ +class QQuickRowPrivate : public QQuickBasePositionerPrivate +{ + Q_DECLARE_PUBLIC(QQuickRow) + +public: + QQuickRowPrivate() + : QQuickBasePositionerPrivate() + {} + + void effectiveLayoutDirectionChange() + { + Q_Q(QQuickRow); + // For RTL layout the positioning changes when the width changes. + if (getEffectiveLayoutDirection(q) == Qt::RightToLeft) + addItemChangeListener(this, QQuickItemPrivate::Geometry); + else + removeItemChangeListener(this, QQuickItemPrivate::Geometry); + // Don't postpone, as it might be the only trigger for visible changes. + q->prePositioning(); + emit q->effectiveLayoutDirectionChanged(); + } +}; + QQuickRow::QQuickRow(QQuickItem *parent) -: QQuickBasePositioner(Horizontal, parent) +: QQuickBasePositioner(*new QQuickRowPrivate, Horizontal, parent) { } /*! @@ -900,14 +923,8 @@ void QQuickRow::setLayoutDirection(Qt::LayoutDirection layoutDirection) QQuickBasePositionerPrivate *d = static_cast(QQuickBasePositionerPrivate::get(this)); if (d->layoutDirection != layoutDirection) { d->layoutDirection = layoutDirection; - // For RTL layout the positioning changes when the width changes. - if (d->layoutDirection == Qt::RightToLeft) - d->addItemChangeListener(d, QQuickItemPrivate::Geometry); - else - d->removeItemChangeListener(d, QQuickItemPrivate::Geometry); - prePositioning(); emit layoutDirectionChanged(); - emit effectiveLayoutDirectionChanged(); + d->effectiveLayoutDirectionChange(); } } /*! @@ -1111,8 +1128,33 @@ void QQuickRow::reportConflictingAnchors() \sa rows, columns */ + +class QQuickGridPrivate : public QQuickBasePositionerPrivate +{ + Q_DECLARE_PUBLIC(QQuickGrid) + +public: + QQuickGridPrivate() + : QQuickBasePositionerPrivate() + {} + + void effectiveLayoutDirectionChange() + { + Q_Q(QQuickGrid); + // For RTL layout the positioning changes when the width changes. + if (getEffectiveLayoutDirection(q) == Qt::RightToLeft) + addItemChangeListener(this, QQuickItemPrivate::Geometry); + else + removeItemChangeListener(this, QQuickItemPrivate::Geometry); + // Don't postpone, as it might be the only trigger for visible changes. + q->prePositioning(); + emit q->effectiveLayoutDirectionChanged(); + emit q->effectiveHorizontalAlignmentChanged(q->effectiveHAlign()); + } +}; + QQuickGrid::QQuickGrid(QQuickItem *parent) - : QQuickBasePositioner(Both, parent) + : QQuickBasePositioner(*new QQuickGridPrivate, Both, parent) , m_rows(-1) , m_columns(-1) , m_rowSpacing(-1) @@ -1260,15 +1302,8 @@ void QQuickGrid::setLayoutDirection(Qt::LayoutDirection layoutDirection) QQuickBasePositionerPrivate *d = static_cast(QQuickBasePositionerPrivate::get(this)); if (d->layoutDirection != layoutDirection) { d->layoutDirection = layoutDirection; - // For RTL layout the positioning changes when the width changes. - if (d->layoutDirection == Qt::RightToLeft) - d->addItemChangeListener(d, QQuickItemPrivate::Geometry); - else - d->removeItemChangeListener(d, QQuickItemPrivate::Geometry); - prePositioning(); emit layoutDirectionChanged(); - emit effectiveLayoutDirectionChanged(); - emit effectiveHorizontalAlignmentChanged(effectiveHAlign()); + d->effectiveLayoutDirectionChange(); } } @@ -1652,6 +1687,14 @@ public: : QQuickBasePositionerPrivate(), flow(QQuickFlow::LeftToRight) {} + void effectiveLayoutDirectionChange() + { + Q_Q(QQuickFlow); + // Don't postpone, as it might be the only trigger for visible changes. + q->prePositioning(); + emit q->effectiveLayoutDirectionChanged(); + } + QQuickFlow::Flow flow; }; @@ -1724,9 +1767,8 @@ void QQuickFlow::setLayoutDirection(Qt::LayoutDirection layoutDirection) Q_D(QQuickFlow); if (d->layoutDirection != layoutDirection) { d->layoutDirection = layoutDirection; - prePositioning(); emit layoutDirectionChanged(); - emit effectiveLayoutDirectionChanged(); + d->effectiveLayoutDirectionChange(); } } diff --git a/src/quick/items/qquickpositioners_p.h b/src/quick/items/qquickpositioners_p.h index eaccdf7653..bbb8319b15 100644 --- a/src/quick/items/qquickpositioners_p.h +++ b/src/quick/items/qquickpositioners_p.h @@ -187,6 +187,7 @@ private: Q_DISABLE_COPY(QQuickColumn) }; +class QQuickRowPrivate; class Q_AUTOTEST_EXPORT QQuickRow: public QQuickBasePositioner { Q_OBJECT @@ -208,8 +209,10 @@ protected: virtual void reportConflictingAnchors(); private: Q_DISABLE_COPY(QQuickRow) + Q_DECLARE_PRIVATE(QQuickRow) }; +class QQuickGridPrivate; class Q_AUTOTEST_EXPORT QQuickGrid : public QQuickBasePositioner { Q_OBJECT @@ -293,6 +296,7 @@ private: HAlignment m_hItemAlign; VAlignment m_vItemAlign; Q_DISABLE_COPY(QQuickGrid) + Q_DECLARE_PRIVATE(QQuickGrid) }; class QQuickFlowPrivate; diff --git a/src/quick/items/qquickpositioners_p_p.h b/src/quick/items/qquickpositioners_p_p.h index 835c5929ac..c04500303c 100644 --- a/src/quick/items/qquickpositioners_p_p.h +++ b/src/quick/items/qquickpositioners_p_p.h @@ -107,9 +107,7 @@ public: Qt::LayoutDirection layoutDirection; void mirrorChange() { - Q_Q(QQuickBasePositioner); - if (type != QQuickBasePositioner::Vertical) - q->prePositioning(); //Don't postpone, as it might be the only trigger for visible changes. + effectiveLayoutDirectionChange(); } bool isLeftToRight() const { if (type == QQuickBasePositioner::Vertical) @@ -155,6 +153,10 @@ public: else return positioner->d_func()->layoutDirection; } + + virtual void effectiveLayoutDirectionChange() + { + } }; QT_END_NAMESPACE -- cgit v1.2.3 From 55b545b5926fd2ecbb54c0d7bdeba0d79b4cf656 Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Wed, 22 Jan 2014 18:33:26 +0200 Subject: Flickable: fix crash in delayed press handling Task-number: QTBUG-31328 Change-Id: Ic87e9b4db09242b49f104a8f38e4e420c62db75c Reviewed-by: Robin Burchell Reviewed-by: Martin Jones --- src/quick/items/qquickflickable.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/quick/items/qquickflickable.cpp b/src/quick/items/qquickflickable.cpp index 333c11cb29..ec199a5a9b 100644 --- a/src/quick/items/qquickflickable.cpp +++ b/src/quick/items/qquickflickable.cpp @@ -1234,7 +1234,7 @@ void QQuickFlickable::mouseReleaseEvent(QMouseEvent *event) d->replayDelayedPress(); // Now send the release - if (window()->mouseGrabberItem()) { + if (window() && window()->mouseGrabberItem()) { QPointF localPos = window()->mouseGrabberItem()->mapFromScene(event->windowPos()); QScopedPointer mouseEvent(QQuickWindowPrivate::cloneMouseEvent(event, &localPos)); window()->sendEvent(window()->mouseGrabberItem(), mouseEvent.data()); -- cgit v1.2.3