Replace winapi with windows crate and use webview2-com instead of webview2 (#2615)

* Switch to webview2-com version of tao and wry

* Pick up latest branch of TAO and WRY

* Let WRY pick the branch for TAO instead of patch

* Add comment for wry next branch pending merge

* Add changelog

* Revert wry redirect in Cargo.toml

* Use pinned rev for matching PR merge commit
This commit is contained in:
Bill Avery
2021-09-24 02:40:22 -07:00
committed by GitHub
parent 205b0dc8f3
commit bb00d5bd6c
8 changed files with 134 additions and 90 deletions

7
.changes/webview2-com.md Normal file
View File

@@ -0,0 +1,7 @@
---
"tauri": patch
"tauri-runtime": patch
"tauri-runtime-wry": patch
---
Replace all of the `winapi` crate references with the `windows` crate, and replace `webview2` and `webview2-sys` with `webview2-com` and `webview2-com-sys` built with the `windows` crate. This goes along with updates to the TAO and WRY `next` branches.

View File

@@ -13,7 +13,7 @@ readme = "README.md"
[dependencies]
#wry = { version = "0.12", default-features = false, features = [ "file-drop", "protocol" ] }
wry = { git = "https://github.com/tauri-apps/wry", rev = "21692d986138570d2edc31f84bddb442a3c84a9c", default-features = false, features = [ "file-drop", "protocol" ] }
wry = { git = "https://github.com/tauri-apps/wry", rev = "e056fb2a15e29de1b8ed85a548cfeb1f85031357", default-features = false, features = [ "file-drop", "protocol" ] }
tauri-runtime = { version = "0.2.1", path = "../tauri-runtime" }
tauri-utils = { version = "1.0.0-beta.3", path = "../tauri-utils" }
uuid = { version = "0.8.2", features = [ "v4" ] }
@@ -21,7 +21,7 @@ infer = "0.4"
[target."cfg(windows)".dependencies]
ico = "0.1"
winapi = "0.3"
webview2-com = "0.4.0"
[target."cfg(any(target_os = \"linux\", target_os = \"dragonfly\", target_os = \"freebsd\", target_os = \"openbsd\", target_os = \"netbsd\"))".dependencies]
png = "0.16"

View File

@@ -26,7 +26,10 @@ use tauri_runtime::window::MenuEvent;
#[cfg(feature = "system-tray")]
use tauri_runtime::{SystemTray, SystemTrayEvent};
#[cfg(windows)]
use winapi::shared::windef::HWND;
use webview2_com::{
FocusChangedEventHandler,
Windows::Win32::{Foundation::HWND, System::WinRT::EventRegistrationToken},
};
#[cfg(all(feature = "system-tray", target_os = "macos"))]
use wry::application::platform::macos::{SystemTrayBuilderExtMacOS, SystemTrayExtMacOS};
#[cfg(target_os = "linux")]
@@ -1634,25 +1637,34 @@ impl Runtime for Wry {
if let WindowHandle::Webview(ref webview) = webview.inner {
if let Some(controller) = webview.controller() {
let proxy = self.event_loop.create_proxy();
controller
.add_got_focus(move |_| {
let _ = proxy.send_event(Message::Webview(
id,
WebviewMessage::WebviewEvent(WebviewEvent::Focused(true)),
));
Ok(())
})
.unwrap();
let mut token = EventRegistrationToken::default();
unsafe {
controller.add_GotFocus(
FocusChangedEventHandler::create(Box::new(move |_, _| {
let _ = proxy.send_event(Message::Webview(
id,
WebviewMessage::WebviewEvent(WebviewEvent::Focused(true)),
));
Ok(())
})),
&mut token,
)
}
.unwrap();
let proxy = self.event_loop.create_proxy();
controller
.add_lost_focus(move |_| {
let _ = proxy.send_event(Message::Webview(
id,
WebviewMessage::WebviewEvent(WebviewEvent::Focused(false)),
));
Ok(())
})
.unwrap();
unsafe {
controller.add_LostFocus(
FocusChangedEventHandler::create(Box::new(move |_, _| {
let _ = proxy.send_event(Message::Webview(
id,
WebviewMessage::WebviewEvent(WebviewEvent::Focused(false)),
));
Ok(())
})),
&mut token,
)
}
.unwrap();
}
}
}
@@ -2024,7 +2036,7 @@ fn handle_event_loop(
#[cfg(target_os = "macos")]
WindowMessage::NSWindow(tx) => tx.send(NSWindow(window.ns_window())).unwrap(),
#[cfg(windows)]
WindowMessage::Hwnd(tx) => tx.send(Hwnd(window.hwnd() as HWND)).unwrap(),
WindowMessage::Hwnd(tx) => tx.send(Hwnd(HWND(window.hwnd() as _))).unwrap(),
#[cfg(any(
target_os = "linux",
target_os = "dragonfly",

View File

@@ -32,7 +32,7 @@ http-range = "0.1.4"
infer = "0.4"
[target."cfg(windows)".dependencies]
winapi = "0.3"
webview2-com-sys = "0.4.0"
[target."cfg(any(target_os = \"linux\", target_os = \"dragonfly\", target_os = \"freebsd\", target_os = \"openbsd\", target_os = \"netbsd\"))".dependencies]
gtk = { version = "0.14", features = [ "v3_20" ] }

View File

@@ -11,7 +11,7 @@ use std::{fmt::Debug, path::PathBuf, sync::mpsc::Sender};
use uuid::Uuid;
#[cfg(windows)]
use winapi::shared::windef::HWND;
use webview2_com_sys::Windows::Win32::Foundation::HWND;
pub mod http;
/// Create window and system tray menus.

View File

@@ -13,7 +13,7 @@ use serde_json::Value as JsonValue;
use tauri_utils::config::{WindowConfig, WindowUrl};
#[cfg(windows)]
use winapi::shared::windef::HWND;
use webview2_com_sys::Windows::Win32::Foundation::HWND;
use std::{fmt, path::PathBuf};

View File

@@ -526,7 +526,7 @@ impl<R: Runtime> Window<R> {
.window
.dispatcher
.hwnd()
.map(|hwnd| hwnd as *mut _)
.map(|hwnd| hwnd.0 as *mut _)
.map_err(Into::into)
}

View File

@@ -393,37 +393,6 @@ dependencies = [
"objc",
]
[[package]]
name = "com"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5a30a2b2a013da986dc5cc3eda3d19c0d59d53f835be1b2356eb8d00f000c793"
dependencies = [
"com_macros",
]
[[package]]
name = "com_macros"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7606b05842fea68ddcc89e8053b8860ebcb2a0ba8d6abfe3a148e5d5a8d3f0c1"
dependencies = [
"com_macros_support",
"proc-macro2",
"syn 1.0.76",
]
[[package]]
name = "com_macros_support"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "97e9a6d20f4ac8830e309a455d7e9416e65c6af5a97c88c55fbb4c2012e107da"
dependencies = [
"proc-macro2",
"quote 1.0.9",
"syn 1.0.76",
]
[[package]]
name = "concurrent-queue"
version = "1.2.2"
@@ -433,6 +402,12 @@ dependencies = [
"cache-padded",
]
[[package]]
name = "const-sha1"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fb58b6451e8c2a812ad979ed1d83378caa5e927eef2622017a45f251457c2c9d"
[[package]]
name = "constant_time_eq"
version = "0.1.5"
@@ -2853,8 +2828,7 @@ dependencies = [
[[package]]
name = "tao"
version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1aa57de7c282b68f8906278543a724ed8f5a2568f069dd0cc05fc10d1f07036b"
source = "git+https://github.com/tauri-apps/tao?branch=next#e1e9b61993e18422efa7810a17ed1aaa2000621a"
dependencies = [
"bitflags 1.3.2",
"cairo-rs",
@@ -2886,7 +2860,8 @@ dependencies = [
"serde",
"tauri-libappindicator",
"unicode-segmentation",
"winapi",
"webview2-com-sys",
"windows",
"x11-dl",
]
@@ -3022,7 +2997,7 @@ dependencies = [
"tauri-utils",
"thiserror",
"uuid",
"winapi",
"webview2-com-sys",
]
[[package]]
@@ -3036,7 +3011,7 @@ dependencies = [
"tauri-runtime",
"tauri-utils",
"uuid",
"winapi",
"webview2-com",
"wry",
]
@@ -3057,19 +3032,6 @@ dependencies = [
"zstd",
]
[[package]]
name = "tauri-webview2"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7685d17e9007618d13f011f916e28a8830c7108c46cf263bd3ab53a19e1a4fc3"
dependencies = [
"com",
"once_cell",
"webview2-sys",
"widestring",
"winapi",
]
[[package]]
name = "tempfile"
version = "3.2.0"
@@ -3462,13 +3424,38 @@ dependencies = [
]
[[package]]
name = "webview2-sys"
version = "0.1.1"
name = "webview2-com"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "24b7889e893ac4c50d7346356be3ce13a85e56512c38b8fde0526559b8012a4c"
checksum = "f2294dee38668da0d71019097dddc6cef525fde7aa4784243dd83f0752e08aa5"
dependencies = [
"com",
"winapi",
"webview2-com-macros",
"webview2-com-sys",
"windows",
]
[[package]]
name = "webview2-com-macros"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2eba35fdbb8fbc8de7e7479532a356dbbf2754d8a6e9c9fbfa430896cbb1ca89"
dependencies = [
"proc-macro2",
"quote 1.0.9",
"syn 1.0.76",
]
[[package]]
name = "webview2-com-sys"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "14690dcb8b57c5238c4502cfc321f858fa1306edd4109e8e1d7ddee0c29b06a5"
dependencies = [
"regex",
"serde",
"serde_json",
"thiserror",
"windows",
]
[[package]]
@@ -3480,12 +3467,6 @@ dependencies = [
"cc",
]
[[package]]
name = "widestring"
version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c168940144dd21fd8046987c16a46a33d5fc84eec29ef9dcddc2ac9e31526b7c"
[[package]]
name = "wildmatch"
version = "1.1.0"
@@ -3523,6 +3504,51 @@ version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
[[package]]
name = "windows"
version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ef84dd25f4c69a271b1bba394532bf400523b43169de21dfc715e8f8e491053d"
dependencies = [
"const-sha1",
"windows_gen",
"windows_macros",
]
[[package]]
name = "windows_gen"
version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ac7bb21b8ff5e801232b72a6ff554b4cc0cef9ed9238188c3ca78fe3968a7e5d"
dependencies = [
"windows_quote",
"windows_reader",
]
[[package]]
name = "windows_macros"
version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5566b8c51118769e4a9094a688bf1233a3f36aacbfc78f3b15817fe0b6e0442f"
dependencies = [
"syn 1.0.76",
"windows_gen",
"windows_quote",
"windows_reader",
]
[[package]]
name = "windows_quote"
version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4af8236a9493c38855f95cdd11b38b342512a5df4ee7473cffa828b5ebb0e39c"
[[package]]
name = "windows_reader"
version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2c8d5cf83fb08083438c5c46723e6206b2970da57ce314f80b57724439aaacab"
[[package]]
name = "winres"
version = "0.1.11"
@@ -3557,7 +3583,7 @@ dependencies = [
[[package]]
name = "wry"
version = "0.12.2"
source = "git+https://github.com/tauri-apps/wry?rev=21692d986138570d2edc31f84bddb442a3c84a9c#21692d986138570d2edc31f84bddb442a3c84a9c"
source = "git+https://github.com/tauri-apps/wry?rev=e056fb2a15e29de1b8ed85a548cfeb1f85031357#e056fb2a15e29de1b8ed85a548cfeb1f85031357"
dependencies = [
"cocoa",
"core-graphics 0.22.2",
@@ -3574,13 +3600,12 @@ dependencies = [
"serde",
"serde_json",
"tao",
"tauri-webview2",
"thiserror",
"url",
"webkit2gtk",
"webkit2gtk-sys",
"webview2-sys",
"winapi",
"webview2-com",
"windows",
]
[[package]]