Revision: 14680
          http://sourceforge.net/p/skim-app/code/14680
Author:   hofman
Date:     2024-11-13 16:22:32 +0000 (Wed, 13 Nov 2024)
Log Message:
-----------
Add Clear Menu item to recently closed documents bookmark menu

Modified Paths:
--------------
    trunk/SKBookmarkController.h
    trunk/SKBookmarkController.m
    trunk/de.lproj/Localizable.strings
    trunk/en.lproj/Localizable.strings
    trunk/es.lproj/Localizable.strings
    trunk/fr.lproj/Localizable.strings
    trunk/it.lproj/Localizable.strings
    trunk/ja.lproj/Localizable.strings
    trunk/nl.lproj/Localizable.strings
    trunk/pl.lproj/Localizable.strings
    trunk/ru.lproj/Localizable.strings
    trunk/zh_CN.lproj/Localizable.strings
    trunk/zh_TW.lproj/Localizable.strings

Modified: trunk/SKBookmarkController.h
===================================================================
--- trunk/SKBookmarkController.h        2024-11-13 15:34:10 UTC (rev 14679)
+++ trunk/SKBookmarkController.h        2024-11-13 16:22:32 UTC (rev 14680)
@@ -85,6 +85,8 @@
 
 - (IBAction)copyURL:(nullable id)sender;
 
+- (IBAction)clearClosedDocuments:(id)sender;
+
 - (nullable SKBookmark *)bookmarkForURL:(NSURL *)bookmarkURL;
 
 - (void)insertBookmark:(SKBookmark *)bookmark atIndex:(NSUInteger)anIndex 
ofBookmark:(SKBookmark *)parent animate:(BOOL)animate;

Modified: trunk/SKBookmarkController.m
===================================================================
--- trunk/SKBookmarkController.m        2024-11-13 15:34:10 UTC (rev 14679)
+++ trunk/SKBookmarkController.m        2024-11-13 16:22:32 UTC (rev 14680)
@@ -590,9 +590,14 @@
     }
 }
 
+- (IBAction)clearClosedDocuments:(id)sender {
+    [recentDocuments removeAllObjects];
+    [[[NSDocumentController sharedDocumentController] documents] setValue:@YES 
forKey:@"recentInfoNeedsUpdate"];
+}
+
 #pragma mark NSMenu delegate methods
 
