Revision: 29751
          http://sourceforge.net/p/bibdesk/svn/29751
Author:   hofman
Date:     2025-10-22 15:03:41 +0000 (Wed, 22 Oct 2025)
Log Message:
-----------
use propertiesToUpdate to determine what to update in bookmarks menus

Modified Paths:
--------------
    trunk/bibdesk/BDSKBookmarkController.m
    trunk/bibdesk/BDSKSearchBookmarkController.m

Modified: trunk/bibdesk/BDSKBookmarkController.m
===================================================================
--- trunk/bibdesk/BDSKBookmarkController.m      2025-10-22 14:28:39 UTC (rev 
29750)
+++ trunk/bibdesk/BDSKBookmarkController.m      2025-10-22 15:03:41 UTC (rev 
29751)
@@ -357,15 +357,45 @@
 }
 
 - (void)menuNeedsUpdate:(NSMenu *)menu {
-    [self updateMenu:menu forDisplay:YES];
+    BOOL updateImage = ([menu propertiesToUpdate] & NSMenuPropertyItemImage) 
!= 0;
+    if (updateImage == NO && [[NSUserDefaults standardUserDefaults] 
objectForKey:@"NSUserKeyEquivalents"] == nil)
+        return;
+    
+    NSMenu *supermenu = [menu supermenu];
+    NSInteger idx = [supermenu indexOfItemWithSubmenu:menu];
+    BDSKBookmark *bookmark = nil;
+    
+    if (supermenu == [NSApp mainMenu])
+        bookmark = [self bookmarkRoot];
+    else if (idx >= 0)
+        bookmark = [[supermenu itemAtIndex:idx] representedObject];
+    
+    if ([bookmark isKindOfClass:[BDSKBookmark class]] == NO)
+        return;
+    
+    if ([bookmark menuNeedsUpdate]) {
+        NSArray *bookmarks = [bookmark children];
+        if (supermenu == [NSApp mainMenu]) {
+            NSInteger i = [menu numberOfItems];
+            while (i-- > 0 && ([[menu itemAtIndex:i] isSeparatorItem] || 
[[menu itemAtIndex:i] representedObject]))
+                [menu removeItemAtIndex:i];
+            if ([bookmarks count] > 0)
+                [menu addItem:[NSMenuItem separatorItem]];
+        } else {
+            [menu removeAllItems];
+        }
+        for (BDSKBookmark *bm in bookmarks)
+            [self addItemForBookmark:bm toMenu:menu forDisplay:updateImage];
+        [bookmark setMenuNeedsUpdate:NO];
+    } else if (updateImage) {
+        for (NSMenuItem *item in [menu itemArray]) {
+            BDSKBookmark *bm = [item representedObject];
+            if ([bm isKindOfClass:[BDSKBookmark class]])
+                [item setImageAndSize:[bm icon]];
+        }
+    }
 }
 
-- (BOOL)menuHasKeyEquivalent:(NSMenu *)menu forEvent:(NSEvent *)event 
target:(id *)target action:(SEL *)action {
-    if ([[NSUserDefaults standardUserDefaults] 
objectForKey:@"NSUserKeyEquivalents"])
-        [self updateMenu:menu forDisplay:NO];
-    return NO;
-}
-
 #pragma mark Notification handlers
 
 - (void)handleApplicationWillTerminateNotification:(NSNotification 
*)notification {

Modified: trunk/bibdesk/BDSKSearchBookmarkController.m
===================================================================
--- trunk/bibdesk/BDSKSearchBookmarkController.m        2025-10-22 14:28:39 UTC 
(rev 29750)
+++ trunk/bibdesk/BDSKSearchBookmarkController.m        2025-10-22 15:03:41 UTC 
(rev 29751)
@@ -311,6 +311,9 @@
 }
 
 - (void)menuNeedsUpdate:(NSMenu *)menu {
+    if (([menu propertiesToUpdate] & NSMenuPropertyItemImage) == 0 && 
[[NSUserDefaults standardUserDefaults] objectForKey:@"NSUserKeyEquivalents"] == 
nil)
+        return;
+    
     NSMenu *supermenu = [menu supermenu];
     NSInteger idx = [supermenu indexOfItemWithSubmenu:menu];
     BDSKSearchBookmark *bookmark = nil;
@@ -320,29 +323,24 @@
     else if (idx >= 0)
         bookmark = [[supermenu itemAtIndex:idx] representedObject];
     
-    if ([bookmark isKindOfClass:[BDSKSearchBookmark class]] && [bookmark 
menuNeedsUpdate]) {
-        NSArray *bookmarks = [bookmark children];
-        if (supermenu == [NSApp mainMenu]) {
-            NSInteger i = [menu numberOfItems];
-            while (i-- > 0 && ([[menu itemAtIndex:i] isSeparatorItem] || 
[[menu itemAtIndex:i] representedObject]))
-                [menu removeItemAtIndex:i];
-            if ([bookmarks count] > 0)
-                [menu addItem:[NSMenuItem separatorItem]];
-        } else {
-            [menu removeAllItems];
-        }
-        for (BDSKSearchBookmark *bm in bookmarks)
-            [self addItemForBookmark:bm toMenu:menu];
-        [bookmark setMenuNeedsUpdate:NO];
+    if ([bookmark isKindOfClass:[BDSKSearchBookmark class]] == NO|| [bookmark 
menuNeedsUpdate] == NO)
+        return;
+
+    NSArray *bookmarks = [bookmark children];
+    if (supermenu == [NSApp mainMenu]) {
+        NSInteger i = [menu numberOfItems];
+        while (i-- > 0 && ([[menu itemAtIndex:i] isSeparatorItem] || [[menu 
itemAtIndex:i] representedObject]))
+            [menu removeItemAtIndex:i];
+        if ([bookmarks count] > 0)
+            [menu addItem:[NSMenuItem separatorItem]];
+    } else {
+        [menu removeAllItems];
     }
+    for (BDSKSearchBookmark *bm in bookmarks)
+        [self addItemForBookmark:bm toMenu:menu];
+    [bookmark setMenuNeedsUpdate:NO];
 }
 
-- (BOOL)menuHasKeyEquivalent:(NSMenu *)menu forEvent:(NSEvent *)event 
target:(id *)target action:(SEL *)action {
-    if ([[NSUserDefaults standardUserDefaults] 
objectForKey:@"NSUserKeyEquivalents"])
-        [self menuNeedsUpdate:menu];
-    return NO;
-}
-
 #pragma mark Undo support
 
 - (void)handleWillUndoChange:(NSNotification *)notification {

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



_______________________________________________
Bibdesk-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bibdesk-commit

Reply via email to