QInputMethod: check if focusobject supports the "new" IM function before calling it
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ø <tor.arne.vestbo@qt.io>bb10
parent
30276cec3d
commit
30adaaedf7
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue