From cf77cfa2e03906ab8501d19ea1bb27c6457cb87a Mon Sep 17 00:00:00 2001
From: Adrien Prokopowicz <6529475+prokopyl@users.noreply.github.com>
Date: Sat, 11 Jul 2026 05:20:47 +0200
Subject: [PATCH 1/6] X11 impl
---
src/platform/x11/window.rs | 12 +++++++-----
src/window.rs | 4 ++--
2 files changed, 9 insertions(+), 7 deletions(-)
diff --git a/src/platform/x11/window.rs b/src/platform/x11/window.rs
index 43245e2f..de97ef78 100644
--- a/src/platform/x11/window.rs
+++ b/src/platform/x11/window.rs
@@ -51,16 +51,18 @@ impl WindowHandle {
});
}
- pub fn close(&self) {
+ pub fn is_open(&self) -> bool {
+ self.is_open.load(Ordering::Relaxed)
+ }
+}
+
+impl Drop for WindowHandle {
+ fn drop(&mut self) {
self.close_requested.store(true, Ordering::Relaxed);
if let Some(event_loop) = self.event_loop_handle.take() {
let _ = event_loop.join();
}
}
-
- pub fn is_open(&self) -> bool {
- self.is_open.load(Ordering::Relaxed)
- }
}
pub(crate) struct ParentHandle {
diff --git a/src/window.rs b/src/window.rs
index 240092d8..fc44bdc3 100644
--- a/src/window.rs
+++ b/src/window.rs
@@ -20,8 +20,8 @@ impl WindowHandle {
}
/// Close the window
- pub fn close(&self) {
- self.window_handle.close();
+ pub fn close(self) {
+ drop(self)
}
/// Returns `true` if the window is still open, and returns `false`
From b609b95c91c9fe2667e1c4bdad9e5e5644964f4e Mon Sep 17 00:00:00 2001
From: Adrien Prokopowicz <6529475+prokopyl@users.noreply.github.com>
Date: Sat, 11 Jul 2026 05:24:56 +0200
Subject: [PATCH 2/6] Win32 impl
---
src/platform/win/window.rs | 30 +++++++++++++++---------------
1 file changed, 15 insertions(+), 15 deletions(-)
diff --git a/src/platform/win/window.rs b/src/platform/win/window.rs
index dbfc32e3..ef1ece5e 100644
--- a/src/platform/win/window.rs
+++ b/src/platform/win/window.rs
@@ -4,11 +4,11 @@ use windows_sys::Win32::{
UI::{
Controls::WM_MOUSELEAVE,
WindowsAndMessaging::{
- PostMessageW, HTCLIENT, WHEEL_DELTA, WM_CHAR, WM_CLOSE, WM_DPICHANGED,
- WM_INPUTLANGCHANGE, WM_KEYDOWN, WM_KEYUP, WM_KILLFOCUS, WM_LBUTTONDOWN, WM_LBUTTONUP,
- WM_MBUTTONDOWN, WM_MBUTTONUP, WM_MOUSEHWHEEL, WM_MOUSEMOVE, WM_MOUSEWHEEL,
- WM_RBUTTONDOWN, WM_RBUTTONUP, WM_SETCURSOR, WM_SETFOCUS, WM_SIZE, WM_SYSCHAR,
- WM_SYSKEYDOWN, WM_SYSKEYUP, WM_TIMER, WM_USER, WM_XBUTTONDOWN, WM_XBUTTONUP,
+ HTCLIENT, WHEEL_DELTA, WM_CHAR, WM_CLOSE, WM_DPICHANGED, WM_INPUTLANGCHANGE,
+ WM_KEYDOWN, WM_KEYUP, WM_KILLFOCUS, WM_LBUTTONDOWN, WM_LBUTTONUP, WM_MBUTTONDOWN,
+ WM_MBUTTONUP, WM_MOUSEHWHEEL, WM_MOUSEMOVE, WM_MOUSEWHEEL, WM_RBUTTONDOWN,
+ WM_RBUTTONUP, WM_SETCURSOR, WM_SETFOCUS, WM_SIZE, WM_SYSCHAR, WM_SYSKEYDOWN,
+ WM_SYSKEYUP, WM_TIMER, WM_USER, WM_XBUTTONDOWN, WM_XBUTTONUP,
},
},
};
@@ -50,7 +50,7 @@ const WIN_FRAME_TIMER: NonZeroUsize = match NonZeroUsize::new(4242) {
};
pub struct WindowHandle {
- hwnd: Cell