From 6a453c7f5c1237f05e670b7f5460d5cf40687395 Mon Sep 17 00:00:00 2001 From: ed Date: Tue, 27 Feb 2018 12:45:11 +0000 Subject: [PATCH] Added RecentlyOpenedFilesList::forgetRecentFileNatively() --- .../misc/juce_RecentlyOpenedFilesList.cpp | 27 +++++++++++++++++++ .../misc/juce_RecentlyOpenedFilesList.h | 7 +++++ 2 files changed, 34 insertions(+) diff --git a/modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.cpp b/modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.cpp index ee88a8aab2..54a748e253 100644 --- a/modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.cpp +++ b/modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.cpp @@ -149,6 +149,33 @@ void RecentlyOpenedFilesList::registerRecentFileNatively (const File& file) #endif } +void RecentlyOpenedFilesList::forgetRecentFileNatively (const File& file) +{ + #if JUCE_MAC + JUCE_AUTORELEASEPOOL + { + // for some reason, OSX doesn't provide a method to just remove a single file + // from the recent list, so we clear them all and add them back excluding + // the specified file + + auto* sharedDocController = [NSDocumentController sharedDocumentController]; + auto* recentDocumentURLs = [sharedDocController recentDocumentURLs]; + + [sharedDocController clearRecentDocuments: nil]; + + auto* nsFile = createNSURLFromFile (file); + + auto* reverseEnumerator = [recentDocumentURLs reverseObjectEnumerator]; + + for (NSURL* url : reverseEnumerator) + if (! [url isEqual:nsFile]) + [sharedDocController noteNewRecentDocumentURL:url]; + } + #else + ignoreUnused (file); + #endif +} + void RecentlyOpenedFilesList::clearRecentFilesNatively() { #if JUCE_MAC diff --git a/modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.h b/modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.h index 8861c980e3..0408d203b2 100644 --- a/modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.h +++ b/modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.h @@ -109,6 +109,13 @@ public: */ static void registerRecentFileNatively (const File& file); + /** Tells the OS to remove a file from 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 forgetRecentFileNatively (const File& file); + /** Tells the OS to clear the OS-managed list of recent documents for this app. Not all OSes maintain a list of recent files for an application, so this