From fee4bf2eb384d9c315530bd8f5af146909706cf6 Mon Sep 17 00:00:00 2001 From: "Ngo Iok Ui (Wu Yu Wei)" Date: Sat, 10 Dec 2022 00:20:12 +0800 Subject: [PATCH] Remove all keydown implementations (#798) * Remove all keydown implementations * Update example's js file --- .changes/keydown.md | 5 +++++ examples/menu.rs | 20 ++++++++++++++++---- src/webview/wkwebview/mod.rs | 36 +----------------------------------- 3 files changed, 22 insertions(+), 39 deletions(-) create mode 100644 .changes/keydown.md diff --git a/.changes/keydown.md b/.changes/keydown.md new file mode 100644 index 000000000..c3061ee9a --- /dev/null +++ b/.changes/keydown.md @@ -0,0 +1,5 @@ +--- +"wry": patch +--- + +On macOS, remove all custom keydown implementations. This will bring back keydown regression but should allow all accelerator working. diff --git a/examples/menu.rs b/examples/menu.rs index ccbb89793..3ef74e742 100644 --- a/examples/menu.rs +++ b/examples/menu.rs @@ -23,11 +23,21 @@ fn main() -> wry::Result<()> { let mut menu = MenuBar::new(); let mut file_menu = MenuBar::new(); + file_menu.add_native_item(tao::menu::MenuItem::Cut); + file_menu.add_native_item(tao::menu::MenuItem::Copy); + file_menu.add_native_item(tao::menu::MenuItem::Paste); file_menu.add_item( MenuItemAttributes::new("Quit").with_accelerators(&Accelerator::new( - Some(ModifiersState::SUPER), - // Some(ModifiersState::SHIFT), - // None, + Some(ModifiersState::CONTROL | ModifiersState::SHIFT), + KeyCode::KeyQ, + )), + ); + file_menu.add_item( + MenuItemAttributes::new("Quit").with_accelerators(&Accelerator::new(None, KeyCode::KeyQ)), + ); + file_menu.add_item( + MenuItemAttributes::new("Quit").with_accelerators(&Accelerator::new( + Some(ModifiersState::SHIFT), KeyCode::KeyQ, )), ); @@ -63,6 +73,8 @@ fn main() -> wry::Result<()> { (content, "text/javascript") } else if path.ends_with(".png") { (content, "image/png") + } else if path.ends_with(".wasm") { + (content, "application/wasm") } else { unimplemented!(); }; @@ -87,7 +99,7 @@ fn main() -> wry::Result<()> { } => *control_flow = ControlFlow::Exit, Event::MenuEvent { menu_id, .. } => { println!("Menu clicked! {:?}", menu_id); - *control_flow = ControlFlow::Exit; + // *control_flow = ControlFlow::Exit; } _ => (), } diff --git a/src/webview/wkwebview/mod.rs b/src/webview/wkwebview/mod.rs index db4ef6a13..0c7548a5e 100644 --- a/src/webview/wkwebview/mod.rs +++ b/src/webview/wkwebview/mod.rs @@ -276,22 +276,6 @@ impl InnerWebView { sel!(acceptsFirstMouse:), accept_first_mouse as extern "C" fn(&Object, Sel, id) -> BOOL, ); - decl.add_method( - sel!(keyDown:), - key_down as extern "C" fn(&mut Object, Sel, id), - ); - - extern "C" fn key_down(this: &mut Object, _sel: Sel, event: id) { - unsafe { - let app = cocoa::appkit::NSApp(); - let menu: id = msg_send![app, mainMenu]; - if !menu.is_null() { - let () = msg_send![menu, performKeyEquivalent: event]; - } - - let () = msg_send![this, performKeyEquivalent: event]; - } - } extern "C" fn accept_first_mouse(this: &Object, _sel: Sel, _event: id) -> BOOL { unsafe { @@ -703,25 +687,7 @@ r#"Object.defineProperty(window, 'ipc', { // Inject the web view into the window as main content #[cfg(target_os = "macos")] { - let parent_view_cls = match ClassDecl::new("WryWebViewParent", class!(NSView)) { - Some(mut decl) => { - decl.add_method( - sel!(keyDown:), - key_down as extern "C" fn(&mut Object, Sel, id), - ); - - extern "C" fn key_down(this: &mut Object, _sel: Sel, event: id) { - unsafe { - let superclass: *const Class = msg_send![this, superclass]; - let () = msg_send![super(this, &*superclass), keyDown: event]; - } - } - - decl.register() - } - None => class!(NSView), - }; - + let parent_view_cls = class!(NSView); let parent_view: id = msg_send![parent_view_cls, alloc]; let _: () = msg_send![parent_view, init]; parent_view.setAutoresizingMask_(NSViewHeightSizable | NSViewWidthSizable);