summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/corelib/global/qnamespace.h3
-rw-r--r--src/corelib/kernel/qcoreevent.h2
-rw-r--r--src/gui/kernel/qevent.cpp47
-rw-r--r--src/gui/kernel/qevent.h16
-rw-r--r--src/widgets/kernel/qwidget.cpp17
5 files changed, 84 insertions, 1 deletions
diff --git a/src/corelib/global/qnamespace.h b/src/corelib/global/qnamespace.h
index 4a663fc8a5..38d4a85b89 100644
--- a/src/corelib/global/qnamespace.h
+++ b/src/corelib/global/qnamespace.h
@@ -1488,7 +1488,8 @@ public:
ImSurroundingText,
ImCurrentSelection,
ImMaximumTextLength,
- ImAnchorPosition
+ ImAnchorPosition,
+ ImHints
};
enum InputMethodHint {
diff --git a/src/corelib/kernel/qcoreevent.h b/src/corelib/kernel/qcoreevent.h
index 432f6a8cee..791b207dea 100644
--- a/src/corelib/kernel/qcoreevent.h
+++ b/src/corelib/kernel/qcoreevent.h
@@ -296,6 +296,8 @@ public:
Expose = 208,
+ InputMethodQuery = 209,
+
// 512 reserved for Qt Jambi's MetaCall event
// 513 reserved for Qt Jambi's DeleteOnMainThread event
diff --git a/src/gui/kernel/qevent.cpp b/src/gui/kernel/qevent.cpp
index 988d70c6ce..9e6a8d6e52 100644
--- a/src/gui/kernel/qevent.cpp
+++ b/src/gui/kernel/qevent.cpp
@@ -1755,6 +1755,53 @@ void QInputMethodEvent::setCommitString(const QString &commitString, int replace
\sa replacementStart(), setCommitString()
*/
+
+/*! \class QInputMethodQueryEvent
+
+ This event is sent by the input context to input objects.
+
+ It is used by the
+ input method to query a set of properties of the object to be
+ able to support complex input method operations as support for
+ surrounding text and reconversions.
+
+ query() specifies which property is queried.
+
+ The object should call setValue() on the event to fill in the requested
+ data before calling accept().
+*/
+QInputMethodQueryEvent::QInputMethodQueryEvent(Qt::InputMethodQuery query)
+ : QEvent(InputMethodQuery),
+ m_query(query)
+{
+}
+
+QInputMethodQueryEvent::~QInputMethodQueryEvent()
+{
+}
+
+/*!
+ \fn Qt::InputMethodQuery QInputMethodQueryEvent::query() const
+
+ returns the type of data queried.
+*/
+
+/*!
+ \fn QVariant QInputMethodQueryEvent::value() const
+
+ returns the value set by the receiving object. Mainly used by the input method.
+
+ \sa setValue()
+*/
+
+/*!
+ \fn QVariant QInputMethodQueryEvent::setValue()
+
+ Used by the receiving object to set the value requested by query().
+
+ \sa setValue()
+*/
+
#ifndef QT_NO_TABLETEVENT
/*!
diff --git a/src/gui/kernel/qevent.h b/src/gui/kernel/qevent.h
index 809a3d6371..59d50df268 100644
--- a/src/gui/kernel/qevent.h
+++ b/src/gui/kernel/qevent.h
@@ -427,6 +427,22 @@ private:
int replace_from;
int replace_length;
};
+
+class Q_GUI_EXPORT QInputMethodQueryEvent : public QEvent
+{
+public:
+ QInputMethodQueryEvent(Qt::InputMethodQuery query);
+ ~QInputMethodQueryEvent();
+
+ Qt::InputMethodQuery query() const { return m_query; }
+
+ void setValue(const QVariant &v) { m_value = v; }
+ QVariant value() const { return m_value; }
+private:
+ Qt::InputMethodQuery m_query;
+ QVariant m_value;
+};
+
#endif // QT_NO_INPUTMETHOD
#ifndef QT_NO_DRAGANDDROP
diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp
index 0646983150..a8bd5ca519 100644
--- a/src/widgets/kernel/qwidget.cpp
+++ b/src/widgets/kernel/qwidget.cpp
@@ -8297,6 +8297,21 @@ bool QWidget::event(QEvent *event)
inputMethodEvent((QInputMethodEvent *) event);
break;
+ case QEvent::InputMethodQuery:
+ if (testAttribute(Qt::WA_InputMethodEnabled)) {
+ QInputMethodQueryEvent *query = static_cast<QInputMethodQueryEvent *>(event);
+ QVariant v = inputMethodQuery(query->query());
+
+ if (query->query() == Qt::ImMicroFocus) {
+ QRect r = v.toRect();
+ v = QRect(mapToGlobal(r.topLeft()), r.size());
+ }
+
+ query->setValue(v);
+ query->accept();
+ break;
+ }
+
case QEvent::PolishRequest:
ensurePolished();
break;
@@ -9215,6 +9230,8 @@ QVariant QWidget::inputMethodQuery(Qt::InputMethodQuery query) const
case Qt::ImAnchorPosition:
// Fallback.
return inputMethodQuery(Qt::ImCursorPosition);
+ case Qt::ImHints:
+ return (int)inputMethodHints();
default:
return QVariant();
}