From 8d9d7fa13cee36da477fde82d8fa89718afeb652 Mon Sep 17 00:00:00 2001 From: Qijia Liu Date: Fri, 17 Jan 2025 00:35:45 -0500 Subject: [PATCH] client preedit capability --- entry/src/main/cpp/fcitx5 | 2 +- entry/src/main/cpp/fcitx5-chinese-addons | 2 +- .../src/main/cpp/harmonyfrontend/harmonyfrontend.cpp | 11 ++++++++--- entry/src/main/cpp/harmonyfrontend/harmonyfrontend.h | 2 +- entry/src/main/cpp/napi_init.cpp | 4 +++- entry/src/main/cpp/src/fcitx.cpp | 4 ++-- entry/src/main/cpp/src/fcitx.h | 2 +- entry/src/main/cpp/types/libentry/Index.d.ts | 2 +- .../model/KeyboardController.ts | 3 ++- 9 files changed, 20 insertions(+), 12 deletions(-) diff --git a/entry/src/main/cpp/fcitx5 b/entry/src/main/cpp/fcitx5 index 3214b0c..e787b85 160000 --- a/entry/src/main/cpp/fcitx5 +++ b/entry/src/main/cpp/fcitx5 @@ -1 +1 @@ -Subproject commit 3214b0cb9ad9d1456129f54b7324654b398e03fd +Subproject commit e787b8569ce095ba4b0cd374404a84f45eba8c6b diff --git a/entry/src/main/cpp/fcitx5-chinese-addons b/entry/src/main/cpp/fcitx5-chinese-addons index 6f1e891..83cb9b3 160000 --- a/entry/src/main/cpp/fcitx5-chinese-addons +++ b/entry/src/main/cpp/fcitx5-chinese-addons @@ -1 +1 @@ -Subproject commit 6f1e8917d6c9fa0280dcc38077b759bbdbedea32 +Subproject commit 83cb9b37b355339ab039321dc9ce8d734b7bcdbc diff --git a/entry/src/main/cpp/harmonyfrontend/harmonyfrontend.cpp b/entry/src/main/cpp/harmonyfrontend/harmonyfrontend.cpp index 6bca1fb..f8e7e23 100644 --- a/entry/src/main/cpp/harmonyfrontend/harmonyfrontend.cpp +++ b/entry/src/main/cpp/harmonyfrontend/harmonyfrontend.cpp @@ -17,14 +17,19 @@ InputContextState HarmonyFrontend::keyEvent(const Key &key, bool isRelease) { return ic_->popState(event.accepted()); } -void HarmonyFrontend::focusIn() { ic_->focusIn(); } +void HarmonyFrontend::focusIn(bool clientPreedit) { + CapabilityFlags flags; + if (clientPreedit) { + flags |= CapabilityFlag::Preedit; + } + ic_->setCapabilityFlags(flags); + ic_->focusIn(); +} void HarmonyFrontend::focusOut() { ic_->focusOut(); } HarmonyInputContext::HarmonyInputContext(HarmonyFrontend *frontend, InputContextManager &inputContextManager) : InputContext(inputContextManager, ""), frontend_(frontend) { - CapabilityFlags flags = CapabilityFlag::Preedit; - setCapabilityFlags(flags); created(); } diff --git a/entry/src/main/cpp/harmonyfrontend/harmonyfrontend.h b/entry/src/main/cpp/harmonyfrontend/harmonyfrontend.h index d15c9ce..a8587b5 100644 --- a/entry/src/main/cpp/harmonyfrontend/harmonyfrontend.h +++ b/entry/src/main/cpp/harmonyfrontend/harmonyfrontend.h @@ -23,7 +23,7 @@ class HarmonyFrontend : public AddonInstance { void createInputContext(); InputContextState keyEvent(const Key &key, bool isRelease); - void focusIn(); + void focusIn(bool clientPreedit); void focusOut(); private: diff --git a/entry/src/main/cpp/napi_init.cpp b/entry/src/main/cpp/napi_init.cpp index 296e160..3a0fb03 100644 --- a/entry/src/main/cpp/napi_init.cpp +++ b/entry/src/main/cpp/napi_init.cpp @@ -73,7 +73,9 @@ API(init) { } API(focusIn) { - fcitx::focusIn(); + GET_ARGS(1) + GET_BOOL(clientPreedit, 0) + fcitx::focusIn(clientPreedit); return {}; } diff --git a/entry/src/main/cpp/src/fcitx.cpp b/entry/src/main/cpp/src/fcitx.cpp index 4473c98..778b7ab 100644 --- a/entry/src/main/cpp/src/fcitx.cpp +++ b/entry/src/main/cpp/src/fcitx.cpp @@ -70,8 +70,8 @@ void init(const std::string &bundle, const std::string &resfile) { setInputMethods({"pinyin"}); // XXX: for test only. } -void focusIn() { - with_fcitx([] { frontend->focusIn(); }); +void focusIn(bool clientPreedit) { + with_fcitx([clientPreedit] { frontend->focusIn(clientPreedit); }); } void focusOut() { diff --git a/entry/src/main/cpp/src/fcitx.h b/entry/src/main/cpp/src/fcitx.h index 64f5e6e..45361bf 100644 --- a/entry/src/main/cpp/src/fcitx.h +++ b/entry/src/main/cpp/src/fcitx.h @@ -12,7 +12,7 @@ struct InputContextState { }; void init(const std::string &bundle, const std::string &resfile); -void focusIn(); +void focusIn(bool clientPreedit); void focusOut(); InputContextState processKey(uint32_t unicode, int32_t keyCode, bool isRelease); } // namespace fcitx diff --git a/entry/src/main/cpp/types/libentry/Index.d.ts b/entry/src/main/cpp/types/libentry/Index.d.ts index 833084a..879105e 100644 --- a/entry/src/main/cpp/types/libentry/Index.d.ts +++ b/entry/src/main/cpp/types/libentry/Index.d.ts @@ -1,5 +1,5 @@ export const init: (bundle: string, resfile: string) => void -export const focusIn: () => void +export const focusIn: (clientPreedit: boolean) => void export const focusOut: () => void export const processKey: (unicode: number, keyCode: number, isRelease: boolean) => { commit: string diff --git a/entry/src/main/ets/InputMethodExtensionAbility/model/KeyboardController.ts b/entry/src/main/ets/InputMethodExtensionAbility/model/KeyboardController.ts index b84ec65..71a7a58 100644 --- a/entry/src/main/ets/InputMethodExtensionAbility/model/KeyboardController.ts +++ b/entry/src/main/ets/InputMethodExtensionAbility/model/KeyboardController.ts @@ -138,7 +138,8 @@ export class KeyboardController { console.debug('inputStart') this.textInputClient = textInputClient; this.keyboardController = kbController; - fcitx.focusIn() + const attribute = textInputClient.getEditorAttributeSync() + fcitx.focusIn(attribute.isTextPreviewSupported) }) ability.on('inputStop', () => { console.debug('inputStop')