Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions crates/ability/src/input/ime.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ type ImeCallback = (
ThreadsafeFunction<String, (), String, Status, false>,
ThreadsafeFunction<u32, (), u32, Status, false>,
ThreadsafeFunction<i32, (), i32, Status, false>,
ThreadsafeFunction<i32, (), i32, Status, false>,
);

pub fn ime_ts_fn(env: &Env, app: OpenHarmonyApp) -> Result<ImeCallback> {
Expand Down Expand Up @@ -67,9 +68,27 @@ pub fn ime_ts_fn(env: &Env, app: OpenHarmonyApp) -> Result<ImeCallback> {
.callee_handled::<false>()
.build()?;

let on_ime_enter_app = app.clone();
let on_ime_enter_callback: Function<i32, ()> =
env.create_function_from_closure("on_ime_enter_callback", move |ctx| {
let value = ctx.first_arg::<i32>().unwrap();
if let Some(ref mut h) = *on_ime_enter_app.event_loop.borrow_mut() {
h(Event::Input(InputEvent::ImeEvent(ImeEvent::EnterEvent(
value,
))))
}
Ok(())
})?;

let on_ime_enter_callback_tsfn = on_ime_enter_callback
.build_threadsafe_function()
.callee_handled::<false>()
.build()?;

Ok((
insert_text_callback_tsfn,
on_ime_hide_callback_tsfn,
on_backspace_callback_tsfn,
on_ime_enter_callback_tsfn,
))
}
2 changes: 2 additions & 0 deletions crates/ability/src/input/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ pub enum ImeEvent {
TextInputEvent(TextInputEventData),
BackspaceEvent(i32),
ImeStatusEvent(KeyboardStatus),
EnterEvent(i32),
}

impl Debug for ImeEvent {
Expand All @@ -38,6 +39,7 @@ impl Debug for ImeEvent {
ImeEvent::TextInputEvent(data) => write!(f, "TextInputEvent: {:?}", data),
ImeEvent::BackspaceEvent(len) => write!(f, "BackspaceEvent: delete length is {}", len),
ImeEvent::ImeStatusEvent(status) => write!(f, "ImeStatusEvent: {:?}", status),
ImeEvent::EnterEvent(key) => write!(f, "EnterEvent: {:?}", key),
}
}
}
11 changes: 9 additions & 2 deletions crates/ability/src/render/xcomponent.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,12 @@ pub fn render(
let insert_text_app = app.clone();
let redraw_app = app.clone();

let (insert_text_callback_tsfn, on_ime_hide_callback_tsfn, on_backspace_callback_tsfn) =
input::ime_ts_fn(env, app.clone())?;
let (
insert_text_callback_tsfn,
on_ime_hide_callback_tsfn,
on_backspace_callback_tsfn,
on_ime_enter_callback_tsfn,
) = input::ime_ts_fn(env, app.clone())?;

xcomponent.on_surface_created(move |xc_raw, win| {
{
Expand Down Expand Up @@ -72,6 +76,9 @@ pub fn render(
b_ime.on_backspace(|len| {
on_backspace_callback_tsfn.call(len, NonBlocking);
});
b_ime.on_enter(|key| {
on_ime_enter_callback_tsfn.call(key as i32, NonBlocking);
});
}

{
Expand Down