From 89b80eb00e3ba31041d0ec5243d781cc04d29ad7 Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Fri, 5 Jul 2024 17:31:46 +0200 Subject: [PATCH] API review: move {window,display}_handle_06_rc() into WindowAdapterInternal --- internal/backends/winit/winitwindowadapter.rs | 40 +++++++++---------- internal/core/api.rs | 4 +- internal/core/window.rs | 36 ++++++++--------- 3 files changed, 41 insertions(+), 39 deletions(-) diff --git a/internal/backends/winit/winitwindowadapter.rs b/internal/backends/winit/winitwindowadapter.rs index 6fadf8f90e8..484a1337408 100644 --- a/internal/backends/winit/winitwindowadapter.rs +++ b/internal/backends/winit/winitwindowadapter.rs @@ -874,26 +874,6 @@ impl WindowAdapter for WinitWindowAdapter { fn internal(&self, _: corelib::InternalToken) -> Option<&dyn WindowAdapterInternal> { Some(self) } - - #[cfg(feature = "raw-window-handle-06")] - fn window_handle_06_rc( - &self, - ) -> Result, raw_window_handle::HandleError> { - self.winit_window_or_none - .borrow() - .as_window() - .map_or(Err(raw_window_handle::HandleError::Unavailable), |window| Ok(window)) - } - - #[cfg(feature = "raw-window-handle-06")] - fn display_handle_06_rc( - &self, - ) -> Result, raw_window_handle::HandleError> { - self.winit_window_or_none - .borrow() - .as_window() - .map_or(Err(raw_window_handle::HandleError::Unavailable), |window| Ok(window)) - } } impl WindowAdapterInternal for WinitWindowAdapter { @@ -1027,6 +1007,26 @@ impl WindowAdapterInternal for WinitWindowAdapter { a.unregister_item_tree(component); } } + + #[cfg(feature = "raw-window-handle-06")] + fn window_handle_06_rc( + &self, + ) -> Result, raw_window_handle::HandleError> { + self.winit_window_or_none + .borrow() + .as_window() + .map_or(Err(raw_window_handle::HandleError::Unavailable), |window| Ok(window)) + } + + #[cfg(feature = "raw-window-handle-06")] + fn display_handle_06_rc( + &self, + ) -> Result, raw_window_handle::HandleError> { + self.winit_window_or_none + .borrow() + .as_window() + .map_or(Err(raw_window_handle::HandleError::Unavailable), |window| Ok(window)) + } } impl Drop for WinitWindowAdapter { diff --git a/internal/core/api.rs b/internal/core/api.rs index 7db05cc9abc..2528f51f5d7 100644 --- a/internal/core/api.rs +++ b/internal/core/api.rs @@ -643,7 +643,9 @@ impl Window { pub fn window_handle(&self) -> WindowHandle { let adapter = self.0.window_adapter(); if let Some((window_handle_provider, display_handle_provider)) = - adapter.window_handle_06_rc().ok().zip(adapter.display_handle_06_rc().ok()) + adapter.internal(crate::InternalToken).and_then(|internal| { + internal.window_handle_06_rc().ok().zip(internal.display_handle_06_rc().ok()) + }) { WindowHandle { inner: WindowHandleInner::HandleByRcRWH { diff --git a/internal/core/window.rs b/internal/core/window.rs index 7283289df4a..b9c3a6c6847 100644 --- a/internal/core/window.rs +++ b/internal/core/window.rs @@ -153,24 +153,6 @@ pub trait WindowAdapter { ) -> Result, raw_window_handle_06::HandleError> { Err(raw_window_handle_06::HandleError::NotSupported) } - - /// Re-implement this to support exposing raw window handles (version 0.6). - #[cfg(feature = "raw-window-handle-06")] - fn window_handle_06_rc( - &self, - ) -> Result, raw_window_handle_06::HandleError> - { - Err(raw_window_handle_06::HandleError::NotSupported) - } - - /// Re-implement this to support exposing raw display handles (version 0.6). - #[cfg(feature = "raw-window-handle-06")] - fn display_handle_06_rc( - &self, - ) -> Result, raw_window_handle_06::HandleError> - { - Err(raw_window_handle_06::HandleError::NotSupported) - } } /// Implementation details behind [`WindowAdapter`], but since this @@ -222,6 +204,24 @@ pub trait WindowAdapterInternal { fn color_scheme(&self) -> ColorScheme { ColorScheme::Unknown } + + /// Re-implement this to support exposing raw window handles (version 0.6). + #[cfg(feature = "raw-window-handle-06")] + fn window_handle_06_rc( + &self, + ) -> Result, raw_window_handle_06::HandleError> + { + Err(raw_window_handle_06::HandleError::NotSupported) + } + + /// Re-implement this to support exposing raw display handles (version 0.6). + #[cfg(feature = "raw-window-handle-06")] + fn display_handle_06_rc( + &self, + ) -> Result, raw_window_handle_06::HandleError> + { + Err(raw_window_handle_06::HandleError::NotSupported) + } } /// This is the parameter from [`WindowAdapterInternal::input_method_request()`] which lets the editable text input field