fix: ensure adapter is created before window is marked visible
This commit is contained in:
parent
5fa8b72a21
commit
d4b0c0482b
1 changed files with 57 additions and 50 deletions
105
winit/src/lib.rs
105
winit/src/lib.rs
|
|
@ -501,18 +501,26 @@ where
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
let window: Arc<dyn winit::window::Window + 'static> = Arc::from(window);
|
||||||
|
#[cfg(feature = "a11y")]
|
||||||
|
self.init_adapter(event_loop, id, window.clone());
|
||||||
|
|
||||||
self.process_event(
|
self.process_event(
|
||||||
event_loop,
|
event_loop,
|
||||||
Some(Event::WindowCreated {
|
Some(Event::WindowCreated {
|
||||||
id,
|
id,
|
||||||
window: Arc::from(window),
|
window,
|
||||||
exit_on_close_request,
|
exit_on_close_request,
|
||||||
make_visible: visible,
|
make_visible: visible,
|
||||||
on_open,
|
on_open,
|
||||||
resize_border,
|
resize_border,
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
|
#[cfg(feature = "a11y")]
|
||||||
|
self.process_event(
|
||||||
|
event_loop,
|
||||||
|
Some(Event::A11yAdapter(id)),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
Control::Exit => {
|
Control::Exit => {
|
||||||
self.process_event(
|
self.process_event(
|
||||||
|
|
@ -601,50 +609,7 @@ where
|
||||||
}
|
}
|
||||||
#[cfg(feature = "a11y")]
|
#[cfg(feature = "a11y")]
|
||||||
Control::InitAdapter(id, window) => {
|
Control::InitAdapter(id, window) => {
|
||||||
use crate::a11y::*;
|
self.init_adapter(event_loop, id, window);
|
||||||
use iced_accessibility::accesskit::{
|
|
||||||
ActivationHandler, Node, NodeId, Role,
|
|
||||||
Tree, TreeUpdate,
|
|
||||||
};
|
|
||||||
use iced_accessibility::accesskit_winit::Adapter;
|
|
||||||
|
|
||||||
let node_id =
|
|
||||||
iced_runtime::core::id::window_node_id();
|
|
||||||
|
|
||||||
let activation_handler =
|
|
||||||
WinitActivationHandler {
|
|
||||||
proxy: self.control_sender.clone(),
|
|
||||||
title: String::new(),
|
|
||||||
};
|
|
||||||
|
|
||||||
let action_handler = WinitActionHandler {
|
|
||||||
id,
|
|
||||||
proxy: self.control_sender.clone(),
|
|
||||||
};
|
|
||||||
|
|
||||||
let deactivation_handler =
|
|
||||||
WinitDeactivationHandler {
|
|
||||||
proxy: self.control_sender.clone(),
|
|
||||||
};
|
|
||||||
|
|
||||||
_ = self.adapters.insert(
|
|
||||||
id,
|
|
||||||
(
|
|
||||||
node_id,
|
|
||||||
Adapter::with_direct_handlers(
|
|
||||||
event_loop,
|
|
||||||
window.as_ref(),
|
|
||||||
activation_handler,
|
|
||||||
action_handler,
|
|
||||||
deactivation_handler,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
|
|
||||||
self.process_event(
|
|
||||||
event_loop,
|
|
||||||
Some(Event::A11yAdapter(id)),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
Control::Cleanup(id) => {
|
Control::Cleanup(id) => {
|
||||||
_ = self.adapters.remove(&id);
|
_ = self.adapters.remove(&id);
|
||||||
|
|
@ -661,6 +626,51 @@ where
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "a11y")]
|
||||||
|
fn init_adapter(&mut self, event_loop: &(dyn winit::event_loop::ActiveEventLoop + 'static), id: core::window::Id, window: Arc<dyn winit::window::Window + 'static>) {
|
||||||
|
use crate::a11y::*;
|
||||||
|
use iced_accessibility::accesskit::{
|
||||||
|
ActivationHandler, Node, NodeId, Role,
|
||||||
|
Tree, TreeUpdate,
|
||||||
|
};
|
||||||
|
use iced_accessibility::accesskit_winit::Adapter;
|
||||||
|
|
||||||
|
let node_id =
|
||||||
|
iced_runtime::core::id::window_node_id();
|
||||||
|
|
||||||
|
let activation_handler =
|
||||||
|
WinitActivationHandler {
|
||||||
|
proxy: self.control_sender.clone(),
|
||||||
|
title: String::new(),
|
||||||
|
};
|
||||||
|
|
||||||
|
let action_handler = WinitActionHandler {
|
||||||
|
id,
|
||||||
|
proxy: self.control_sender.clone(),
|
||||||
|
};
|
||||||
|
|
||||||
|
let deactivation_handler =
|
||||||
|
WinitDeactivationHandler {
|
||||||
|
proxy: self.control_sender.clone(),
|
||||||
|
};
|
||||||
|
|
||||||
|
_ = self.adapters.insert(
|
||||||
|
id,
|
||||||
|
(
|
||||||
|
node_id,
|
||||||
|
Adapter::with_direct_handlers(
|
||||||
|
event_loop,
|
||||||
|
window.as_ref(),
|
||||||
|
activation_handler,
|
||||||
|
action_handler,
|
||||||
|
deactivation_handler,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(not(target_arch = "wasm32"))]
|
#[cfg(not(target_arch = "wasm32"))]
|
||||||
|
|
@ -842,10 +852,7 @@ async fn run_instance<P>(
|
||||||
on_open,
|
on_open,
|
||||||
resize_border
|
resize_border
|
||||||
} => {
|
} => {
|
||||||
#[cfg(feature = "a11y")]
|
|
||||||
control_sender
|
|
||||||
.start_send(Control::InitAdapter(id, window.clone()))
|
|
||||||
.expect("Send control message");
|
|
||||||
#[cfg(all(feature = "cctk", target_os = "linux"))]
|
#[cfg(all(feature = "cctk", target_os = "linux"))]
|
||||||
platform_specific_handler.send_wayland(
|
platform_specific_handler.send_wayland(
|
||||||
platform_specific::Action::TrackWindow(window.clone(), id),
|
platform_specific::Action::TrackWindow(window.clone(), id),
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue