Skip to content

Commit

Permalink
set client preedit (#12)
Browse files Browse the repository at this point in the history
  • Loading branch information
eagleoflqj authored Jan 17, 2025
1 parent cf911b4 commit 2e41484
Show file tree
Hide file tree
Showing 9 changed files with 60 additions and 19 deletions.
2 changes: 1 addition & 1 deletion entry/src/main/cpp/fcitx5
Submodule fcitx5 updated 55 files
+1 −0 .clang-format
+15 −5 src/frontend/xim/xim.cpp
+2 −2 src/lib/fcitx-config/rawconfig.h
+15 −22 src/lib/fcitx-utils/cutf8.h
+2 −2 src/lib/fcitx-utils/dbus/variant.h
+16 −22 src/lib/fcitx-utils/i18n.h
+2 −0 src/lib/fcitx-utils/keysymgen.h
+3 −3 src/lib/fcitx-utils/semver.cpp
+1 −2 src/lib/fcitx-utils/stringutils.h
+3 −1 src/lib/fcitx-wayland/blur/org_kde_kwin_blur_manager.cpp
+3 −1 src/lib/fcitx-wayland/core/wl_buffer.cpp
+6 −2 src/lib/fcitx-wayland/core/wl_callback.cpp
+3 −1 src/lib/fcitx-wayland/core/wl_compositor.cpp
+9 −3 src/lib/fcitx-wayland/core/wl_data_device.cpp
+3 −1 src/lib/fcitx-wayland/core/wl_data_device_manager.cpp
+9 −3 src/lib/fcitx-wayland/core/wl_data_offer.cpp
+18 −6 src/lib/fcitx-wayland/core/wl_data_source.cpp
+9 −3 src/lib/fcitx-wayland/core/wl_keyboard.cpp
+9 −3 src/lib/fcitx-wayland/core/wl_output.cpp
+21 −7 src/lib/fcitx-wayland/core/wl_pointer.cpp
+9 −3 src/lib/fcitx-wayland/core/wl_registry.cpp
+6 −2 src/lib/fcitx-wayland/core/wl_seat.cpp
+3 −1 src/lib/fcitx-wayland/core/wl_shell.cpp
+12 −4 src/lib/fcitx-wayland/core/wl_shell_surface.cpp
+6 −2 src/lib/fcitx-wayland/core/wl_shm.cpp
+18 −6 src/lib/fcitx-wayland/core/wl_touch.cpp
+3 −1 src/lib/fcitx-wayland/fractional-scale-v1/wp_fractional_scale_v1.cpp
+9 −3 src/lib/fcitx-wayland/input-method-v2/zwp_input_method_keyboard_grab_v2.cpp
+21 −7 src/lib/fcitx-wayland/input-method-v2/zwp_input_method_v2.cpp
+3 −1 src/lib/fcitx-wayland/input-method-v2/zwp_input_popup_surface_v2.cpp
+3 −1 src/lib/fcitx-wayland/input-method-v2/zwp_virtual_keyboard_manager_v1.cpp
+18 −6 src/lib/fcitx-wayland/input-method/zwp_input_method_context_v1.cpp
+3 −1 src/lib/fcitx-wayland/input-method/zwp_input_method_v1.cpp
+3 −1 src/lib/fcitx-wayland/input-method/zwp_input_panel_surface_v1.cpp
+3 −1 src/lib/fcitx-wayland/input-method/zwp_input_panel_v1.cpp
+48 −16 src/lib/fcitx-wayland/plasma-window-management/org_kde_plasma_window.cpp
+18 −6 src/lib/fcitx-wayland/plasma-window-management/org_kde_plasma_window_management.cpp
+12 −4 src/lib/fcitx-wayland/tablet-v2/zwp_tablet_pad_group_v2.cpp
+12 −4 src/lib/fcitx-wayland/tablet-v2/zwp_tablet_pad_ring_v2.cpp
+12 −4 src/lib/fcitx-wayland/tablet-v2/zwp_tablet_pad_strip_v2.cpp
+15 −5 src/lib/fcitx-wayland/tablet-v2/zwp_tablet_pad_v2.cpp
+54 −18 src/lib/fcitx-wayland/tablet-v2/zwp_tablet_tool_v2.cpp
+15 −5 src/lib/fcitx-wayland/tablet-v2/zwp_tablet_v2.cpp
+3 −1 src/lib/fcitx-wayland/wlr-data-control/zwlr_data_control_device_v1.cpp
+3 −1 src/lib/fcitx-wayland/wlr-data-control/zwlr_data_control_offer_v1.cpp
+6 −2 src/lib/fcitx-wayland/wlr-data-control/zwlr_data_control_source_v1.cpp
+15 −5 src/lib/fcitx-wayland/wlr-foreign-toplevel-management-unstable-v1/zwlr_foreign_toplevel_handle_v1.cpp
+6 −2 src/lib/fcitx-wayland/wlr-foreign-toplevel-management-unstable-v1/zwlr_foreign_toplevel_manager_v1.cpp
+3 −4 src/lib/fcitx/addoninstance.h
+2 −3 src/lib/fcitx/surroundingtext.h
+12 −8 src/modules/notificationitem/notificationitem.cpp
+42 −5 src/modules/unicode/unicode.cpp
+2 −4 test/testlibrary.cpp
+6 −1 test/testunicode.cpp
+10 −4 test/testxim.cpp
2 changes: 1 addition & 1 deletion entry/src/main/cpp/fcitx5-chinese-addons
Submodule fcitx5-chinese-addons updated 14 files
+52 −52 im/pinyin/pinyin.cpp
+19 −16 im/pinyin/pinyin.h
+4 −2 im/table/engine.h
+103 −101 po/ca.po
+103 −102 po/da.po
+103 −101 po/de.po
+103 −101 po/fcitx5-chinese-addons.pot
+103 −101 po/he.po
+103 −101 po/ja.po
+104 −102 po/ko.po
+108 −104 po/ru.po
+104 −102 po/zh_CN.po
+104 −102 po/zh_TW.po
+60 −1 test/testpinyin.cpp
11 changes: 8 additions & 3 deletions entry/src/main/cpp/harmonyfrontend/harmonyfrontend.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}

Expand Down
2 changes: 1 addition & 1 deletion entry/src/main/cpp/harmonyfrontend/harmonyfrontend.h
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
4 changes: 3 additions & 1 deletion entry/src/main/cpp/napi_init.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,9 @@ API(init) {
}

API(focusIn) {
fcitx::focusIn();
GET_ARGS(1)
GET_BOOL(clientPreedit, 0)
fcitx::focusIn(clientPreedit);
return {};
}

Expand Down
4 changes: 2 additions & 2 deletions entry/src/main/cpp/src/fcitx.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand Down
2 changes: 1 addition & 1 deletion entry/src/main/cpp/src/fcitx.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
2 changes: 1 addition & 1 deletion entry/src/main/cpp/types/libentry/Index.d.ts
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { inputMethodEngine } from '@kit.IMEKit'
import type { InputMethodExtensionContext} from '@kit.IMEKit'
import type { InputMethodExtensionContext } from '@kit.IMEKit'
import { display } from '@kit.ArkUI';
import { KeyCode } from '@kit.InputKit';
import fcitx from 'libentry.so';
Expand All @@ -12,6 +12,8 @@ export class KeyboardController {
private panel: inputMethodEngine.Panel | undefined = undefined;
private textInputClient: inputMethodEngine.InputClient | undefined = undefined;
private keyboardController: inputMethodEngine.KeyboardController | undefined = undefined;
private preedit = ''
private preeditIndex = 0

constructor() {
}
Expand All @@ -34,11 +36,45 @@ export class KeyboardController {
}
}

private getCursor() {
if (!this.textInputClient) {
return -1
}
let step = 1024
while (true) {
const text = this.textInputClient.getForwardSync(step)
if (text.length < step) {
return text.length
}
step *= 2
}
}

private processResult(res: ReturnType<typeof fcitx.processKey>): boolean {
if (!res.accepted) {
return false
}
if (res.commit) {
if (this.preedit) {
this.textInputClient?.setPreviewTextSync('',
{ start: this.preeditIndex, end: this.preeditIndex + this.preedit.length })
this.textInputClient?.finishTextPreviewSync()
}
this.insertText(res.commit)
this.preedit = ''
this.preeditIndex = this.getCursor()
}
return res.accepted
const start = this.preedit ? this.preeditIndex : this.getCursor()
const end = start + this.preedit.length
if (this.preedit || res.preedit) {
this.textInputClient?.setPreviewTextSync(res.preedit, { start, end })
if (!res.preedit) {
this.textInputClient?.finishTextPreviewSync()
}
}
this.preedit = res.preedit
this.preeditIndex = start
return true
}

public handleKey(key: string, keyCode?: number): void {
Expand Down Expand Up @@ -80,11 +116,8 @@ export class KeyboardController {
};
ability.createPanel(this.ctx, panelInfo).then(async (inputPanel: inputMethodEngine.Panel) => {
this.panel = inputPanel;
if (this.panel) {
await this.panel.resize(dWidth, keyHeight);
await this.panel.moveTo(0, nonBarPosition);
await this.panel.setUiContent('InputMethodExtensionAbility/pages/Index');
}
await this.panel.resize(dWidth, keyHeight);
await this.panel.setUiContent('InputMethodExtensionAbility/pages/Index');
});
}

Expand All @@ -105,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')
Expand Down

0 comments on commit 2e41484

Please sign in to comment.