diff --git a/modules/juce_gui_extra/native/juce_mac_WebBrowserComponent.mm b/modules/juce_gui_extra/native/juce_mac_WebBrowserComponent.mm index 84d2c32c0d..b44fbeb35a 100644 --- a/modules/juce_gui_extra/native/juce_mac_WebBrowserComponent.mm +++ b/modules/juce_gui_extra/native/juce_mac_WebBrowserComponent.mm @@ -26,6 +26,31 @@ #if JUCE_MAC +struct WebViewKeyEquivalentResponder : public ObjCClass +{ + WebViewKeyEquivalentResponder() : ObjCClass ("WebViewKeyEquivalentResponder_") + { + addMethod (@selector (performKeyEquivalent:), performKeyEquivalent, @encode (BOOL), "@:@"); + registerClass(); + } + +private: + static BOOL performKeyEquivalent (id self, SEL selector, NSEvent* event) + { + NSResponder* first = [[self window] firstResponder]; + if (([event modifierFlags] & NSDeviceIndependentModifierFlagsMask) == NSCommandKeyMask) + { + if ([[event charactersIgnoringModifiers] isEqualToString:@"x"]) return [NSApp sendAction:@selector(cut:) to:first from:self]; + if ([[event charactersIgnoringModifiers] isEqualToString:@"c"]) return [NSApp sendAction:@selector(copy:) to:first from:self]; + if ([[event charactersIgnoringModifiers] isEqualToString:@"v"]) return [NSApp sendAction:@selector(paste:) to:first from:self]; + if ([[event charactersIgnoringModifiers] isEqualToString:@"a"]) return [NSApp sendAction:@selector(selectAll:) to:first from:self]; + } + + objc_super s = { self, [WebView class] }; + return ObjCMsgSendSuper (&s, selector, event); + } +}; + struct DownloadClickDetectorClass : public ObjCClass { DownloadClickDetectorClass() : ObjCClass ("JUCEWebClickDetector_") @@ -194,9 +219,12 @@ public: Pimpl (WebBrowserComponent* owner) { #if JUCE_MAC - webView = [[WebView alloc] initWithFrame: NSMakeRect (0, 0, 100.0f, 100.0f) - frameName: nsEmptyString() - groupName: nsEmptyString()]; + static WebViewKeyEquivalentResponder webviewClass; + webView = (WebView*) webviewClass.createInstance(); + + webView = [webView initWithFrame: NSMakeRect (0, 0, 100.0f, 100.0f) + frameName: nsEmptyString() + groupName: nsEmptyString()]; setView (webView); static DownloadClickDetectorClass cls;