From 30adaaedf77d567f7c9c835756b560065c446e9e Mon Sep 17 00:00:00 2001 From: Richard Moe Gustavsen Date: Fri, 29 Oct 2021 13:39:32 +0200 Subject: QInputMethod: check if focusobject supports the "new" IM function before calling it MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We use QMetaObject to invoke the "queryFocusObject" function. But if the current focus object doesn't implement this function, we get a "QMetaObject::invokeMethod: No such method" warning. This patch will add a check if the focus object supports IM queries before trying to call "queryFocusObject", to avoid the warning. Task-number: QTBUG-91545 Change-Id: I3aa8bd2d4bf57bd42c2d77ed71174ec4f9951f81 Reviewed-by: Tor Arne Vestbø --- src/gui/kernel/qinputmethod.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'src/gui') diff --git a/src/gui/kernel/qinputmethod.cpp b/src/gui/kernel/qinputmethod.cpp index f5de06aea1..f358cc87fd 100644 --- a/src/gui/kernel/qinputmethod.cpp +++ b/src/gui/kernel/qinputmethod.cpp @@ -426,13 +426,17 @@ QVariant QInputMethod::queryFocusObject(Qt::InputMethodQuery query, const QVaria if (!focusObject) return retval; - bool newMethodWorks = QMetaObject::invokeMethod(focusObject, "inputMethodQuery", - Qt::DirectConnection, - Q_RETURN_ARG(QVariant, retval), - Q_ARG(Qt::InputMethodQuery, query), - Q_ARG(QVariant, argument)); - if (newMethodWorks) + static const char *signature = "inputMethodQuery(Qt::InputMethodQuery,QVariant)"; + const bool newMethodSupported = focusObject->metaObject()->indexOfMethod(signature) != -1; + if (newMethodSupported) { + const bool ok = QMetaObject::invokeMethod(focusObject, "inputMethodQuery", + Qt::DirectConnection, + Q_RETURN_ARG(QVariant, retval), + Q_ARG(Qt::InputMethodQuery, query), + Q_ARG(QVariant, argument)); + Q_ASSERT(ok); return retval; + } QInputMethodQueryEvent queryEvent(query); QCoreApplication::sendEvent(focusObject, &queryEvent); -- cgit v1.2.3