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
[email protected]
https://lists.sourceforge.net/lists/listinfo/skim-app-commit