diff --git a/include/wx/osx/app.h b/include/wx/osx/app.h index d841b4127a..4f7b9e352f 100644 --- a/include/wx/osx/app.h +++ b/include/wx/osx/app.h @@ -129,13 +129,15 @@ public: virtual short MacHandleAERApp(const WXAPPLEEVENTREF event , WXAPPLEEVENTREF reply) ; #endif // in response of an openFiles message with Cocoa and an - // open-document apple event with Carbon + // open-document apple event virtual void MacOpenFiles(const wxArrayString &fileNames) ; // called by MacOpenFiles for each file. virtual void MacOpenFile(const wxString &fileName) ; // in response of a get-url apple event virtual void MacOpenURL(const wxString &url) ; // in response of a print-document apple event + virtual void MacPrintFiles(const wxArrayString &fileNames) ; + // called by MacPrintFiles for each file virtual void MacPrintFile(const wxString &fileName) ; // in response of a open-application apple event virtual void MacNewFile() ; @@ -155,10 +157,14 @@ private: bool m_onInitResult; bool m_inited; wxArrayString m_openFiles; + wxArrayString m_printFiles; + wxString m_getURL; public: bool OSXInitWasCalled() { return m_inited; } void OSXStoreOpenFiles(const wxArrayString &files ) { m_openFiles = files ; } + void OSXStorePrintFiles(const wxArrayString &files ) { m_printFiles = files ; } + void OSXStoreOpenURL(const wxString &url ) { m_getURL = url ; } #endif // Hide the application windows the same as the system hide command would do it. diff --git a/src/osx/carbon/app.cpp b/src/osx/carbon/app.cpp index de88ebd8e0..503a29cb0b 100644 --- a/src/osx/carbon/app.cpp +++ b/src/osx/carbon/app.cpp @@ -229,6 +229,8 @@ short wxApp::MacHandleAEPDoc(const WXEVENTREF event , WXEVENTREF WXUNUSED(reply) wxString fName ; FSRef theRef ; + + wxArrayString fileNames; for (i = 1; i <= itemsInList; i++) { @@ -240,9 +242,10 @@ short wxApp::MacHandleAEPDoc(const WXEVENTREF event , WXEVENTREF WXUNUSED(reply) return err; fName = wxMacFSRefToPath( &theRef ) ; - - MacPrintFile(fName); + files += fName; } + + MacPrintFiles(fileNames); return noErr; } @@ -307,6 +310,16 @@ void wxApp::MacOpenURL(const wxString & WXUNUSED(url) ) { } +void wxApp::MacPrintFiles(const wxArrayString & fileNames ) +{ + size_t i; + const size_t fileCount = fileNames.GetCount(); + for (i = 0; i < fileCount; i++) + { + MacPrintFile(fileNames[i]); + } +} + void wxApp::MacPrintFile(const wxString & fileName ) { #if wxUSE_DOC_VIEW_ARCHITECTURE diff --git a/src/osx/cocoa/utils.mm b/src/osx/cocoa/utils.mm index 94215bfb08..61f8c420c6 100644 --- a/src/osx/cocoa/utils.mm +++ b/src/osx/cocoa/utils.mm @@ -86,12 +86,23 @@ void wxBell() wxTheApp->OSXStoreOpenFiles(fileList); } -- (BOOL)application:(NSApplication *)sender printFile:(NSString *)filename +- (NSApplicationPrintReply)application:(NSApplication *)sender printFiles:(NSArray *)fileNames withSettings:(NSDictionary *)printSettings showPrintPanels:(BOOL)showPrintPanels { wxUnusedVar(sender); - wxCFStringRef cf(wxCFRetain(filename)); - wxTheApp->MacPrintFile(cf.AsString()) ; - return YES; + wxArrayString fileList; + size_t i; + const size_t count = [fileNames count]; + for (i = 0; i < count; i++) + { + fileList.Add( wxCFStringRef::AsStringWithNormalizationFormC([fileNames objectAtIndex:i]) ); + } + + if ( wxTheApp->OSXInitWasCalled() ) + wxTheApp->MacPrintFiles(fileList); + else + wxTheApp->OSXStorePrintFiles(fileList); + + return NSPrintingSuccess; } - (BOOL)applicationShouldHandleReopen:(NSApplication *)sender hasVisibleWindows:(BOOL)flag @@ -325,6 +336,10 @@ bool wxApp::CallOnInit() { if ( m_openFiles.GetCount() > 0 ) MacOpenFiles(m_openFiles); + else if ( m_printFiles.GetCount() > 0 ) + MacPrintFiles(m_printFiles); + else if ( m_getURL.Len() > 0 ) + MacOpenURL(m_getURL); else MacNewFile(); }