fix(windows): call with_webview on built window, import COREWEBVIEW2_PERMISSION_KIND type
with_webview is on WebviewWindow (the built window), not WebviewWindowBuilder. Also import COREWEBVIEW2_PERMISSION_KIND as a type for the out-param zero-init. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -26,21 +26,22 @@ pub fn run() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
let app_handle = app.handle().clone();
|
let app_handle = app.handle().clone();
|
||||||
let builder = WebviewWindowBuilder::new(app, "main".to_string(), window_url)
|
let window = WebviewWindowBuilder::new(app, "main".to_string(), window_url)
|
||||||
.title("Cinny")
|
.title("Cinny")
|
||||||
.disable_drag_drop_handler()
|
.disable_drag_drop_handler()
|
||||||
.on_new_window(move |url, _features| {
|
.on_new_window(move |url, _features| {
|
||||||
let _ = app_handle.opener().open_url(url.as_str(), None::<&str>);
|
let _ = app_handle.opener().open_url(url.as_str(), None::<&str>);
|
||||||
NewWindowResponse::Deny
|
NewWindowResponse::Deny
|
||||||
});
|
})
|
||||||
|
.build()?;
|
||||||
|
|
||||||
// Grant camera and microphone to WebView2 automatically.
|
// Grant camera and microphone to WebView2 automatically.
|
||||||
// Windows requires an explicit PermissionRequested COM event handler;
|
// Windows requires an explicit PermissionRequested COM event handler.
|
||||||
// macOS uses Info.plist.
|
|
||||||
#[cfg(target_os = "windows")]
|
#[cfg(target_os = "windows")]
|
||||||
let builder = builder.with_webview(|webview| {
|
window.with_webview(|webview| {
|
||||||
use webview2_com::{
|
use webview2_com::{
|
||||||
Microsoft::Web::WebView2::Win32::{
|
Microsoft::Web::WebView2::Win32::{
|
||||||
|
COREWEBVIEW2_PERMISSION_KIND,
|
||||||
COREWEBVIEW2_PERMISSION_KIND_CAMERA,
|
COREWEBVIEW2_PERMISSION_KIND_CAMERA,
|
||||||
COREWEBVIEW2_PERMISSION_KIND_MICROPHONE,
|
COREWEBVIEW2_PERMISSION_KIND_MICROPHONE,
|
||||||
COREWEBVIEW2_PERMISSION_STATE_ALLOW,
|
COREWEBVIEW2_PERMISSION_STATE_ALLOW,
|
||||||
@@ -53,7 +54,6 @@ pub fn run() {
|
|||||||
let handler = PermissionRequestedEventHandler::create(Box::new(
|
let handler = PermissionRequestedEventHandler::create(Box::new(
|
||||||
|_sender, args| {
|
|_sender, args| {
|
||||||
if let Some(args) = args {
|
if let Some(args) = args {
|
||||||
// PermissionKind uses a COM out-param pattern
|
|
||||||
let mut kind = COREWEBVIEW2_PERMISSION_KIND(0);
|
let mut kind = COREWEBVIEW2_PERMISSION_KIND(0);
|
||||||
unsafe { args.PermissionKind(&mut kind) }?;
|
unsafe { args.PermissionKind(&mut kind) }?;
|
||||||
if kind == COREWEBVIEW2_PERMISSION_KIND_MICROPHONE
|
if kind == COREWEBVIEW2_PERMISSION_KIND_MICROPHONE
|
||||||
@@ -70,9 +70,8 @@ pub fn run() {
|
|||||||
let mut token = Default::default();
|
let mut token = Default::default();
|
||||||
let _ = unsafe { core.add_PermissionRequested(&handler, &mut token) };
|
let _ = unsafe { core.add_PermissionRequested(&handler, &mut token) };
|
||||||
}
|
}
|
||||||
});
|
})?;
|
||||||
|
|
||||||
builder.build()?;
|
|
||||||
Ok(())
|
Ok(())
|
||||||
})
|
})
|
||||||
.run(context)
|
.run(context)
|
||||||
|
|||||||
Reference in New Issue
Block a user