bool QInputMethod::isAnimating() const { Q_D(const QInputMethod); QPlatformInputContext *ic = d->platformInputContext(); if (ic) return ic->isAnimating(); return false; }
/*! \property QInputMethod::visible \brief Virtual keyboard's visibility on the screen Input method visibility remains false for devices with no virtual keyboards. \sa show(), hide() */ bool QInputMethod::isVisible() const { Q_D(const QInputMethod); QPlatformInputContext *ic = d->platformInputContext(); if (ic) return ic->isInputPanelVisible(); return false; }
/*! \property QInputMethod::keyboardRectangle \brief Virtual keyboard's geometry in window coordinates. */ QRectF QInputMethod::keyboardRectangle() const { Q_D(const QInputMethod); QPlatformInputContext *ic = d->platformInputContext(); if (ic) return ic->keyboardRect(); return QRectF(); }
static void aboutToStopCallback(UApplicationArchive *archive, void* context) { Q_UNUSED(archive) DASSERT(context != NULL); QMirClientClientIntegration* integration = static_cast<QMirClientClientIntegration*>(context); QPlatformInputContext *inputContext = integration->inputContext(); if (inputContext) { inputContext->hideInputPanel(); } else { qWarning("QMirClientClientIntegration aboutToStopCallback(): no input context"); } QWindowSystemInterface::handleApplicationStateChanged(Qt::ApplicationSuspended); }
/*! Called by the input item to inform the platform input methods when there has been state changes in editor's input method query attributes. When calling the function \a queries parameter has to be used to tell what has changes, which input method can use to make queries for attributes it's interested with QInputMethodQueryEvent. In particular calling update whenever the cursor position changes is important as that often causes other query attributes like surrounding text and text selection to change as well. The attributes that often change together with cursor position have been grouped in Qt::ImQueryInput value for convenience. */ void QInputMethod::update(Qt::InputMethodQueries queries) { Q_D(QInputMethod); if (queries & Qt::ImEnabled) { QObject *focus = qApp->focusObject(); bool enabled = d->objectAcceptsInputMethod(focus); QPlatformInputContextPrivate::setInputMethodAccepted(enabled); } QPlatformInputContext *ic = d->platformInputContext(); if (ic) ic->update(queries); if (queries & Qt::ImCursorRectangle) emit cursorRectangleChanged(); }
void QMirClientInput::dispatchKeyEvent(QMirClientWindow *window, const MirInputEvent *event) { const MirKeyboardEvent *key_event = mir_input_event_get_keyboard_event(event); ulong timestamp = mir_input_event_get_event_time(event) / 1000000; xkb_keysym_t xk_sym = mir_keyboard_event_key_code(key_event); quint32 scan_code = mir_keyboard_event_scan_code(key_event); quint32 native_modifiers = mir_keyboard_event_modifiers(key_event); // Key modifier and unicode index mapping. auto modifiers = qt_modifiers_from_mir(native_modifiers); MirKeyboardAction action = mir_keyboard_event_action(key_event); QEvent::Type keyType = action == mir_keyboard_action_up ? QEvent::KeyRelease : QEvent::KeyPress; if (action == mir_keyboard_action_down) mLastInputWindow = window; QString text; QVarLengthArray<char, 32> chars(32); { int result = xkb_keysym_to_utf8(xk_sym, chars.data(), chars.size()); if (result > 0) { text = QString::fromUtf8(chars.constData()); } } int sym = translateKeysym(xk_sym, text); bool is_auto_rep = action == mir_keyboard_action_repeat; QPlatformInputContext *context = QGuiApplicationPrivate::platformIntegration()->inputContext(); if (context) { QKeyEvent qKeyEvent(keyType, sym, modifiers, scan_code, xk_sym, native_modifiers, text, is_auto_rep); qKeyEvent.setTimestamp(timestamp); if (context->filterEvent(&qKeyEvent)) { qCDebug(mirclient, "key event filtered out by input context"); return; } } QWindowSystemInterface::handleExtendedKeyEvent(window->window(), timestamp, keyType, sym, modifiers, scan_code, xk_sym, native_modifiers, text, is_auto_rep); }