Author: fredkiefer
Date: Mon Dec 8 17:03:49 2014
New Revision: 38242
URL: http://svn.gna.org/viewcvs/gnustep?rev=38242&view=rev
Log:
* Source/NSDocumentFrameworkPrivate.h,
* Source/NSDocumentController.m:
Open recent menu to clear items that have been deleted whenever
it reloads.
Based on patch by Paul Landers <[email protected]>.
Modified:
libs/gui/trunk/ChangeLog
libs/gui/trunk/Source/NSDocumentController.m
libs/gui/trunk/Source/NSDocumentFrameworkPrivate.h
Modified: libs/gui/trunk/ChangeLog
URL:
http://svn.gna.org/viewcvs/gnustep/libs/gui/trunk/ChangeLog?rev=38242&r1=38241&r2=38242&view=diff
==============================================================================
--- libs/gui/trunk/ChangeLog (original)
+++ libs/gui/trunk/ChangeLog Mon Dec 8 17:03:49 2014
@@ -1,3 +1,10 @@
+2014-12-08 Fred Kiefer <[email protected]>
+
+ * Source/NSDocumentFrameworkPrivate.h,
+ * Source/NSDocumentController.m:
+ Open recent menu to clear items that have been deleted whenever it
reloads.
+ Based on patch by Paul Landers <[email protected]>.
+
2014-12-08 Fred Kiefer <[email protected]>
* Source/GSToolTips.m: Fixed two issues with tooltips.
Modified: libs/gui/trunk/Source/NSDocumentController.m
URL:
http://svn.gna.org/viewcvs/gnustep/libs/gui/trunk/Source/NSDocumentController.m?rev=38242&r1=38241&r2=38242&view=diff
==============================================================================
--- libs/gui/trunk/Source/NSDocumentController.m (original)
+++ libs/gui/trunk/Source/NSDocumentController.m Mon Dec 8 17:03:49 2014
@@ -277,42 +277,8 @@
_documents = [[NSMutableArray alloc] init];
/* Get list of recent documents */
- _recent_documents = [[NSUserDefaults standardUserDefaults]
- objectForKey: NSRecentDocuments];
- if (_recent_documents)
- {
- int i, count, max;
-
- _recent_documents = [_recent_documents mutableCopy];
- count = [_recent_documents count];
- for (i = 0; i < count; i++)
- {
- NSString *str;
- NSURL *url;
-
- str = [_recent_documents objectAtIndex: i];
- url = [NSURL URLWithString: str];
- if (url == nil)
- {
- NSLog(@"NSRecentItems value '%@' is not valid ... ignored", str);
- [_recent_documents removeObjectAtIndex: i];
- i--;
- count--;
- }
- else
- {
- [_recent_documents replaceObjectAtIndex: i withObject: url];
- }
- }
-
- max = [self maximumRecentDocumentCount];
- if (count > max)
- {
- [_recent_documents removeObjectsInRange: NSMakeRange(0, count - max)];
- }
- }
- else
- _recent_documents = RETAIN([NSMutableArray array]);
+ [self _loadRecentDocuments];
+
[self setShouldCreateUI: YES];
[[[NSWorkspace sharedWorkspace] notificationCenter]
@@ -1347,7 +1313,6 @@
- (void) noteNewRecentDocumentURL: (NSURL *)anURL
{
NSUInteger index = [_recent_documents indexOfObject: anURL];
- NSMutableArray *a;
if (index != NSNotFound)
{
@@ -1362,16 +1327,8 @@
[_recent_documents addObject: anURL];
// Save the changed list
- a = [_recent_documents mutableCopy];
- index = [a count];
- while (index-- > 0)
- {
- [a replaceObjectAtIndex: index withObject:
- [[a objectAtIndex: index] absoluteString]];
- }
- [[NSUserDefaults standardUserDefaults]
- setObject: a forKey: NSRecentDocuments];
- RELEASE(a);
+ [self _saveRecentDocuments];
+
[self _updateRecentDocumentsMenu];
}
@@ -1658,6 +1615,7 @@
- (void) _updateRecentDocumentsMenu
{
NSMenu *recentMenu;
+ BOOL listUpdated;
int i;
recentMenu = [self _recentDocumentsMenu];
@@ -1670,10 +1628,31 @@
[recentMenu setAutoenablesItems: NO];
[recentMenu setMenuChangedMessagesEnabled: NO];
+ // remove from list all deleted or otherwise inaccessable files
+ listUpdated = NO;
+ for (i = [_recent_documents count] - 1; i >= 0; i--)
+ {
+ NSURL *u = [_recent_documents objectAtIndex: i];
+ NSError *error;
+ // Check if resource has been deleted
+ if (![u checkResourceIsReachableAndReturnError: &error])
+ {
+ [_recent_documents removeObjectAtIndex: i];
+ listUpdated = YES;
+ }
+ }
+ if (listUpdated)
+ {
+ // Save the changed list
+ [self _saveRecentDocuments];
+ }
+
+ // remove them all
while ([recentMenu numberOfItems] > 0)
{
- [recentMenu removeItemAtIndex: 0]; // remove them all
- }
+ [recentMenu removeItemAtIndex: 0];
+ }
+
for (i = [_recent_documents count] - 1; i >= -2; i--)
{
// add all items incl. a Clear List item if needed
@@ -1751,4 +1730,61 @@
[self presentError: err];
}
+- (void) _saveRecentDocuments
+{
+ NSMutableArray *a = [_recent_documents mutableCopy];
+ NSUInteger index = [a count];
+
+ while (index-- > 0)
+ {
+ [a replaceObjectAtIndex: index withObject:
+ [[a objectAtIndex: index] absoluteString]];
+ }
+ [[NSUserDefaults standardUserDefaults]
+ setObject: a forKey: NSRecentDocuments];
+ RELEASE(a);
+}
+
+- (void) _loadRecentDocuments
+{
+ _recent_documents = [[NSUserDefaults standardUserDefaults]
+ objectForKey: NSRecentDocuments];
+ if (_recent_documents)
+ {
+ int i, count, max;
+
+ _recent_documents = [_recent_documents mutableCopy];
+ count = [_recent_documents count];
+ for (i = 0; i < count; i++)
+ {
+ NSString *str;
+ NSURL *url;
+
+ str = [_recent_documents objectAtIndex: i];
+ url = [NSURL URLWithString: str];
+ if (url == nil)
+ {
+ NSLog(@"NSRecentItems value '%@' is not valid ... ignored", str);
+ [_recent_documents removeObjectAtIndex: i];
+ i--;
+ count--;
+ }
+ else
+ {
+ [_recent_documents replaceObjectAtIndex: i withObject: url];
+ }
+ }
+
+ max = [self maximumRecentDocumentCount];
+ if (count > max)
+ {
+ [_recent_documents removeObjectsInRange: NSMakeRange(0, count - max)];
+ }
+ }
+ else
+ {
+ _recent_documents = RETAIN([NSMutableArray array]);
+ }
+}
+
@end
Modified: libs/gui/trunk/Source/NSDocumentFrameworkPrivate.h
URL:
http://svn.gna.org/viewcvs/gnustep/libs/gui/trunk/Source/NSDocumentFrameworkPrivate.h?rev=38242&r1=38241&r2=38242&view=diff
==============================================================================
--- libs/gui/trunk/Source/NSDocumentFrameworkPrivate.h (original)
+++ libs/gui/trunk/Source/NSDocumentFrameworkPrivate.h Mon Dec 8 17:03:49 2014
@@ -50,6 +50,8 @@
- (void) _setRecentDocumentsMenu: (NSMenu *)menu;
- (void) _updateRecentDocumentsMenu;
- (IBAction) _openRecentDocument: (id)sender;
+- (void) _saveRecentDocuments;
+- (void) _loadRecentDocuments;
@end
@interface NSDocument (Private)
_______________________________________________
Gnustep-cvs mailing list
[email protected]
https://mail.gna.org/listinfo/gnustep-cvs