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:
parent
4363d836f6
commit
407a6fe798
@ -1488,7 +1488,8 @@ public:
|
||||
ImSurroundingText,
|
||||
ImCurrentSelection,
|
||||
ImMaximumTextLength,
|
||||
ImAnchorPosition
|
||||
ImAnchorPosition,
|
||||
ImHints
|
||||
};
|
||||
|
||||
enum InputMethodHint {
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
/*!
|
||||
|
@ -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
|
||||
|
@ -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();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user