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