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

Reply via email to