Skip to content

Commit 2f55bfe

Browse files
authored
chore(deps): update wry to 0.36 (#8795)
* chore(deps): update wry to 0.36 * rwh 0.6 * remove raw_window_handle usage * fix build * fix windows test
1 parent dd7571a commit 2f55bfe

File tree

15 files changed

+134
-67
lines changed

15 files changed

+134
-67
lines changed

.changes/rwh-06.md

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
"tauri": patch:breaking
3+
"tauri-runtime": patch:breaking
4+
"tauri-runtime-wry": patch:breaking
5+
---
6+
7+
Update raw-window-handle to 0.6.

.changes/wry-0.36.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"tauri-runtime-wry": patch:deps
3+
---
4+
5+
Update `wry` to 0.36.

core/tauri-runtime-wry/Cargo.toml

+3-3
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@ edition = { workspace = true }
1313
rust-version = { workspace = true }
1414

1515
[dependencies]
16-
wry = { version = "0.35.2", default-features = false, features = [ "file-drop", "protocol", "os-webview" ] }
17-
tao = { version = "0.25", default-features = false, features = [ "rwh_05", "rwh_06" ] }
16+
wry = { version = "0.36", default-features = false, features = [ "file-drop", "protocol", "os-webview" ] }
17+
tao = { version = "0.25", default-features = false, features = [ "rwh_06" ] }
1818
tauri-runtime = { version = "2.0.0-beta.1", path = "../tauri-runtime" }
1919
tauri-utils = { version = "2.0.0-beta.1", path = "../tauri-utils" }
20-
raw-window-handle = "0.5"
20+
raw-window-handle = "0.6"
2121
http = "0.2"
2222
tracing = { version = "0.1", optional = true }
2323

core/tauri-runtime-wry/src/lib.rs

+23-9
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
html_favicon_url = "https://github.com/tauri-apps/tauri/raw/dev/app-icon.png"
1212
)]
1313

14-
use raw_window_handle::{HasRawDisplayHandle, HasRawWindowHandle, RawDisplayHandle};
14+
use raw_window_handle::{DisplayHandle, HasDisplayHandle, HasWindowHandle};
1515
use tauri_runtime::{
1616
monitor::Monitor,
1717
webview::{DetachedWebview, DownloadEvent, PendingWebview, WebviewIpcHandler},
@@ -1077,8 +1077,8 @@ pub struct GtkBox(pub gtk::Box);
10771077
#[allow(clippy::non_send_fields_in_send_ty)]
10781078
unsafe impl Send for GtkBox {}
10791079

1080-
pub struct RawWindowHandle(pub raw_window_handle::RawWindowHandle);
1081-
unsafe impl Send for RawWindowHandle {}
1080+
pub struct SendRawWindowHandle(pub raw_window_handle::RawWindowHandle);
1081+
unsafe impl Send for SendRawWindowHandle {}
10821082

10831083
#[cfg(target_os = "macos")]
10841084
#[derive(Debug, Clone)]
@@ -1125,7 +1125,7 @@ pub enum WindowMessage {
11251125
target_os = "openbsd"
11261126
))]
11271127
GtkBox(Sender<GtkBox>),
1128-
RawWindowHandle(Sender<RawWindowHandle>),
1128+
RawWindowHandle(Sender<std::result::Result<SendRawWindowHandle, raw_window_handle::HandleError>>),
11291129
Theme(Sender<Theme>),
11301130
// Setters
11311131
Center,
@@ -1400,6 +1400,12 @@ pub struct WryWindowDispatcher<T: UserEvent> {
14001400
#[allow(clippy::non_send_fields_in_send_ty)]
14011401
unsafe impl<T: UserEvent> Sync for WryWindowDispatcher<T> {}
14021402

1403+
fn get_raw_window_handle<T: UserEvent>(
1404+
dispatcher: &WryWindowDispatcher<T>,
1405+
) -> Result<std::result::Result<SendRawWindowHandle, raw_window_handle::HandleError>> {
1406+
window_getter!(dispatcher, WindowMessage::RawWindowHandle)
1407+
}
1408+
14031409
impl<T: UserEvent> WindowDispatch<T> for WryWindowDispatcher<T> {
14041410
type Runtime = Wry<T>;
14051411
type WindowBuilder = WindowBuilderWrapper;
@@ -1531,8 +1537,12 @@ impl<T: UserEvent> WindowDispatch<T> for WryWindowDispatcher<T> {
15311537
window_getter!(self, WindowMessage::GtkBox).map(|w| w.0)
15321538
}
15331539

1534-
fn raw_window_handle(&self) -> Result<raw_window_handle::RawWindowHandle> {
1535-
window_getter!(self, WindowMessage::RawWindowHandle).map(|w| w.0)
1540+
fn window_handle(
1541+
&self,
1542+
) -> std::result::Result<raw_window_handle::WindowHandle<'_>, raw_window_handle::HandleError> {
1543+
get_raw_window_handle(self)
1544+
.map_err(|_| raw_window_handle::HandleError::Unavailable)
1545+
.and_then(|r| r.map(|h| unsafe { raw_window_handle::WindowHandle::borrow_raw(h.0) }))
15361546
}
15371547

15381548
// Setters
@@ -2046,8 +2056,8 @@ impl<T: UserEvent> RuntimeHandle<T> for WryHandle<T> {
20462056
send_user_message(&self.context, Message::Task(Box::new(f)))
20472057
}
20482058

2049-
fn raw_display_handle(&self) -> RawDisplayHandle {
2050-
self.context.main_thread.window_target.raw_display_handle()
2059+
fn display_handle(&self) -> std::result::Result<DisplayHandle, raw_window_handle::HandleError> {
2060+
self.context.main_thread.window_target.display_handle()
20512061
}
20522062

20532063
fn primary_monitor(&self) -> Option<Monitor> {
@@ -2547,7 +2557,11 @@ fn handle_user_message<T: UserEvent>(
25472557
.send(GtkBox(window.default_vbox().unwrap().clone()))
25482558
.unwrap(),
25492559
WindowMessage::RawWindowHandle(tx) => tx
2550-
.send(RawWindowHandle(window.raw_window_handle()))
2560+
.send(
2561+
window
2562+
.window_handle()
2563+
.map(|h| SendRawWindowHandle(h.as_raw())),
2564+
)
25512565
.unwrap(),
25522566
WindowMessage::Theme(tx) => {
25532567
tx.send(map_theme(&window.theme())).unwrap();

core/tauri-runtime/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ serde_json = "1.0"
3131
thiserror = "1.0"
3232
tauri-utils = { version = "2.0.0-beta.1", path = "../tauri-utils" }
3333
http = "0.2.4"
34-
raw-window-handle = "0.5"
34+
raw-window-handle = "0.6"
3535
url = { version = "2" }
3636

3737
[target."cfg(windows)".dependencies.windows]

core/tauri-runtime/src/lib.rs

+5-3
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
)]
1313
#![cfg_attr(docsrs, feature(doc_cfg))]
1414

15-
use raw_window_handle::RawDisplayHandle;
15+
use raw_window_handle::DisplayHandle;
1616
use serde::Deserialize;
1717
use std::{fmt::Debug, sync::mpsc::Sender};
1818
use tauri_utils::{ProgressBarState, Theme};
@@ -233,7 +233,7 @@ pub trait RuntimeHandle<T: UserEvent>: Debug + Clone + Send + Sync + Sized + 'st
233233
/// Run a task on the main thread.
234234
fn run_on_main_thread<F: FnOnce() + Send + 'static>(&self, f: F) -> Result<()>;
235235

236-
fn raw_display_handle(&self) -> RawDisplayHandle;
236+
fn display_handle(&self) -> std::result::Result<DisplayHandle, raw_window_handle::HandleError>;
237237

238238
fn primary_monitor(&self) -> Option<Monitor>;
239239
fn available_monitors(&self) -> Vec<Monitor>;
@@ -525,7 +525,9 @@ pub trait WindowDispatch<T: UserEvent>: Debug + Clone + Send + Sync + Sized + 's
525525
fn default_vbox(&self) -> Result<gtk::Box>;
526526

527527
/// Raw window handle.
528-
fn raw_window_handle(&self) -> Result<raw_window_handle::RawWindowHandle>;
528+
fn window_handle(
529+
&self,
530+
) -> std::result::Result<raw_window_handle::WindowHandle<'_>, raw_window_handle::HandleError>;
529531

530532
/// Returns the current window theme.
531533
fn theme(&self) -> Result<Theme>;

core/tauri/Cargo.toml

+3-3
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ dirs-next = "2.0"
6262
percent-encoding = "2.3"
6363
reqwest = { version = "0.11", default-features = false, features = [ "json", "stream" ] }
6464
bytes = { version = "1", features = [ "serde" ] }
65-
raw-window-handle = "0.5"
65+
raw-window-handle = "0.6"
6666
glob = "0.3"
6767
mime = "0.3"
6868
data-url = { version = "0.3", optional = true }
@@ -86,11 +86,11 @@ webkit2gtk = { version = "=2.0.1", features = [ "v2_38" ] }
8686
embed_plist = "1.2"
8787
cocoa = "0.25"
8888
objc = "0.2"
89-
window-vibrancy = "0.4"
89+
window-vibrancy = "0.5"
9090

9191
[target."cfg(windows)".dependencies]
9292
webview2-com = "0.28"
93-
window-vibrancy = "0.4"
93+
window-vibrancy = "0.5"
9494

9595
[target."cfg(windows)".dependencies.windows]
9696
version = "0.52"

core/tauri/src/app.rs

+11-7
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ use crate::{
2828
use crate::menu::{Menu, MenuEvent};
2929
#[cfg(all(desktop, feature = "tray-icon"))]
3030
use crate::tray::{TrayIcon, TrayIconBuilder, TrayIconEvent, TrayIconId};
31-
use raw_window_handle::HasRawDisplayHandle;
31+
use raw_window_handle::HasDisplayHandle;
3232
use serialize_to_javascript::{default_template, DefaultTemplate, Template};
3333
use tauri_macros::default_runtime;
3434
#[cfg(desktop)]
@@ -1730,15 +1730,19 @@ fn init_app_menu<R: Runtime>(menu: &Menu<R>) -> crate::Result<()> {
17301730
Ok(())
17311731
}
17321732

1733-
unsafe impl<R: Runtime> HasRawDisplayHandle for AppHandle<R> {
1734-
fn raw_display_handle(&self) -> raw_window_handle::RawDisplayHandle {
1735-
self.runtime_handle.raw_display_handle()
1733+
impl<R: Runtime> HasDisplayHandle for AppHandle<R> {
1734+
fn display_handle(
1735+
&self,
1736+
) -> std::result::Result<raw_window_handle::DisplayHandle<'_>, raw_window_handle::HandleError> {
1737+
self.runtime_handle.display_handle()
17361738
}
17371739
}
17381740

1739-
unsafe impl<R: Runtime> HasRawDisplayHandle for App<R> {
1740-
fn raw_display_handle(&self) -> raw_window_handle::RawDisplayHandle {
1741-
self.handle.raw_display_handle()
1741+
impl<R: Runtime> HasDisplayHandle for App<R> {
1742+
fn display_handle(
1743+
&self,
1744+
) -> std::result::Result<raw_window_handle::DisplayHandle<'_>, raw_window_handle::HandleError> {
1745+
self.handle.display_handle()
17421746
}
17431747
}
17441748

core/tauri/src/error.rs

+4
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,10 @@ pub enum Error {
148148
/// Failed to deserialize scope object.
149149
#[error("error deserializing scope: {0}")]
150150
CannotDeserializeScope(Box<dyn std::error::Error + Send + Sync>),
151+
152+
/// Failed to get a raw handle.
153+
#[error(transparent)]
154+
RawHandleError(#[from] raw_window_handle::HandleError),
151155
}
152156

153157
/// `Result<T, ::tauri::Error>`

core/tauri/src/test/mock_runtime.rs

+40-18
Original file line numberDiff line numberDiff line change
@@ -203,17 +203,27 @@ impl<T: UserEvent> RuntimeHandle<T> for MockRuntimeHandle {
203203
self.context.send_message(Message::Task(Box::new(f)))
204204
}
205205

206-
fn raw_display_handle(&self) -> raw_window_handle::RawDisplayHandle {
206+
fn display_handle(
207+
&self,
208+
) -> std::result::Result<raw_window_handle::DisplayHandle<'_>, raw_window_handle::HandleError> {
207209
#[cfg(target_os = "linux")]
208-
return raw_window_handle::RawDisplayHandle::Xlib(raw_window_handle::XlibDisplayHandle::empty());
210+
return Ok(unsafe {
211+
raw_window_handle::DisplayHandle::borrow_raw(raw_window_handle::RawDisplayHandle::Xlib(
212+
raw_window_handle::XlibDisplayHandle::new(None, 0),
213+
))
214+
});
209215
#[cfg(target_os = "macos")]
210-
return raw_window_handle::RawDisplayHandle::AppKit(
211-
raw_window_handle::AppKitDisplayHandle::empty(),
212-
);
216+
return Ok(unsafe {
217+
raw_window_handle::DisplayHandle::borrow_raw(raw_window_handle::RawDisplayHandle::AppKit(
218+
raw_window_handle::AppKitDisplayHandle::new(),
219+
))
220+
});
213221
#[cfg(windows)]
214-
return raw_window_handle::RawDisplayHandle::Windows(
215-
raw_window_handle::WindowsDisplayHandle::empty(),
216-
);
222+
return Ok(unsafe {
223+
raw_window_handle::DisplayHandle::borrow_raw(raw_window_handle::RawDisplayHandle::Windows(
224+
raw_window_handle::WindowsDisplayHandle::new(),
225+
))
226+
});
217227
#[cfg(not(any(target_os = "linux", target_os = "macos", windows)))]
218228
return unimplemented!();
219229
}
@@ -641,19 +651,31 @@ impl<T: UserEvent> WindowDispatch<T> for MockWindowDispatcher {
641651
unimplemented!()
642652
}
643653

644-
fn raw_window_handle(&self) -> Result<raw_window_handle::RawWindowHandle> {
654+
fn window_handle(
655+
&self,
656+
) -> std::result::Result<raw_window_handle::WindowHandle<'_>, raw_window_handle::HandleError> {
645657
#[cfg(target_os = "linux")]
646-
return Ok(raw_window_handle::RawWindowHandle::Xlib(
647-
raw_window_handle::XlibWindowHandle::empty(),
648-
));
658+
return unsafe {
659+
Ok(raw_window_handle::WindowHandle::borrow_raw(
660+
raw_window_handle::RawWindowHandle::Xlib(raw_window_handle::XlibWindowHandle::new(0)),
661+
))
662+
};
649663
#[cfg(target_os = "macos")]
650-
return Ok(raw_window_handle::RawWindowHandle::AppKit(
651-
raw_window_handle::AppKitWindowHandle::empty(),
652-
));
664+
return unsafe {
665+
Ok(raw_window_handle::WindowHandle::borrow_raw(
666+
raw_window_handle::RawWindowHandle::AppKit(raw_window_handle::AppKitWindowHandle::new(
667+
std::ptr::NonNull::from(&()).cast(),
668+
)),
669+
))
670+
};
653671
#[cfg(windows)]
654-
return Ok(raw_window_handle::RawWindowHandle::Win32(
655-
raw_window_handle::Win32WindowHandle::empty(),
656-
));
672+
return unsafe {
673+
Ok(raw_window_handle::WindowHandle::borrow_raw(
674+
raw_window_handle::RawWindowHandle::Win32(raw_window_handle::Win32WindowHandle::new(
675+
std::num::NonZeroIsize::MIN,
676+
)),
677+
))
678+
};
657679
#[cfg(not(any(target_os = "linux", target_os = "macos", windows)))]
658680
return unimplemented!();
659681
}

core/tauri/src/vibrancy/macos.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77

88
use crate::utils::config::WindowEffectsConfig;
99
use crate::window::{Effect, EffectState};
10-
use raw_window_handle::HasRawWindowHandle;
10+
use raw_window_handle::HasWindowHandle;
1111
use window_vibrancy::{NSVisualEffectMaterial, NSVisualEffectState};
1212

13-
pub fn apply_effects(window: impl HasRawWindowHandle, effects: WindowEffectsConfig) {
13+
pub fn apply_effects(window: impl HasWindowHandle, effects: WindowEffectsConfig) {
1414
let WindowEffectsConfig {
1515
effects,
1616
radius,

core/tauri/src/vibrancy/windows.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ use std::ffi::c_void;
1111

1212
use crate::utils::config::WindowEffectsConfig;
1313
use crate::window::{Color, Effect};
14-
use raw_window_handle::HasRawWindowHandle;
14+
use raw_window_handle::HasWindowHandle;
1515
use windows::Win32::Foundation::HWND;
1616

17-
pub fn apply_effects(window: impl HasRawWindowHandle, effects: WindowEffectsConfig) {
17+
pub fn apply_effects(window: impl HasWindowHandle, effects: WindowEffectsConfig) {
1818
let WindowEffectsConfig { effects, color, .. } = effects;
1919
let effect = if let Some(effect) = effects.iter().find(|e| {
2020
matches!(
@@ -47,7 +47,7 @@ pub fn apply_effects(window: impl HasRawWindowHandle, effects: WindowEffectsConf
4747
};
4848
}
4949

50-
pub fn clear_effects(window: impl HasRawWindowHandle) {
50+
pub fn clear_effects(window: impl HasWindowHandle) {
5151
window_vibrancy::clear_blur(&window);
5252
window_vibrancy::clear_acrylic(&window);
5353
window_vibrancy::clear_mica(&window);

core/tauri/src/webview/webview_window.rs

+5-3
Original file line numberDiff line numberDiff line change
@@ -864,9 +864,11 @@ impl<R: Runtime> PartialEq for WebviewWindow<R> {
864864
}
865865
}
866866

867-
unsafe impl<R: Runtime> raw_window_handle::HasRawWindowHandle for WebviewWindow<R> {
868-
fn raw_window_handle(&self) -> raw_window_handle::RawWindowHandle {
869-
self.webview.window().raw_window_handle()
867+
impl<R: Runtime> raw_window_handle::HasWindowHandle for WebviewWindow<R> {
868+
fn window_handle(
869+
&self,
870+
) -> std::result::Result<raw_window_handle::WindowHandle<'_>, raw_window_handle::HandleError> {
871+
self.webview.window().window_handle()
870872
}
871873
}
872874

0 commit comments

Comments
 (0)