From f7f2e0981db1c8f5e148b78ebbeaad4ff695abd6 Mon Sep 17 00:00:00 2001 From: Mitch Curtis Date: Fri, 15 Feb 2019 13:04:32 +0100 Subject: Fix failing text control tests As bbc81363f explains, we should be using QObject::isSignalConnected() instead of QObjectPrivate::isSignalConnected(). Fixes: QTBUG-73754 Change-Id: Ibba1371dac588c0f9c1fda474a3f5745f232e59b Reviewed-by: Richard Moe Gustavsen --- src/quicktemplates2/qquickpresshandler.cpp | 35 +++++++++++++++++------------- 1 file changed, 20 insertions(+), 15 deletions(-) (limited to 'src/quicktemplates2/qquickpresshandler.cpp') 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 #include #include +#include +#include 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(item)) { + return textArea->isSignalConnected(signalMetaMethod); + } else if (QQuickTextField *textField = qobject_cast(item)) { + return textField->isSignalConnected(signalMetaMethod); + } + qFatal("Unhandled control type for signal name: %s", signalName); + return false; +} + QT_END_NAMESPACE -- cgit v1.2.3