Repository: tauri-apps/wry (language: rust)

Issue:
Make `HasRawWindowHandle` public
**Is your feature request related to a problem? Please describe.**

As [README.md](https://github.com/tauri-apps/wry#readme) states, `HasRawWindowHandle` is an important part of public API of this crate.

> The webview requires a running event loop and a window type that implements HasWindowHandle, or a gtk container widget if you need to support X11 and Wayland

However, currently wry doesn't re-export the trait. This means that, if users want to use the trait, they need to manage `raw-window-handle` crate as their dependency keeping the version compatible with wry's `raw-window-handle` dependency.

The latest version of [raw-window-handle](https://crates.io/crates/raw-window-handle) crate is v0.6.0. And wry depends on v0.5. So users can easily install wrong version of the crate by `cargo add` and will face a weird error. Though they are the same name, traits from different versions of same crate are handled as completely different traits.

**Describe the solution you'd like**

To avoid managing the dependency separately in two places, it is a good idea to re-export wry's `HasRawWindowHandle` trait as wry re-exported `tao` as `wry::application` previously.

**Describe alternatives you've considered**

Keep hiding the trait would be an option as strategy of maintenance though I can't come up with any benefits.

**Would you want to assign yourself to implement this feature?**
- [x] Yes
- [ ] No

**Additional context**

N/A




Discussion / hints:

Fix patch:
diff --git a/.changes/rwh.md b/.changes/rwh.md
index b234e348b..2ecfd315e 100644
--- a/.changes/rwh.md
+++ b/.changes/rwh.md
@@ -10,8 +10,9 @@ Refactor new method to take raw window handle instead. Following are APIs got af
   - Position field in `FileDrop` event is now `Position` instead of `PhysicalPosition`. Users need to handle scale factor
   depend on the situation they have.
   - `Webview::inner_size` is removed.
+  - [raw-window-handle](https://docs.rs/raw-window-handle/latest/raw_window_handle/) crate is re-exported as `wry::raw_window_handle`.
 
 This also means that we removed `tao` as a dependency completely which required some changes to the Android backend:
   - We exposed the `android_setup` function that needs to be called once to setup necessary logic.
   - Previously the `android_binding!` had internal call to `tao::android_binding` but now that `tao` has been removed,sa
-    the macro signature has changed and you now need to call `tao::android_binding` yourself, checkout the crate documentation for more information.  
\ No newline at end of file
+    the macro signature has changed and you now need to call `tao::android_binding` yourself, checkout the crate documentation for more information.  
diff --git a/README.md b/README.md
index de4e55370..d056753b0 100644
--- a/README.md
+++ b/README.md
@@ -18,7 +18,7 @@ Cross-platform WebView rendering library in Rust that supports all major desktop
 ## Overview
 
 WRY connects the web engine on each platform and provides easy to use and unified interface to render WebView.
-The webview requires a running event loop and a window type that implements `HasWindowHandle`,
+The webview requires a running event loop and a window type that implements `HasRawWindowHandle`,
 or a gtk container widget if you need to support X11 and Wayland.
 You can use a windowing library like `tao` or `winit`.
 
diff --git a/src/lib.rs b/src/lib.rs
index 98dc32c5c..26d46ae7a 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -6,16 +6,16 @@
 
 //! Wry is a Cross-platform WebView rendering library.
 //!
-//! The webview requires a running event loop and a window type that implements [`HasWindowHandle`],
+//! The webview requires a running event loop and a window type that implements [`HasRawWindowHandle`],
 //! or a gtk container widget if you need to support X11 and Wayland.
 //! You can use a windowing library like [`tao`] or [`winit`].
 //!
 //! ## Examples
 //!
-//! This example leverages the [`HasWindowHandle`] and supports Windows, macOS, iOS, Android and Linux (X11 Only)
+//! This example leverages the [`HasRawWindowHandle`] and supports Windows, macOS, iOS, Android and Linux (X11 Only)
 //!
 //! ```no_run
-//! use wry::WebViewBuilder;
+//! use wry::{WebViewBuilder, raw_window_handle};
 //!
 //! # struct T;
 //! # unsafe impl raw_window_handle::HasRawWindowHandle for T {
@@ -67,7 +67,7 @@
 //! macOS, Windows and Linux (X11 Only).
 //!
 //! ```no_run
-//! use wry::WebViewBuilder;
+//! use wry::{WebViewBuilder, raw_window_handle};
 //!
 //! # struct T;
 //! # unsafe impl raw_window_handle::HasRawWindowHandle for T {
@@ -198,6 +198,8 @@ use android::*;
   target_os = "openbsd"
 ))]
 pub(crate) mod webkitgtk;
+/// Re-exported [raw-window-handle](https://docs.rs/raw-window-handle/latest/raw_window_handle/) crate.
+pub use raw_window_handle;
 use raw_window_handle::HasRawWindowHandle;
 #[cfg(any(
   target_os = "linux",
@@ -725,7 +727,7 @@ impl<'a> WebViewBuilder<'a> {
   /// # Examples
   ///
   /// ```no_run
-  /// use wry::WebViewBuilder;
+  /// use wry::{WebViewBuilder, raw_window_handle};
   ///
   /// # struct T;
   /// # unsafe impl raw_window_handle::HasRawWindowHandle for T {
@@ -1184,7 +1186,7 @@ pub struct WebView {
 }
 
 impl WebView {
-  /// Create a [`WebView`] from from a type that implements [`HasWindowHandle`].
+  /// Create a [`WebView`] from from a type that implements [`HasRawWindowHandle`].
   /// Note that calling this directly loses
   /// abilities to initialize scripts, add ipc handler, and many more before starting WebView. To
   /// benefit from above features, create a [`WebViewBuilder`] instead.


Test patch: