mirror of
https://github.com/rust-windowing/winit.git
synced 2026-08-30 13:20:06 -04:00
On Wayland, fix WindowEvent::Destroyed delivery
This commit is contained in:
@@ -12,6 +12,7 @@ Unreleased` header.
|
|||||||
# Unreleased
|
# Unreleased
|
||||||
|
|
||||||
- On Web, fix context menu not being disabled by `with_prevent_default(true)`.
|
- On Web, fix context menu not being disabled by `with_prevent_default(true)`.
|
||||||
|
- On Wayland, fix `WindowEvent::Destroyed` not being delivered after destroying window.
|
||||||
|
|
||||||
# 0.29.5
|
# 0.29.5
|
||||||
|
|
||||||
|
|||||||
@@ -467,44 +467,44 @@ impl<T: 'static> EventLoop<T> {
|
|||||||
});
|
});
|
||||||
|
|
||||||
for window_id in window_ids.drain(..) {
|
for window_id in window_ids.drain(..) {
|
||||||
let request_redraw = self.with_state(|state| {
|
let event = self.with_state(|state| {
|
||||||
let window_requests = state.window_requests.get_mut();
|
let window_requests = state.window_requests.get_mut();
|
||||||
if window_requests.get(&window_id).unwrap().take_closed() {
|
if window_requests.get(&window_id).unwrap().take_closed() {
|
||||||
mem::drop(window_requests.remove(&window_id));
|
mem::drop(window_requests.remove(&window_id));
|
||||||
mem::drop(state.windows.get_mut().remove(&window_id));
|
mem::drop(state.windows.get_mut().remove(&window_id));
|
||||||
false
|
return Some(WindowEvent::Destroyed);
|
||||||
} else {
|
|
||||||
let mut window = state
|
|
||||||
.windows
|
|
||||||
.get_mut()
|
|
||||||
.get_mut(&window_id)
|
|
||||||
.unwrap()
|
|
||||||
.lock()
|
|
||||||
.unwrap();
|
|
||||||
|
|
||||||
if window.frame_callback_state() == FrameCallbackState::Requested {
|
|
||||||
false
|
|
||||||
} else {
|
|
||||||
// Reset the frame callbacks state.
|
|
||||||
window.frame_callback_reset();
|
|
||||||
let mut redraw_requested = window_requests
|
|
||||||
.get(&window_id)
|
|
||||||
.unwrap()
|
|
||||||
.take_redraw_requested();
|
|
||||||
|
|
||||||
// Redraw the frame while at it.
|
|
||||||
redraw_requested |= window.refresh_frame();
|
|
||||||
|
|
||||||
redraw_requested
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let mut window = state
|
||||||
|
.windows
|
||||||
|
.get_mut()
|
||||||
|
.get_mut(&window_id)
|
||||||
|
.unwrap()
|
||||||
|
.lock()
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
if window.frame_callback_state() == FrameCallbackState::Requested {
|
||||||
|
return None;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reset the frame callbacks state.
|
||||||
|
window.frame_callback_reset();
|
||||||
|
let mut redraw_requested = window_requests
|
||||||
|
.get(&window_id)
|
||||||
|
.unwrap()
|
||||||
|
.take_redraw_requested();
|
||||||
|
|
||||||
|
// Redraw the frame while at it.
|
||||||
|
redraw_requested |= window.refresh_frame();
|
||||||
|
|
||||||
|
redraw_requested.then_some(WindowEvent::RedrawRequested)
|
||||||
});
|
});
|
||||||
|
|
||||||
if request_redraw {
|
if let Some(event) = event {
|
||||||
callback(
|
callback(
|
||||||
Event::WindowEvent {
|
Event::WindowEvent {
|
||||||
window_id: crate::window::WindowId(window_id),
|
window_id: crate::window::WindowId(window_id),
|
||||||
event: WindowEvent::RedrawRequested,
|
event,
|
||||||
},
|
},
|
||||||
&self.window_target,
|
&self.window_target,
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user