diff options
Diffstat (limited to 'src/gui/kernel')
-rw-r--r-- | src/gui/kernel/qinputmethod.cpp | 25 | ||||
-rw-r--r-- | src/gui/kernel/qinputmethod.h | 3 |
2 files changed, 28 insertions, 0 deletions
diff --git a/src/gui/kernel/qinputmethod.cpp b/src/gui/kernel/qinputmethod.cpp index 438c169f71..495ea8f6e7 100644 --- a/src/gui/kernel/qinputmethod.cpp +++ b/src/gui/kernel/qinputmethod.cpp @@ -45,6 +45,8 @@ #include <qtimer.h> #include <qpa/qplatforminputcontext_p.h> +#include <QDebug> + QT_BEGIN_NAMESPACE /*! @@ -365,6 +367,29 @@ bool QInputMethodPrivate::objectAcceptsInputMethod(QObject *object) return enabled; } +/*! + Send \a query to the current focus object with parameters \a argument and return the result. + */ +QVariant QInputMethod::queryFocusObject(Qt::InputMethodQuery query, QVariant argument) +{ + QVariant retval; + QObject *focusObject = qGuiApp->focusObject(); + 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) + return retval; + + QInputMethodQueryEvent queryEvent(query); + QCoreApplication::sendEvent(focusObject, &queryEvent); + return queryEvent.value(query); +} + QT_END_NAMESPACE #include "moc_qinputmethod.cpp" diff --git a/src/gui/kernel/qinputmethod.h b/src/gui/kernel/qinputmethod.h index fe6cc3f331..b155b5c0ca 100644 --- a/src/gui/kernel/qinputmethod.h +++ b/src/gui/kernel/qinputmethod.h @@ -50,6 +50,7 @@ class QInputMethodPrivate; class QWindow; class QRectF; class QTransform; +class QInputMethodQueryEvent; class Q_GUI_EXPORT QInputMethod : public QObject { @@ -89,6 +90,8 @@ public: QLocale locale() const; Qt::LayoutDirection inputDirection() const; + static QVariant queryFocusObject(Qt::InputMethodQuery query, QVariant argument); + public Q_SLOTS: void show(); void hide(); |