From b3e7f2b7722c61038475f43785fac93e85876cd2 Mon Sep 17 00:00:00 2001 From: jules Date: Wed, 2 Apr 2014 19:40:38 +0100 Subject: [PATCH] Added support for uploading files in the OSX embedded web browser. --- .../native/juce_mac_WebBrowserComponent.mm | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/modules/juce_gui_extra/native/juce_mac_WebBrowserComponent.mm b/modules/juce_gui_extra/native/juce_mac_WebBrowserComponent.mm index 46d8da7be0..6b863280f5 100644 --- a/modules/juce_gui_extra/native/juce_mac_WebBrowserComponent.mm +++ b/modules/juce_gui_extra/native/juce_mac_WebBrowserComponent.mm @@ -34,6 +34,7 @@ struct DownloadClickDetectorClass : public ObjCClass decidePolicyForNavigationAction, "v@:@@@@@"); addMethod (@selector (webView:didFinishLoadForFrame:), didFinishLoadForFrame, "v@:@@"); addMethod (@selector (webView:willCloseFrame:), willCloseFrame, "v@:@@"); + addMethod (@selector (webView:runOpenPanelForFileButtonWithResultListener:allowMultipleFiles:), runOpenPanel, "v@:@@", @encode (BOOL)); registerClass(); } @@ -66,6 +67,21 @@ private: { getOwner (self)->windowCloseRequest(); } + + static void runOpenPanel (id, SEL, WebView*, id resultListener, BOOL allowMultipleFiles) + { + FileChooser chooser (TRANS("Select the file you want to upload..."), + File::getSpecialLocation (File::userHomeDirectory), "*"); + + if (allowMultipleFiles ? chooser.browseForMultipleFilesToOpen() + : chooser.browseForFileToOpen()) + { + const Array& files = chooser.getResults(); + + for (int i = 0; i < files.size(); ++i) + [resultListener chooseFilename: juceStringToNS (files.getReference(i).getFullPathName())]; + } + } }; #else @@ -146,6 +162,7 @@ public: DownloadClickDetectorClass::setOwner (clickListener, owner); [webView setPolicyDelegate: clickListener]; [webView setFrameLoadDelegate: clickListener]; + [webView setUIDelegate: clickListener]; #else webView = [[UIWebView alloc] initWithFrame: CGRectMake (0, 0, 1.0f, 1.0f)]; setView (webView); @@ -162,6 +179,7 @@ public: #if JUCE_MAC [webView setPolicyDelegate: nil]; [webView setFrameLoadDelegate: nil]; + [webView setUIDelegate: nil]; [clickListener release]; #else webView.delegate = nil;