diff options
-rw-r--r-- | .qmake.conf | 2 | ||||
-rw-r--r-- | src/imports/controls/ScrollBar.qml | 1 | ||||
-rw-r--r-- | src/imports/controls/fusion/ScrollBar.qml | 1 | ||||
-rw-r--r-- | src/imports/controls/imagine/ScrollBar.qml | 1 | ||||
-rw-r--r-- | src/imports/controls/material/ScrollBar.qml | 1 | ||||
-rw-r--r-- | src/imports/controls/universal/ScrollBar.qml | 1 | ||||
-rw-r--r-- | src/quicktemplates2/qquickpresshandler.cpp | 35 | ||||
-rw-r--r-- | src/quicktemplates2/qquickpresshandler_p_p.h | 2 | ||||
-rw-r--r-- | src/quicktemplates2/qquicktextarea_p.h | 2 | ||||
-rw-r--r-- | src/quicktemplates2/qquicktextfield_p.h | 2 | ||||
-rw-r--r-- | tests/auto/controls/data/tst_scrollbar.qml | 5 |
11 files changed, 36 insertions, 17 deletions
diff --git a/.qmake.conf b/.qmake.conf index 1a8da95c..e9510576 100644 --- a/.qmake.conf +++ b/.qmake.conf @@ -4,4 +4,4 @@ DEFINES += QT_NO_FOREACH QQC2_SOURCE_TREE = $$PWD -MODULE_VERSION = 5.13.0 +MODULE_VERSION = 5.14.0 diff --git a/src/imports/controls/ScrollBar.qml b/src/imports/controls/ScrollBar.qml index 1cff0afc..0948fb1d 100644 --- a/src/imports/controls/ScrollBar.qml +++ b/src/imports/controls/ScrollBar.qml @@ -49,6 +49,7 @@ T.ScrollBar { padding: 2 visible: control.policy !== T.ScrollBar.AlwaysOff + minimumSize: orientation == Qt.Horizontal ? height / width : width / height contentItem: Rectangle { implicitWidth: control.interactive ? 6 : 2 diff --git a/src/imports/controls/fusion/ScrollBar.qml b/src/imports/controls/fusion/ScrollBar.qml index e4fb7949..93b58f0e 100644 --- a/src/imports/controls/fusion/ScrollBar.qml +++ b/src/imports/controls/fusion/ScrollBar.qml @@ -51,6 +51,7 @@ T.ScrollBar { padding: 2 visible: control.policy !== T.ScrollBar.AlwaysOff + minimumSize: orientation == Qt.Horizontal ? height / width : width / height contentItem: Rectangle { implicitWidth: control.interactive ? 6 : 2 diff --git a/src/imports/controls/imagine/ScrollBar.qml b/src/imports/controls/imagine/ScrollBar.qml index 787ea663..1b21becb 100644 --- a/src/imports/controls/imagine/ScrollBar.qml +++ b/src/imports/controls/imagine/ScrollBar.qml @@ -48,6 +48,7 @@ T.ScrollBar { implicitContentHeight + topPadding + bottomPadding) visible: control.policy !== T.ScrollBar.AlwaysOff + minimumSize: orientation == Qt.Horizontal ? height / width : width / height topPadding: background ? background.topPadding : 0 leftPadding: background ? background.leftPadding : 0 diff --git a/src/imports/controls/material/ScrollBar.qml b/src/imports/controls/material/ScrollBar.qml index a376742d..8f2cc99d 100644 --- a/src/imports/controls/material/ScrollBar.qml +++ b/src/imports/controls/material/ScrollBar.qml @@ -48,6 +48,7 @@ T.ScrollBar { padding: control.interactive ? 1 : 2 visible: control.policy !== T.ScrollBar.AlwaysOff + minimumSize: orientation == Qt.Horizontal ? height / width : width / height contentItem: Rectangle { implicitWidth: control.interactive ? 13 : 4 diff --git a/src/imports/controls/universal/ScrollBar.qml b/src/imports/controls/universal/ScrollBar.qml index d6a525f7..1e049533 100644 --- a/src/imports/controls/universal/ScrollBar.qml +++ b/src/imports/controls/universal/ScrollBar.qml @@ -47,6 +47,7 @@ T.ScrollBar { implicitContentHeight + topPadding + bottomPadding) visible: control.policy !== T.ScrollBar.AlwaysOff + minimumSize: orientation == Qt.Horizontal ? height / width : width / height // TODO: arrows diff --git a/src/quicktemplates2/qquickpresshandler.cpp b/src/quicktemplates2/qquickpresshandler.cpp index 8df25a82..b9018573 100644 --- a/src/quicktemplates2/qquickpresshandler.cpp +++ b/src/quicktemplates2/qquickpresshandler.cpp @@ -41,6 +41,8 @@ #include <QtGui/qstylehints.h> #include <QtQuick/qquickitem.h> #include <QtQuick/private/qquickevents_p_p.h> +#include <QtQuickTemplates2/private/qquicktextarea_p.h> +#include <QtQuickTemplates2/private/qquicktextfield_p.h> QT_BEGIN_NAMESPACE @@ -55,11 +57,7 @@ void QQuickPressHandler::mousePressEvent(QMouseEvent *event) timer.stop(); } - if (pressedSignalIndex == -1) - pressedSignalIndex = control->metaObject()->indexOfSignal("pressed(QQuickMouseEvent*)"); - Q_ASSERT(pressedSignalIndex != -1); - - if (QObjectPrivate::get(control)->isSignalConnected(pressedSignalIndex)) { + if (isSignalConnected(control, "pressed(QQuickMouseEvent*)", pressedSignalIndex)) { QQuickMouseEvent mev; mev.reset(pressPos.x(), pressPos.y(), event->button(), event->buttons(), QGuiApplication::keyboardModifiers(), false/*isClick*/, false/*wasHeld*/); @@ -82,11 +80,7 @@ void QQuickPressHandler::mouseReleaseEvent(QMouseEvent *event) if (!longPress) { timer.stop(); - if (releasedSignalIndex == -1) - releasedSignalIndex = control->metaObject()->indexOfSignal("released(QQuickMouseEvent*)"); - Q_ASSERT(releasedSignalIndex != -1); - - if (QObjectPrivate::get(control)->isSignalConnected(releasedSignalIndex)) { + if (isSignalConnected(control, "released(QQuickMouseEvent*)", releasedSignalIndex)) { QQuickMouseEvent mev; mev.reset(pressPos.x(), pressPos.y(), event->button(), event->buttons(), QGuiApplication::keyboardModifiers(), false/*isClick*/, false/*wasHeld*/); @@ -104,11 +98,7 @@ void QQuickPressHandler::timerEvent(QTimerEvent *) timer.stop(); clearDelayedMouseEvent(); - if (pressAndHoldSignalIndex == -1) - pressAndHoldSignalIndex = control->metaObject()->indexOfSignal("pressAndHold(QQuickMouseEvent*)"); - Q_ASSERT(pressAndHoldSignalIndex != -1); - - longPress = QObjectPrivate::get(control)->isSignalConnected(pressAndHoldSignalIndex); + longPress = isSignalConnected(control, "pressAndHold(QQuickMouseEvent*)", pressAndHoldSignalIndex); if (longPress) { QQuickMouseEvent mev; mev.reset(pressPos.x(), pressPos.y(), Qt::LeftButton, Qt::LeftButton, @@ -136,4 +126,19 @@ bool QQuickPressHandler::isActive() return !(timer.isActive() || longPress); } +bool QQuickPressHandler::isSignalConnected(QQuickItem *item, const char *signalName, int &signalIndex) +{ + if (signalIndex == -1) + signalIndex = item->metaObject()->indexOfSignal(signalName); + Q_ASSERT(signalIndex != -1); + const auto signalMetaMethod = item->metaObject()->method(signalIndex); + if (QQuickTextArea *textArea = qobject_cast<QQuickTextArea*>(item)) { + return textArea->isSignalConnected(signalMetaMethod); + } else if (QQuickTextField *textField = qobject_cast<QQuickTextField*>(item)) { + return textField->isSignalConnected(signalMetaMethod); + } + qFatal("Unhandled control type for signal name: %s", signalName); + return false; +} + QT_END_NAMESPACE diff --git a/src/quicktemplates2/qquickpresshandler_p_p.h b/src/quicktemplates2/qquickpresshandler_p_p.h index 99ef94bd..19312cdd 100644 --- a/src/quicktemplates2/qquickpresshandler_p_p.h +++ b/src/quicktemplates2/qquickpresshandler_p_p.h @@ -67,6 +67,8 @@ struct QQuickPressHandler void clearDelayedMouseEvent(); bool isActive(); + static bool isSignalConnected(QQuickItem *item, const char *signalName, int &signalIndex); + QQuickItem *control = nullptr; QBasicTimer timer; QPointF pressPos; diff --git a/src/quicktemplates2/qquicktextarea_p.h b/src/quicktemplates2/qquicktextarea_p.h index 3c38dabf..15182a84 100644 --- a/src/quicktemplates2/qquicktextarea_p.h +++ b/src/quicktemplates2/qquicktextarea_p.h @@ -164,6 +164,8 @@ Q_SIGNALS: Q_REVISION(5) void bottomInsetChanged(); protected: + friend struct QQuickPressHandler; + void classBegin() override; void componentComplete() override; diff --git a/src/quicktemplates2/qquicktextfield_p.h b/src/quicktemplates2/qquicktextfield_p.h index d0d25d70..ae2681d1 100644 --- a/src/quicktemplates2/qquicktextfield_p.h +++ b/src/quicktemplates2/qquicktextfield_p.h @@ -159,6 +159,8 @@ Q_SIGNALS: Q_REVISION(5) void bottomInsetChanged(); protected: + friend struct QQuickPressHandler; + void classBegin() override; void componentComplete() override; diff --git a/tests/auto/controls/data/tst_scrollbar.qml b/tests/auto/controls/data/tst_scrollbar.qml index 0051b785..9d21fa8b 100644 --- a/tests/auto/controls/data/tst_scrollbar.qml +++ b/tests/auto/controls/data/tst_scrollbar.qml @@ -67,7 +67,10 @@ TestCase { Component { id: scrollBar - ScrollBar { padding: 0 } + ScrollBar { + padding: 0 + minimumSize: 0 + } } Component { |