use crate::{impl_all_event, impl_common_event_deref, impl_multi_event_listener, prelude::*};
use crate::{impl_compose_child_for_listener, impl_listener};
use std::convert::Infallible;
#[derive(Debug)]
pub enum ImePreEdit {
Begin,
PreEdit {
value: String,
cursor: Option<(usize, usize)>,
},
End,
}
#[derive(Debug)]
pub struct ImePreEditEvent {
pub pre_edit: ImePreEdit,
pub common: CommonEvent,
}
impl ImePreEditEvent {
pub(crate) fn new(pre_edit: ImePreEdit, target: WidgetId, wnd: &Window) -> Self {
ImePreEditEvent {
pre_edit,
common: CommonEvent::new(target, wnd.id()),
}
}
}
pub type ImePreEditSubject = MutRefItemSubject<'static, AllImePreEdit, Infallible>;
impl_multi_event_listener! {
"The listener use to listen ime pre edit events.",
ImePreEdit,
"",
ImePreEdit,
"",
ImePreEditCapture
}
impl_common_event_deref!(ImePreEditEvent);
impl_compose_child_for_listener!(ImePreEditListener);