-- (void)addItemForBookmark:(SKBookmark *)bookmark toMenu:(NSMenu *)menu 
isFolder:(BOOL)isFolder isAlternate:(BOOL)isAlternate {
+- (void)addItemForBookmark:(SKBookmark *)bookmark toMenu:(NSMenu *)menu 
isFolder:(BOOL)isFolder isAlternate:(BOOL)isAlternate tag:(NSInteger)tag {
     NSMenuItem *item = nil;
     if (isFolder) {
         item = [menu addItemWithSubmenuAndTitle:[bookmark label]];
@@ -601,6 +606,7 @@
         item = [menu addItemWithTitle:[bookmark label] 
action:@selector(openBookmark:) target:self];
     }
     [item setRepresentedObject:bookmark];
+    [item setTag:tag];
     if (isAlternate) {
         [item setKeyEquivalentModifierMask:NSEventModifierFlagOption];
         [item setAlternate:YES];
@@ -610,14 +616,6 @@
     }
 }
 
-static inline BOOL containsFolders(SKBookmark *bookmark) {
-    for (SKBookmark *bm in [bookmark children]) {
-        if ([bm bookmarkType] == SKBookmarkTypeFolder)
-            return YES;
-    }
-    return NO;
-}
-
 - (SKBookmark *)closedDocumentsBookmark {
     NSArray *openFileURLs = [[[NSDocumentController sharedDocumentController] 
documents] valueForKey:@"fileURL"];
     NSMutableArray *closedBms = [NSMutableArray array];
@@ -642,6 +640,21 @@
     return nil;
 }
 
+static inline BOOL containsFolders(SKBookmark *bookmark) {
+    for (SKBookmark *bm in [bookmark children]) {
+        if ([bm bookmarkType] == SKBookmarkTypeFolder)
+            return YES;
+    }
+    return NO;
+}
+
+enum {
+    SKBookmarkTagBookmarksMenu = 1,
+    SKBookmarkTagPreviousSession,
+    SKBookmarkTagClosedDocuments,
+    SKBookmarkTagCurrentDocument,
+};
+
 - (void)menuNeedsUpdate:(NSMenu *)menu {
     if (menu == [outlineView menu]) {
         NSInteger row = [outlineView clickedRow];
@@ -666,33 +679,39 @@
         NSMenu *supermenu = [menu supermenu];
         NSInteger idx = [supermenu indexOfItemWithSubmenu:menu]; 
         SKBookmark *bm = nil;
+        NSInteger tag = 0;
         
-        if (supermenu == [NSApp mainMenu])
+        if (supermenu == [NSApp mainMenu]) {
             bm = [self bookmarkRoot];
-        else if (idx >= 0)
+            tag = SKBookmarkTagBookmarksMenu;
+        } else if (idx >= 0) {
             bm = [[supermenu itemAtIndex:idx] representedObject];
+            tag = [[supermenu itemAtIndex:idx] tag];
+        }
         
         if ([bm isKindOfClass:[SKBookmark class]]) {
             NSArray *bookmarks = [bm children];
-            NSInteger i = [menu numberOfItems];
-            while (i-- > 0 && ([[menu itemAtIndex:i] isSeparatorItem] || 
[[menu itemAtIndex:i] representedObject]))
-                [menu removeItemAtIndex:i];
-            if (supermenu == [NSApp mainMenu]) {
+            if (tag == SKBookmarkTagBookmarksMenu) {
+                NSInteger i = [menu numberOfItems];
+                while (i-- > 0 && ([[menu itemAtIndex:i] isSeparatorItem] || 
[[menu itemAtIndex:i] representedObject]))
+                    [menu removeItemAtIndex:i];
                 SKBookmark *closedDocuments = [self closedDocumentsBookmark];
                 SKBookmark *currentDocument = [self currentDocumentBookmark];
                 if (previousSession || closedDocuments || currentDocument)
                     [menu addItem:[NSMenuItem separatorItem]];
                 if (previousSession) {
-                    [self addItemForBookmark:previousSession toMenu:menu 
isFolder:NO isAlternate:NO];
-                    [self addItemForBookmark:previousSession toMenu:menu 
isFolder:YES isAlternate:YES];
+                    [self addItemForBookmark:previousSession toMenu:menu 
isFolder:NO isAlternate:NO tag:SKBookmarkTagPreviousSession];
+                    [self addItemForBookmark:previousSession toMenu:menu 
isFolder:YES isAlternate:YES tag:SKBookmarkTagPreviousSession];
                 }
                 if (closedDocuments) {
-                    [self addItemForBookmark:closedDocuments toMenu:menu 
isFolder:YES isAlternate:NO];
-                    [self addItemForBookmark:closedDocuments toMenu:menu 
isFolder:NO isAlternate:YES];
+                    [self addItemForBookmark:closedDocuments toMenu:menu 
isFolder:YES isAlternate:NO tag:SKBookmarkTagClosedDocuments];
+                    [self addItemForBookmark:closedDocuments toMenu:menu 
isFolder:NO isAlternate:YES tag:SKBookmarkTagClosedDocuments];
                 }
                 if (currentDocument) {
-                    [self addItemForBookmark:currentDocument toMenu:menu 
isFolder:YES isAlternate:NO];
+                    [self addItemForBookmark:currentDocument toMenu:menu 
isFolder:YES isAlternate:NO tag:SKBookmarkTagCurrentDocument];
                 }
+            } else {
+                [menu removeAllItems];
             }
             if ([menu numberOfItems] > 0 && [bookmarks count] > 0)
                 [menu addItem:[NSMenuItem separatorItem]];
@@ -699,24 +718,28 @@
             for (SKBookmark *aBm in bookmarks) {
                 switch ([aBm bookmarkType]) {
                     case SKBookmarkTypeFolder:
-                        [self addItemForBookmark:aBm toMenu:menu isFolder:YES 
isAlternate:NO];
+                        [self addItemForBookmark:aBm toMenu:menu isFolder:YES 
isAlternate:NO tag:0];
                         if (containsFolders(aBm) == NO)
-                            [self addItemForBookmark:bm toMenu:menu 
isFolder:NO isAlternate:YES];
+                            [self addItemForBookmark:bm toMenu:menu 
isFolder:NO isAlternate:YES tag:0];
                         break;
                     case SKBookmarkTypeSession:
-                        [self addItemForBookmark:aBm toMenu:menu isFolder:NO 
isAlternate:NO];
-                        [self addItemForBookmark:aBm toMenu:menu isFolder:YES 
isAlternate:YES];
+                        [self addItemForBookmark:aBm toMenu:menu isFolder:NO 
isAlternate:NO tag:0];
+                        [self addItemForBookmark:aBm toMenu:menu isFolder:YES 
isAlternate:YES tag:0];
                         break;
                     case SKBookmarkTypeSeparator:
                         [menu addItem:[NSMenuItem separatorItem]];
                         break;
                     default:
-                        [self addItemForBookmark:aBm toMenu:menu isFolder:NO 
isAlternate:NO];
+                        [self addItemForBookmark:aBm toMenu:menu isFolder:NO 
isAlternate:NO tag:0];
                         break;
                 }
             }
-            if ([menu numberOfItems] == 0)
+            if ([menu numberOfItems] == 0) {
                 [menu addItemWithTitle:NSLocalizedString(@"No Document", 
@"Menu item title") action:NULL keyEquivalent:@""];
+            } else if (tag == SKBookmarkTagClosedDocuments) {
+                [menu addItem:[NSMenuItem separatorItem]];
+                [menu addItemWithTitle:NSLocalizedString(@"Clear Menu", @"Menu 
item title") action:@selector(clearClosedDocuments:) target:self];
+            }
         }
     }
 }

Modified: trunk/de.lproj/Localizable.strings
===================================================================
(Binary files differ)

Modified: trunk/en.lproj/Localizable.strings
===================================================================
(Binary files differ)

Modified: trunk/es.lproj/Localizable.strings
===================================================================
(Binary files differ)

Modified: trunk/fr.lproj/Localizable.strings
===================================================================
(Binary files differ)

Modified: trunk/it.lproj/Localizable.strings
===================================================================
(Binary files differ)

Modified: trunk/ja.lproj/Localizable.strings
===================================================================
(Binary files differ)

Modified: trunk/nl.lproj/Localizable.strings
===================================================================
(Binary files differ)

Modified: trunk/pl.lproj/Localizable.strings
===================================================================
(Binary files differ)

Modified: trunk/ru.lproj/Localizable.strings
===================================================================
(Binary files differ)

Modified: trunk/zh_CN.lproj/Localizable.strings
===================================================================
(Binary files differ)

Modified: trunk/zh_TW.lproj/Localizable.strings
===================================================================
(Binary files differ)

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.



_______________________________________________
Skim-app-commit mailing list
Skim-app-commit@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/skim-app-commit

Reply via email to