| @@ -202,6 +202,13 @@ void Project::addDefaultModules (bool shouldCopyFilesLocally) | |||||
| } | } | ||||
| //============================================================================== | //============================================================================== | ||||
| static void registerRecentFile (const File& file) | |||||
| { | |||||
| RecentlyOpenedFilesList::registerRecentFileNatively (file); | |||||
| StoredSettings::getInstance()->recentFiles.addFile (file); | |||||
| StoredSettings::getInstance()->flush(); | |||||
| } | |||||
| const String Project::loadDocument (const File& file) | const String Project::loadDocument (const File& file) | ||||
| { | { | ||||
| ScopedPointer <XmlElement> xml (XmlDocument::parse (file)); | ScopedPointer <XmlElement> xml (XmlDocument::parse (file)); | ||||
| @@ -214,8 +221,7 @@ const String Project::loadDocument (const File& file) | |||||
| if (! newTree.hasType (Tags::projectRoot)) | if (! newTree.hasType (Tags::projectRoot)) | ||||
| return "The document contains errors and couldn't be parsed!"; | return "The document contains errors and couldn't be parsed!"; | ||||
| StoredSettings::getInstance()->recentFiles.addFile (file); | |||||
| StoredSettings::getInstance()->flush(); | |||||
| registerRecentFile (file); | |||||
| projectRoot = newTree; | projectRoot = newTree; | ||||
| removeDefunctExporters(); | removeDefunctExporters(); | ||||
| @@ -229,15 +235,16 @@ const String Project::saveDocument (const File& file) | |||||
| return saveProject (file, true); | return saveProject (file, true); | ||||
| } | } | ||||
| String Project::saveProject (const File& file, bool showProgressBox) | |||||
| String Project::saveProject (const File& file, bool isCommandLineApp) | |||||
| { | { | ||||
| updateProjectSettings(); | updateProjectSettings(); | ||||
| sanitiseConfigFlags(); | sanitiseConfigFlags(); | ||||
| StoredSettings::getInstance()->recentFiles.addFile (file); | |||||
| if (isCommandLineApp) | |||||
| registerRecentFile (file); | |||||
| ProjectSaver saver (*this, file); | ProjectSaver saver (*this, file); | ||||
| return saver.save (showProgressBox); | |||||
| return saver.save (isCommandLineApp); | |||||
| } | } | ||||
| String Project::saveResourcesOnly (const File& file) | String Project::saveResourcesOnly (const File& file) | ||||
| @@ -46,7 +46,7 @@ public: | |||||
| const String getDocumentTitle(); | const String getDocumentTitle(); | ||||
| const String loadDocument (const File& file); | const String loadDocument (const File& file); | ||||
| const String saveDocument (const File& file); | const String saveDocument (const File& file); | ||||
| String saveProject (const File& file, bool showProgressBox); | |||||
| String saveProject (const File& file, bool isCommandLineApp); | |||||
| String saveResourcesOnly (const File& file); | String saveResourcesOnly (const File& file); | ||||
| const File getLastDocumentOpened(); | const File getLastDocumentOpened(); | ||||
| void setLastDocumentOpened (const File& file); | void setLastDocumentOpened (const File& file); | ||||
| @@ -79,7 +79,7 @@ | |||||
| namespace juce | namespace juce | ||||
| { | { | ||||
| // START_AUTOINCLUDE documents/*.cpp, code_editor/*.cpp, embedding/*.cpp, lookandfeel/*.cpp, misc/*.cpp | |||||
| #include "../juce_core/native/juce_osx_ObjCHelpers.h" | |||||
| #include "documents/juce_FileBasedDocument.cpp" | #include "documents/juce_FileBasedDocument.cpp" | ||||
| #include "code_editor/juce_CodeDocument.cpp" | #include "code_editor/juce_CodeDocument.cpp" | ||||
| #include "code_editor/juce_CodeEditorComponent.cpp" | #include "code_editor/juce_CodeEditorComponent.cpp" | ||||
| @@ -92,7 +92,6 @@ namespace juce | |||||
| #include "misc/juce_RecentlyOpenedFilesList.cpp" | #include "misc/juce_RecentlyOpenedFilesList.cpp" | ||||
| #include "misc/juce_SplashScreen.cpp" | #include "misc/juce_SplashScreen.cpp" | ||||
| #include "misc/juce_SystemTrayIconComponent.cpp" | #include "misc/juce_SystemTrayIconComponent.cpp" | ||||
| // END_AUTOINCLUDE | |||||
| } | } | ||||
| @@ -130,3 +130,17 @@ void RecentlyOpenedFilesList::restoreFromString (const String& stringifiedVersio | |||||
| setMaxNumberOfItems (maxNumberOfItems); | setMaxNumberOfItems (maxNumberOfItems); | ||||
| } | } | ||||
| //============================================================================== | |||||
| void RecentlyOpenedFilesList::registerRecentFileNatively (const File& file) | |||||
| { | |||||
| #if JUCE_MAC | |||||
| JUCE_AUTORELEASEPOOL | |||||
| [[NSDocumentController sharedDocumentController] | |||||
| noteNewRecentDocumentURL: [NSURL fileURLWithPath: juceStringToNS (file.getFullPathName())]]; | |||||
| #else | |||||
| (void) file; | |||||
| #endif | |||||
| } | |||||
| @@ -102,6 +102,12 @@ public: | |||||
| */ | */ | ||||
| void removeNonExistentFiles(); | void removeNonExistentFiles(); | ||||
| /** Tells the OS to add a file to the OS-managed list of recent documents for this app. | |||||
| Not all OSes maintain a list of recent files for an application, so this | |||||
| function will have no effect on some OSes. Currently it's just implemented for OSX. | |||||
| */ | |||||
| static void registerRecentFileNatively (const File& file); | |||||
| //============================================================================== | //============================================================================== | ||||
| /** Adds entries to a menu, representing each of the files in the list. | /** Adds entries to a menu, representing each of the files in the list. | ||||