18 case ::ArkUI_KeyCode::ARKUI_KEYCODE_SHIFT_LEFT:
19 case ::ArkUI_KeyCode::ARKUI_KEYCODE_SHIFT_RIGHT:
20 case ::ArkUI_KeyCode::ARKUI_KEYCODE_ALT_LEFT:
21 case ::ArkUI_KeyCode::ARKUI_KEYCODE_ALT_RIGHT:
22 case ::ArkUI_KeyCode::ARKUI_KEYCODE_CTRL_LEFT:
23 case ::ArkUI_KeyCode::ARKUI_KEYCODE_CTRL_RIGHT:
24 case ::ArkUI_KeyCode::ARKUI_KEYCODE_META_LEFT:
25 case ::ArkUI_KeyCode::ARKUI_KEYCODE_META_RIGHT:
26 case ::ArkUI_KeyCode::ARKUI_KEYCODE_CAPS_LOCK:
27 case ::ArkUI_KeyCode::ARKUI_KEYCODE_NUM_LOCK:
37 QtOhos::QThreadSafeRef<QWindow> qWindowRef,
38 QtOhos::QThreadSafeRef<QOhosInputMethodEventHandler> imEventHandlerRef)
40 auto lastNativeKeyEvent = makeEmptyQOhosNativeNodeKeyEvent();
42 return [qWindowRef, imEventHandlerRef, lastNativeKeyEvent](::ArkUI_UIInputEvent *uiInputEvent)
mutable {
43 const auto keyType = QArkUi::callArkUi(
44 Q_OHOS_NAMED_FUNC(::OH_ArkUI_KeyEvent_GetType), uiInputEvent);
45 const auto keyCode = QArkUi::callArkUi(
46 Q_OHOS_NAMED_FUNC(::OH_ArkUI_KeyEvent_GetKeyCode), uiInputEvent);
48 const auto arkuiKeyCode =
static_cast<::ArkUI_KeyCode>(keyCode);
49 auto ohosKeyEvent = makeQOhosNativeNodeKeyEvent(keyType, arkuiKeyCode, readKeyModifiersFromOhosUiInputEvent(uiInputEvent));
50 if (isModifierKey(arkuiKeyCode) && lastNativeKeyEvent->equals(*ohosKeyEvent))
52 lastNativeKeyEvent = ohosKeyEvent;
54 imEventHandlerRef.visitInQtThreadIfAlive(
55 [ohosKeyEvent, qWindowRef](QOhosInputMethodEventHandler &imEventHandler) {
56 imEventHandler.onKeyEvent(*ohosKeyEvent, qWindowRef.data());