mirror of
https://github.com/lubosz/overte.git
synced 2025-04-07 10:42:12 +02:00
Initial IME support
This commit is contained in:
parent
ab21945a54
commit
17dc2decf6
4 changed files with 47 additions and 0 deletions
|
@ -4181,6 +4181,31 @@ static inline bool isKeyEvent(QEvent::Type type) {
|
|||
return type == QEvent::KeyPress || type == QEvent::KeyRelease;
|
||||
}
|
||||
|
||||
bool Application::handleInputMethodEventForFocusedEntity(QEvent* event) {
|
||||
if (_keyboardFocusedEntity.get() != UNKNOWN_ENTITY_ID) {
|
||||
switch (event->type()) {
|
||||
case QEvent::InputMethod:
|
||||
case QEvent::InputMethodQuery:
|
||||
{
|
||||
auto eventHandler = getEntities()->getEventHandler(_keyboardFocusedEntity.get());
|
||||
if (eventHandler) {
|
||||
event->setAccepted(false);
|
||||
QCoreApplication::sendEvent(eventHandler, event);
|
||||
if (event->isAccepted()) {
|
||||
_lastAcceptedKeyPress = usecTimestampNow();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Application::handleKeyEventForFocusedEntity(QEvent* event) {
|
||||
if (_keyboardFocusedEntity.get() != UNKNOWN_ENTITY_ID) {
|
||||
switch (event->type()) {
|
||||
|
@ -4241,6 +4266,10 @@ bool Application::event(QEvent* event) {
|
|||
return false;
|
||||
}
|
||||
|
||||
if ((event->type() == QEvent::InputMethod || event->type() == QEvent::InputMethodQuery) && handleInputMethodEventForFocusedEntity(event)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Allow focused Entities to handle keyboard input
|
||||
if (isKeyEvent(event->type()) && handleKeyEventForFocusedEntity(event)) {
|
||||
return true;
|
||||
|
|
|
@ -565,6 +565,7 @@ private:
|
|||
bool initMenu();
|
||||
void pauseUntilLoginDetermined();
|
||||
void resumeAfterLoginDialogActionTaken();
|
||||
bool handleInputMethodEventForFocusedEntity(QEvent* event);
|
||||
bool handleKeyEventForFocusedEntity(QEvent* event);
|
||||
bool handleFileOpenEvent(QFileOpenEvent* event);
|
||||
void cleanupBeforeQuit();
|
||||
|
|
|
@ -39,6 +39,7 @@ GLWidget::GLWidget() {
|
|||
setAttribute(Qt::WA_NativeWindow);
|
||||
setAttribute(Qt::WA_PaintOnScreen);
|
||||
setAttribute(Qt::WA_NoSystemBackground);
|
||||
setAttribute(Qt::WA_InputMethodEnabled);
|
||||
setAutoFillBackground(false);
|
||||
grabGesture(Qt::PinchGesture);
|
||||
setAcceptDrops(true);
|
||||
|
@ -106,6 +107,16 @@ bool GLWidget::event(QEvent* event) {
|
|||
return true;
|
||||
}
|
||||
break;
|
||||
case QEvent::InputMethod:
|
||||
if (QCoreApplication::sendEvent(QCoreApplication::instance(), event)) {
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
case QEvent::InputMethodQuery:
|
||||
if (QCoreApplication::sendEvent(QCoreApplication::instance(), event)) {
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
|
|
|
@ -1145,6 +1145,12 @@ bool OffscreenUi::eventFilter(QObject* originalDestination, QEvent* event) {
|
|||
}
|
||||
break;
|
||||
}
|
||||
case QEvent::InputMethod:
|
||||
case QEvent::InputMethodQuery:
|
||||
if (QCoreApplication::sendEvent(getWindow(), event)) {
|
||||
return result;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue