add QInputMethodQueryEvent

QInputMethodQueryEvent will replace the old
inputMethodHints() and inputMethodQuery() APIs
in QWidget. It has the advantage that it works
nicely with any kind of QObject.
This commit is contained in:
Lars Knoll 2011-06-21 16:45:00 +02:00
parent 4363d836f6
commit 407a6fe798
5 changed files with 84 additions and 1 deletions

View File

@ -1488,7 +1488,8 @@ public:
ImSurroundingText,
ImCurrentSelection,
ImMaximumTextLength,
ImAnchorPosition
ImAnchorPosition,
ImHints
};
enum InputMethodHint {

View File

@ -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

View File

@ -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
/*!

View File

@ -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

View File

@ -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();
}