Skip to main content

ferroui_base/input/
input_method.rs

1use super::text_input::TextInputMethodClientRequeryRequestedEventArgs;
2use super::InputElement;
3use crate::interactivity::{Interactive, RoutedEvent, RoutedEventArgs, RoutedEventHandlerToken, RoutingStrategies};
4use crate::{ferro_property, ferro_routed_event, AttachedProperty, FerroProperty};
5
6/// Defines the attached property and the routed event that connect an
7/// input element to the input method of the platform.
8pub struct InputMethod;
9
10crate::ferro_static_type!(InputMethod);
11
12crate::ferro_properties! { impl InputMethod {
13    ferro_property!(
14        /// A dependency property that enables alternative text inputs.
15        pub fn is_input_method_enabled_property() -> AttachedProperty<bool> {
16            FerroProperty::register_attached::<InputMethod, InputElement, _>("IsInputMethodEnabled", true)
17        }
18    );
19} }
20
21impl InputMethod {
22    /// Setter for the `IsInputMethodEnabled` attached property.
23    pub fn set_is_input_method_enabled(target: &InputElement, value: bool) {
24        target.set_value(Self::is_input_method_enabled_property(), value)
25    }
26
27    /// Getter for the `IsInputMethodEnabled` attached property.
28    pub fn get_is_input_method_enabled(target: &InputElement) -> bool {
29        target.get_value(Self::is_input_method_enabled_property())
30    }
31
32    ferro_routed_event!(
33        /// Defines the `TextInputMethodClientRequeryRequested` event: raise
34        /// it on an element to have the input system query the focused
35        /// element for its text input method client again.
36        pub fn text_input_method_client_requery_requested_event(
37        ) -> RoutedEvent<TextInputMethodClientRequeryRequestedEventArgs> {
38            RoutedEvent::register::<InputElement, _>(
39                "TextInputMethodClientRequeryRequested",
40                RoutingStrategies::BUBBLE,
41            )
42        }
43    );
44
45    /// Adds a handler for the `TextInputMethodClientRequeryRequested`
46    /// attached event.
47    pub fn add_text_input_method_client_requery_requested_handler(
48        element: &Interactive,
49        handler: impl Fn(&Interactive, &RoutedEventArgs) + 'static,
50    ) -> RoutedEventHandlerToken {
51        element.add_handler_as::<RoutedEventArgs, _>(
52            Self::text_input_method_client_requery_requested_event(),
53            handler,
54            RoutingStrategies::DIRECT | RoutingStrategies::BUBBLE,
55            false,
56        )
57    }
58
59    /// Removes a handler for the `TextInputMethodClientRequeryRequested`
60    /// attached event.
61    pub fn remove_text_input_method_client_requery_requested_handler(
62        element: &Interactive,
63        handler: RoutedEventHandlerToken,
64    ) {
65        element.remove_handler(Self::text_input_method_client_requery_requested_event(), handler);
66    }
67}