From b4de7358b53a5a147bf95c68e5da6f8f0fe59ac4 Mon Sep 17 00:00:00 2001 From: Tobias Taschner Date: Fri, 26 Mar 2021 10:11:37 +0100 Subject: [PATCH 1/2] macOS: Implement keyboard shortcuts in webview Enable usage of standard editing keys Cmd+A/C/V/X --- src/osx/webview_webkit.mm | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/osx/webview_webkit.mm b/src/osx/webview_webkit.mm index 3237fc3daa..14a3904d8e 100644 --- a/src/osx/webview_webkit.mm +++ b/src/osx/webview_webkit.mm @@ -624,7 +624,30 @@ void wxWebViewWebKit::RegisterHandler(wxSharedPtr handler) return [super validRequestorForSendType:sendType returnType:returnType]; } -#endif +- (BOOL)performKeyEquivalent:(NSEvent *)event +{ + if ([event modifierFlags] & NSCommandKeyMask) + { + switch ([event.characters characterAtIndex:0]) + { + case 'a': + [self selectAll:nil]; + return YES; + case 'c': + m_webView->Copy(); + return YES; + case 'v': + m_webView->Paste(); + return YES; + case 'x': + m_webView->Cut(); + return YES; + } + } + + return [super performKeyEquivalent:event]; +} +#endif // !defined(__WXOSX_IPHONE__) @end From e63fd03611dfb427b120739bb6a383f74bdb47cc Mon Sep 17 00:00:00 2001 From: Tobias Taschner Date: Fri, 26 Mar 2021 10:28:48 +0100 Subject: [PATCH 2/2] macOS: Improve wxWebView::Paste() The default (javascript) implementation presents the user with a popup menu containing a single 'Paste' menu item. Send this action to directly paste as expected. --- include/wx/osx/webview_webkit.h | 2 ++ src/osx/webview_webkit.mm | 12 ++++++++++++ 2 files changed, 14 insertions(+) diff --git a/include/wx/osx/webview_webkit.h b/include/wx/osx/webview_webkit.h index 443d9b22d1..dfec234ed0 100644 --- a/include/wx/osx/webview_webkit.h +++ b/include/wx/osx/webview_webkit.h @@ -82,6 +82,8 @@ public: virtual wxVector > GetForwardHistory() wxOVERRIDE; virtual void LoadHistoryItem(wxSharedPtr item) wxOVERRIDE; + virtual void Paste() wxOVERRIDE; + //Undo / redo functionality virtual bool CanUndo() const wxOVERRIDE; virtual bool CanRedo() const wxOVERRIDE; diff --git a/src/osx/webview_webkit.mm b/src/osx/webview_webkit.mm index 14a3904d8e..e2fa2ab42e 100644 --- a/src/osx/webview_webkit.mm +++ b/src/osx/webview_webkit.mm @@ -568,6 +568,18 @@ void wxWebViewWebKit::LoadHistoryItem(wxSharedPtr item) [m_webView goToBackForwardListItem:item->m_histItem]; } +void wxWebViewWebKit::Paste() +{ +#if defined(__WXOSX_IPHONE__) + wxWebView::Paste(); +#else + // The default (javascript) implementation presents the user with a popup + // menu containing a single 'Paste' menu item. + // Send this action to directly paste as expected. + [[NSApplication sharedApplication] sendAction:@selector(paste:) to:nil from:m_webView]; +#endif +} + bool wxWebViewWebKit::CanUndo() const { return [[m_webView undoManager] canUndo];