diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2016-11-15 15:43:09 +0100 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2016-11-15 15:43:09 +0100 |
commit | ab027c7d786966ab87500ca609fd45b0551902c9 (patch) | |
tree | 55d496a604ae36f7ce9d8adae8160d3efab148a4 /src | |
parent | 7b33addb8d8d1c07dda9a9f39d86f7bda812da82 (diff) | |
parent | 0edce6c41e9b193c7482334e313c4886c94702f1 (diff) |
Merge remote-tracking branch 'origin/5.8' into dev
Conflicts:
src/quicktemplates2/qquickpopup.cpp
Change-Id: I227b071476e569d13eebd7d11ed041fe30daa389
Diffstat (limited to 'src')
-rw-r--r-- | src/quicktemplates2/qquickpopup.cpp | 17 | ||||
-rw-r--r-- | src/quicktemplates2/qquickpopup_p_p.h | 1 | ||||
-rw-r--r-- | src/quicktemplates2/qquickpopupitem.cpp | 2 | ||||
-rw-r--r-- | src/quicktemplates2/qquickscrollbar.cpp | 8 | ||||
-rw-r--r-- | src/quicktemplates2/qquickscrollindicator.cpp | 8 |
5 files changed, 33 insertions, 3 deletions
diff --git a/src/quicktemplates2/qquickpopup.cpp b/src/quicktemplates2/qquickpopup.cpp index 5155b339..7ff99c49 100644 --- a/src/quicktemplates2/qquickpopup.cpp +++ b/src/quicktemplates2/qquickpopup.cpp @@ -41,6 +41,7 @@ #include "qquickapplicationwindow_p.h" #include "qquickoverlay_p_p.h" #include "qquickcontrol_p_p.h" +#include "qquickdialog_p.h" #include <QtQml/qqmlinfo.h> #include <QtQuick/qquickitem.h> @@ -245,16 +246,24 @@ void QQuickPopupPrivate::init() positioner = new QQuickPopupPositioner(q); } -bool QQuickPopupPrivate::tryClose(QQuickItem *item, QMouseEvent *event) +void QQuickPopupPrivate::closeOrReject() { Q_Q(QQuickPopup); + if (QQuickDialog *dialog = qobject_cast<QQuickDialog*>(q)) + dialog->reject(); + else + q->close(); +} + +bool QQuickPopupPrivate::tryClose(QQuickItem *item, QMouseEvent *event) +{ const bool isPress = event->type() == QEvent::MouseButtonPress; const bool onOutside = closePolicy.testFlag(isPress ? QQuickPopup::CloseOnPressOutside : QQuickPopup::CloseOnReleaseOutside); const bool onOutsideParent = closePolicy.testFlag(isPress ? QQuickPopup::CloseOnPressOutsideParent : QQuickPopup::CloseOnReleaseOutsideParent); if (onOutside || onOutsideParent) { if (!popupItem->contains(item->mapToItem(popupItem, event->pos()))) { if (!onOutsideParent || !parentItem || !parentItem->contains(item->mapToItem(parentItem, event->pos()))) { - q->close(); + closeOrReject(); return true; } } @@ -1563,6 +1572,10 @@ void QQuickPopup::setScale(qreal scale) has active focus. The default value is \c {Popup.CloseOnEscape | Popup.CloseOnPressOutside}. + + \note There is a known limitation that the \c Popup.CloseOnReleaseOutside + and \c Popup.CloseOnReleaseOutsideParent policies only work with + \l modal popups. */ QQuickPopup::ClosePolicy QQuickPopup::closePolicy() const { diff --git a/src/quicktemplates2/qquickpopup_p_p.h b/src/quicktemplates2/qquickpopup_p_p.h index 1d25f922..2cf92864 100644 --- a/src/quicktemplates2/qquickpopup_p_p.h +++ b/src/quicktemplates2/qquickpopup_p_p.h @@ -94,6 +94,7 @@ public: } void init(); + void closeOrReject(); bool tryClose(QQuickItem *item, QMouseEvent *event); virtual void reposition(); virtual void resizeOverlay(); diff --git a/src/quicktemplates2/qquickpopupitem.cpp b/src/quicktemplates2/qquickpopupitem.cpp index 877db347..de8a9de2 100644 --- a/src/quicktemplates2/qquickpopupitem.cpp +++ b/src/quicktemplates2/qquickpopupitem.cpp @@ -152,7 +152,7 @@ bool QQuickPopupItem::event(QEvent *event) if (event->type() == QEvent::Shortcut) { QShortcutEvent *se = static_cast<QShortcutEvent *>(event); if (se->shortcutId() == d->escapeId || se->shortcutId() == d->backId) { - d->popup->close(); + QQuickPopupPrivate::get(d->popup)->closeOrReject(); return true; } } diff --git a/src/quicktemplates2/qquickscrollbar.cpp b/src/quicktemplates2/qquickscrollbar.cpp index 8e6db063..c291e4b1 100644 --- a/src/quicktemplates2/qquickscrollbar.cpp +++ b/src/quicktemplates2/qquickscrollbar.cpp @@ -565,11 +565,19 @@ void QQuickScrollBarAttachedPrivate::itemGeometryChanged(QQuickItem *item, const Q_UNUSED(item); Q_UNUSED(change); if (horizontal && horizontal->height() > 0) { +#ifdef QT_QUICK_NEW_GEOMETRY_CHANGED_HANDLING // TODO: correct/rename diff to oldGeometry + bool move = qFuzzyIsNull(horizontal->y()) || qFuzzyCompare(horizontal->y(), diff.height() - horizontal->height()); +#else bool move = qFuzzyIsNull(horizontal->y()) || qFuzzyCompare(horizontal->y(), item->height() - diff.height() - horizontal->height()); +#endif layoutHorizontal(move); } if (vertical && vertical->width() > 0) { +#ifdef QT_QUICK_NEW_GEOMETRY_CHANGED_HANDLING // TODO: correct/rename diff to oldGeometry + bool move = qFuzzyIsNull(vertical->x()) || qFuzzyCompare(vertical->x(), diff.width() - vertical->width()); +#else bool move = qFuzzyIsNull(vertical->x()) || qFuzzyCompare(vertical->x(), item->width() - diff.width() - vertical->width()); +#endif layoutVertical(move); } } diff --git a/src/quicktemplates2/qquickscrollindicator.cpp b/src/quicktemplates2/qquickscrollindicator.cpp index 9f2f6eb9..66830ec1 100644 --- a/src/quicktemplates2/qquickscrollindicator.cpp +++ b/src/quicktemplates2/qquickscrollindicator.cpp @@ -346,11 +346,19 @@ void QQuickScrollIndicatorAttachedPrivate::itemGeometryChanged(QQuickItem *item, Q_UNUSED(item); Q_UNUSED(change); if (horizontal && horizontal->height() > 0) { +#ifdef QT_QUICK_NEW_GEOMETRY_CHANGED_HANDLING // TODO: correct/rename diff to oldGeometry + bool move = qFuzzyIsNull(horizontal->y()) || qFuzzyCompare(horizontal->y(), diff.height() - horizontal->height()); +#else bool move = qFuzzyIsNull(horizontal->y()) || qFuzzyCompare(horizontal->y(), item->height() - diff.height() - horizontal->height()); +#endif layoutHorizontal(move); } if (vertical && vertical->width() > 0) { +#ifdef QT_QUICK_NEW_GEOMETRY_CHANGED_HANDLING // TODO: correct/rename diff to oldGeometry + bool move = qFuzzyIsNull(vertical->x()) || qFuzzyCompare(vertical->x(), diff.width() - vertical->width()); +#else bool move = qFuzzyIsNull(vertical->x()) || qFuzzyCompare(vertical->x(), item->width() - diff.width() - vertical->width()); +#endif layoutVertical(move); } } |