Skip to content

Commit 091be90

Browse files
committed
sync close request with the event loop on linux
1 parent 0a7e03c commit 091be90

File tree

1 file changed

+7
-13
lines changed

1 file changed

+7
-13
lines changed

src/x11/window.rs

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -31,19 +31,13 @@ use crate::x11::visual_info::WindowVisualConfig;
3131

3232
pub struct WindowHandle {
3333
raw_window_handle: Option<RawWindowHandle>,
34-
close_requested: Arc<AtomicBool>,
34+
close_requested: mpsc::SyncSender<()>,
3535
is_open: Arc<AtomicBool>,
3636
}
3737

3838
impl WindowHandle {
3939
pub fn close(&mut self) {
40-
if self.raw_window_handle.take().is_some() {
41-
// FIXME: This will need to be changed from just setting an atomic to somehow
42-
// synchronizing with the window being closed (using a synchronous channel, or
43-
// by joining on the event loop thread).
44-
45-
self.close_requested.store(true, Ordering::Relaxed);
46-
}
40+
self.close_requested.send(()).ok();
4741
}
4842

4943
pub fn is_open(&self) -> bool {
@@ -64,26 +58,26 @@ unsafe impl HasRawWindowHandle for WindowHandle {
6458
}
6559

6660
pub(crate) struct ParentHandle {
67-
close_requested: Arc<AtomicBool>,
61+
close_requested: mpsc::Receiver<()>,
6862
is_open: Arc<AtomicBool>,
6963
}
7064

7165
impl ParentHandle {
7266
pub fn new() -> (Self, WindowHandle) {
73-
let close_requested = Arc::new(AtomicBool::new(false));
67+
let (close_sender, close_receiver) = mpsc::sync_channel(0);
7468
let is_open = Arc::new(AtomicBool::new(true));
7569

7670
let handle = WindowHandle {
7771
raw_window_handle: None,
78-
close_requested: Arc::clone(&close_requested),
72+
close_requested: close_sender,
7973
is_open: Arc::clone(&is_open),
8074
};
8175

82-
(Self { close_requested, is_open }, handle)
76+
(Self { close_requested: close_receiver, is_open }, handle)
8377
}
8478

8579
pub fn parent_did_drop(&self) -> bool {
86-
self.close_requested.load(Ordering::Relaxed)
80+
self.close_requested.try_recv().is_ok()
8781
}
8882
}
8983

0 commit comments

Comments
 (0)