aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@digia.com>2014-01-26 10:36:32 +0100
committerSimon Hausmann <simon.hausmann@digia.com>2014-01-26 10:36:32 +0100
commit0906ae8ae7df09ec775ef2f038e4924a5de95a33 (patch)
treef4b2821ee37d669445ad8184a423bd439136e977 /src
parent9a5568a1972b72b32ae3058903cc7f4d7123b96b (diff)
parent0825d24cf5c35a7c6fe37088f23b793e33c69063 (diff)
Merge remote-tracking branch 'origin/stable' into dev
Diffstat (limited to 'src')
-rw-r--r--src/3rdparty/masm/wtf/MathExtras.h4
-rw-r--r--src/quick/items/qquickflickable.cpp2
-rw-r--r--src/quick/items/qquickpositioners.cpp80
-rw-r--r--src/quick/items/qquickpositioners_p.h4
-rw-r--r--src/quick/items/qquickpositioners_p_p.h8
5 files changed, 73 insertions, 25 deletions
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<long>(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
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<QMouseEvent> mouseEvent(QQuickWindowPrivate::cloneMouseEvent(event, &localPos));
window()->sendEvent(window()->mouseGrabberItem(), mouseEvent.data());
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* >(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*>(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