1#[cfg(all(
15 feature = "accesskit_unix",
16 any(
17 target_os = "linux",
18 target_os = "dragonfly",
19 target_os = "freebsd",
20 target_os = "netbsd",
21 target_os = "openbsd"
22 ),
23 not(feature = "async-io"),
24 not(feature = "tokio")
25))]
26compile_error!("Either \"async-io\" (default) or \"tokio\" feature must be enabled.");
27
28#[cfg(all(
29 feature = "accesskit_unix",
30 any(
31 target_os = "linux",
32 target_os = "dragonfly",
33 target_os = "freebsd",
34 target_os = "netbsd",
35 target_os = "openbsd"
36 ),
37 feature = "async-io",
38 feature = "tokio"
39))]
40compile_error!(
41 "Both \"async-io\" (default) and \"tokio\" features cannot be enabled at the same time."
42);
43
44#[cfg(all(not(feature = "rwh_05"), not(feature = "rwh_06")))]
45compile_error!("Either \"rwh_06\" (default) or \"rwh_05\" feature must be enabled.");
46
47#[cfg(all(feature = "rwh_05", feature = "rwh_06"))]
48compile_error!(
49 "Both \"rwh_06\" (default) and \"rwh_05\" features cannot be enabled at the same time."
50);
51
52use accesskit::{ActionHandler, ActionRequest, ActivationHandler, DeactivationHandler, TreeUpdate};
53use winit::{
54 event::WindowEvent as WinitWindowEvent,
55 event_loop::EventLoopProxy,
56 window::{Window, WindowId},
57};
58
59#[cfg(feature = "rwh_05")]
60#[allow(unused)]
61use rwh_05 as raw_window_handle;
62#[cfg(feature = "rwh_06")]
63#[allow(unused)]
64use rwh_06 as raw_window_handle;
65
66mod platform_impl;
67
68#[derive(Debug)]
69pub struct Event {
70 pub window_id: WindowId,
71 pub window_event: WindowEvent,
72}
73
74#[derive(Debug)]
75pub enum WindowEvent {
76 InitialTreeRequested,
77 ActionRequested(ActionRequest),
78 AccessibilityDeactivated,
79}
80
81pub struct Adapter {
82 inner: platform_impl::Adapter,
83}
84
85impl Adapter {
86 pub fn with_direct_handlers(
100 window: &dyn Window,
101 activation_handler: impl 'static + ActivationHandler + Send,
102 action_handler: impl 'static + ActionHandler + Send,
103 deactivation_handler: impl 'static + DeactivationHandler + Send,
104 ) -> Self {
105 let inner = platform_impl::Adapter::new(
106 window,
107 activation_handler,
108 action_handler,
109 deactivation_handler,
110 );
111 Self { inner }
112 }
113
114 pub fn process_event(&mut self, window: &dyn Window, event: &WinitWindowEvent) {
119 self.inner.process_event(window, event);
120 }
121
122 pub fn update_if_active(&mut self, updater: impl FnOnce() -> TreeUpdate) {
129 self.inner.update_if_active(updater);
130 }
131}