Skip to main content

freya_components/
integration.rs

1use freya_core::{
2    integration::AppComponent,
3    prelude::*,
4};
5
6pub fn integration(app: AppComponent) -> impl IntoElement {
7    let platform = use_hook(Platform::get);
8
9    let on_global_key_down = move |e: Event<KeyboardEventData>| match e.key {
10        Key::Named(NamedKey::Tab) if e.modifiers == Modifiers::SHIFT => {
11            platform.send(UserEvent::FocusAccessibilityNode(
12                AccessibilityFocusStrategy::Backward(AccessibilityFocusMovement::OutsideGroup),
13            ));
14        }
15        Key::Named(NamedKey::Tab) if e.modifiers.is_empty() => {
16            platform.send(UserEvent::FocusAccessibilityNode(
17                AccessibilityFocusStrategy::Forward(AccessibilityFocusMovement::OutsideGroup),
18            ));
19        }
20        Key::Named(NamedKey::ArrowUp) if e.modifiers.is_empty() => {
21            platform.send(UserEvent::FocusAccessibilityNode(
22                AccessibilityFocusStrategy::Backward(AccessibilityFocusMovement::InsideGroup),
23            ));
24        }
25        Key::Named(NamedKey::ArrowDown) if e.modifiers.is_empty() => {
26            platform.send(UserEvent::FocusAccessibilityNode(
27                AccessibilityFocusStrategy::Forward(AccessibilityFocusMovement::InsideGroup),
28            ));
29        }
30        _ => {}
31    };
32
33    rect().on_global_key_down(on_global_key_down).child(app)
34}