Revision: 29747
          http://sourceforge.net/p/bibdesk/svn/29747
Author:   hofman
Date:     2025-10-21 16:17:08 +0000 (Tue, 21 Oct 2025)
Log Message:
-----------
Let (search) bookmarks controller update its menu. Only update when a bookmark 
has changed in the menu. Partial updating for key equivalents when there are 
user defined shortcuts.

Modified Paths:
--------------
    trunk/bibdesk/BDSKAppController.h
    trunk/bibdesk/BDSKAppController.m
    trunk/bibdesk/BDSKBookmark.h
    trunk/bibdesk/BDSKBookmark.m
    trunk/bibdesk/BDSKBookmarkController.h
    trunk/bibdesk/BDSKBookmarkController.m
    trunk/bibdesk/BDSKSearchBookmark.h
    trunk/bibdesk/BDSKSearchBookmark.m
    trunk/bibdesk/BDSKSearchBookmarkController.h
    trunk/bibdesk/BDSKSearchBookmarkController.m
    trunk/bibdesk/BDSKTextImportController.m
    trunk/bibdesk/BDSKURLSheetController.m
    trunk/bibdesk/Base.lproj/MainMenu.xib
    trunk/bibdesk/BibDocument_Groups.m

Modified: trunk/bibdesk/BDSKAppController.h
===================================================================
--- trunk/bibdesk/BDSKAppController.h   2025-10-21 09:36:10 UTC (rev 29746)
+++ trunk/bibdesk/BDSKAppController.h   2025-10-21 16:17:08 UTC (rev 29747)
@@ -45,8 +45,6 @@
     NSMenu *templatedCopyMenu;
     NSMenu *previewDisplayMenu;
     NSMenu *sidePreviewDisplayMenu;
-    NSMenu *searchBookmarksMenu;
-    NSMenu *bookmarksMenu;
     NSMenu *historyMenu;
     NSMenu *shareMenu;
 }
@@ -57,8 +55,6 @@
 @property (nonatomic, nullable, strong) IBOutlet NSMenu *templatedCopyMenu;
 @property (nonatomic, nullable, strong) IBOutlet NSMenu *previewDisplayMenu;
 @property (nonatomic, nullable, strong) IBOutlet NSMenu 
*sidePreviewDisplayMenu;
-@property (nonatomic, nullable, strong) IBOutlet NSMenu *searchBookmarksMenu;
-@property (nonatomic, nullable, strong) IBOutlet NSMenu *bookmarksMenu;
 @property (nonatomic, nullable, strong) IBOutlet NSMenu *historyMenu;
 @property (nonatomic, nullable, strong) IBOutlet NSMenu *shareMenu;
 
@@ -73,10 +69,6 @@
 - (IBAction)showReadMeFile:(nullable id)sender;
 - (IBAction)showRelNotes:(nullable id)sender;
 
-- (IBAction)editSearchBookmarks:(nullable id)sender;
-
-- (IBAction)showBookmarks:(nullable id)sender;
-
 - (IBAction)clearHistory:(nullable id)sender;
 - (IBAction)toggleHistoryByDate:(nullable id)sender;
 

Modified: trunk/bibdesk/BDSKAppController.m
===================================================================
--- trunk/bibdesk/BDSKAppController.m   2025-10-21 09:36:10 UTC (rev 29746)
+++ trunk/bibdesk/BDSKAppController.m   2025-10-21 16:17:08 UTC (rev 29747)
@@ -65,10 +65,6 @@
 #import "NSError_BDSKExtensions.h"
 #import "NSImage_BDSKExtensions.h"
 #import "BDSKFileMatcher.h"
-#import "BDSKSearchBookmarkController.h"
-#import "BDSKSearchBookmark.h"
-#import "BDSKBookmarkController.h"
-#import "BDSKBookmark.h"
 #import "BDSKVersionNumber.h"
 #import "BDSKURLGroup.h"
 #import "BDSKSearchGroup.h"
@@ -111,7 +107,7 @@
 
 @implementation BDSKAppController
 
-@synthesize columnsMenu, groupSortMenu, groupFieldMenu, templatedCopyMenu, 
previewDisplayMenu, sidePreviewDisplayMenu, searchBookmarksMenu, bookmarksMenu, 
historyMenu, shareMenu;
+@synthesize columnsMenu, groupSortMenu, groupFieldMenu, templatedCopyMenu, 
previewDisplayMenu, sidePreviewDisplayMenu, historyMenu, shareMenu;
 
 // remove legacy comparisons of added/created/modified strings in table column 
code from prefs
 static void fixLegacyTableColumnIdentifiers()
@@ -579,44 +575,6 @@
 // implemented in order to prevent the Copy As > Template menu from being 
updated at every key event
 - (BOOL)menuHasKeyEquivalent:(NSMenu *)menu forEvent:(NSEvent *)event 
target:(id *)target action:(SEL *)action { return NO; }
 
-- (void)addMenuItemsForSearchBookmarks:(NSArray *)bookmarks toMenu:(NSMenu 
*)menu {
-    for (BDSKSearchBookmark *bm in bookmarks) {
-        if ([bm bookmarkType] == BDSKSearchBookmarkTypeFolder) {
-            NSString *label = [bm label];
-            NSMenu *submenu = [[NSMenu alloc] initWithTitle:[bm label]];
-            NSMenuItem *item = [menu addItemWithTitle:label ?: @"" 
submenu:submenu];
-            [item setImageAndSize:[bm icon]];
-            [self addMenuItemsForSearchBookmarks:[bm children] toMenu:submenu];
-        } else if ([bm bookmarkType] == BDSKSearchBookmarkTypeSeparator) {
-            [menu addItem:[NSMenuItem separatorItem]];
-        } else {
-            NSString *label = [bm label];
-            NSMenuItem *item = [menu addItemWithTitle:label ?: @"" 
action:@selector(newSearchGroupFromBookmark:)  keyEquivalent:@""];
-            [item setRepresentedObject:[bm info]];
-            [item setImageAndSize:[bm icon]];
-        }
-    }
-}
-
-- (void)addMenuItemsForBookmarks:(NSArray *)bookmarks toMenu:(NSMenu *)menu {
-    for (BDSKBookmark *bm in bookmarks) {
-        if ([bm bookmarkType] == BDSKBookmarkTypeFolder) {
-            NSString *name = [bm name];
-            NSMenu *submenu = [[NSMenu alloc] initWithTitle:[bm name]];
-            NSMenuItem *item = [menu addItemWithTitle:name ?: @"" 
submenu:submenu];
-            [item setImageAndSize:[bm icon]];
-            [self addMenuItemsForBookmarks:[bm children] toMenu:submenu];
-        } else if ([bm bookmarkType] == BDSKBookmarkTypeSeparator) {
-            [menu addItem:[NSMenuItem separatorItem]];
-        } else {
-            NSString *name = [bm name];
-            NSMenuItem *item = [menu addItemWithTitle:name ?: @"" 
action:@selector(openBookmark:)  keyEquivalent:@""];
-            [item setRepresentedObject:[bm URL]];
-            [item setImageAndSize:[bm icon]];
-        }
-    }
-}
-
 - (void)addMenuItemsForHistoryItems:(NSArray *)historyItems toMenu:(NSMenu 
*)menu {
     for (WebHistoryItem *historyItem in historyItems) {
         NSString *title = [historyItem title];
@@ -696,26 +654,6 @@
             [item setRepresentedObject:style];
         }
         
-    } else if ([menu isEqual:searchBookmarksMenu]) {
-        
-        NSArray *bookmarks = [[[BDSKSearchBookmarkController 
sharedBookmarkController] bookmarkRoot] children];
-        NSInteger i = [menu numberOfItems];
-        while (--i > 2)
-            [menu removeItemAtIndex:i];
-        if ([bookmarks count] > 0)
-            [menu addItem:[NSMenuItem separatorItem]];
-        [self addMenuItemsForSearchBookmarks:bookmarks toMenu:menu];
-        
-    } else if ([menu isEqual:bookmarksMenu]) {
-        
-        NSArray *bookmarks = [[[BDSKBookmarkController 
sharedBookmarkController] bookmarkRoot] children];
-        NSInteger i = [menu numberOfItems];
-        while (--i > 4)
-            [menu removeItemAtIndex:i];
-        if ([bookmarks count] > 0)
-            [menu addItem:[NSMenuItem separatorItem]];
-        [self addMenuItemsForBookmarks:bookmarks toMenu:menu];
-        
     } else if ([menu isEqual:historyMenu]) {
         
         WebHistory *history = [WebHistory optionalSharedHistory];
@@ -814,14 +752,6 @@
     [[BDSKFileMatcher sharedFileMatcher] showWindow:sender];
 }
 
-- (IBAction)editSearchBookmarks:(id)sender {
-    [[BDSKSearchBookmarkController sharedBookmarkController] showWindow:self];
-}
-
-- (IBAction)showBookmarks:(id)sender{
-    [[BDSKBookmarkController sharedBookmarkController] showWindow:sender];
-}
-
 - (IBAction)clearHistory:(id)sender {
     [[WebHistory optionalSharedHistory] removeAllItems];
 }

Modified: trunk/bibdesk/BDSKBookmark.h
===================================================================
--- trunk/bibdesk/BDSKBookmark.h        2025-10-21 09:36:10 UTC (rev 29746)
+++ trunk/bibdesk/BDSKBookmark.h        2025-10-21 16:17:08 UTC (rev 29747)
@@ -68,6 +68,8 @@
 
 @property (nonatomic, nullable, weak) BDSKBookmark *parent;
 
+@property (nonatomic) BOOL menuNeedsUpdate;
+
 - (nullable NSArray *)children;
 - (NSUInteger)countOfChildren;
 - (BDSKBookmark *)objectInChildrenAtIndex:(NSUInteger)idx;

Modified: trunk/bibdesk/BDSKBookmark.m
===================================================================
--- trunk/bibdesk/BDSKBookmark.m        2025-10-21 09:36:10 UTC (rev 29746)
+++ trunk/bibdesk/BDSKBookmark.m        2025-10-21 16:17:08 UTC (rev 29747)
@@ -64,6 +64,7 @@
 @interface BDSKFolderBookmark : BDSKBookmark {
     NSString *name;
     NSMutableArray *children;
+    BOOL menuNeedsUpdate;
 }
 @end
 
@@ -78,7 +79,7 @@
 @implementation BDSKBookmark
 
 @synthesize parent;
-@dynamic dictionaryValue, bookmarkType, URL, name, icon, URLDescription;
+@dynamic dictionaryValue, bookmarkType, URL, name, icon, URLDescription, 
menuNeedsUpdate;
 
 static Class BDSKBookmarkClass = Nil;
 
@@ -156,6 +157,9 @@
 - (void)removeObjectFromChildrenAtIndex:(NSUInteger)idx {}
 - (void)removeChildrenAtIndexes:(NSIndexSet *)indexes {}
 
+- (BOOL)menuNeedsUpdate { return NO; }
+- (void)setMenuNeedsUpdate:(BOOL)flag {}
+
 - (BOOL)isDescendantOf:(BDSKBookmark *)bookmark {
     if (self == bookmark)
         return YES;
@@ -338,6 +342,7 @@
         name = [aName copy];
         children = [aChildren mutableCopy];
         [children setValue:self forKey:@"parent"];
+        menuNeedsUpdate = YES;
     }
     return self;
 }
@@ -405,6 +410,14 @@
     [children removeObjectsAtIndexes:indexes];
 }
 
+- (BOOL)menuNeedsUpdate {
+    return menuNeedsUpdate;
+}
+
+- (void)setMenuNeedsUpdate:(BOOL)flag {
+    menuNeedsUpdate = flag;
+}
+
 @end
 
 #pragma mark -

Modified: trunk/bibdesk/BDSKBookmarkController.h
===================================================================
--- trunk/bibdesk/BDSKBookmarkController.h      2025-10-21 09:36:10 UTC (rev 
29746)
+++ trunk/bibdesk/BDSKBookmarkController.h      2025-10-21 16:17:08 UTC (rev 
29747)
@@ -43,7 +43,7 @@
 
 @class BDSKBookmark, BDSKOutlineView;
 
-@interface BDSKBookmarkController : NSWindowController <NSOutlineViewDelegate, 
NSOutlineViewDataSource, NSToolbarDelegate, NSTouchBarDelegate> {
+@interface BDSKBookmarkController : NSWindowController <NSOutlineViewDelegate, 
NSOutlineViewDataSource, NSToolbarDelegate, NSTouchBarDelegate, NSMenuDelegate> 
{
     BDSKOutlineView *outlineView;
     NSSegmentedControl *addBookmarkButton;
     NSSegmentedControl *addFolderButton;

Modified: trunk/bibdesk/BDSKBookmarkController.m
===================================================================
--- trunk/bibdesk/BDSKBookmarkController.m      2025-10-21 09:36:10 UTC (rev 
29746)
+++ trunk/bibdesk/BDSKBookmarkController.m      2025-10-21 16:17:08 UTC (rev 
29747)
@@ -298,6 +298,73 @@
     [outlineView delete:sender];
 }
 
+#pragma mark Menu delegate
+
+- (void)addItemForBookmark:(BDSKBookmark *)bookmark toMenu:(NSMenu *)menu 
forDisplay:(BOOL)display {
+    if ([bookmark bookmarkType] == BDSKBookmarkTypeFolder) {
+        NSString *name = [bookmark name] ?: @"";
+        NSMenu *submenu = [[NSMenu alloc] initWithTitle:name];
+        [submenu setDelegate:self];
+        NSMenuItem *item = [menu addItemWithTitle:name submenu:submenu];
+        [item setRepresentedObject:bookmark];
+        if (display)
+            [item setImageAndSize:[bookmark icon]];
+        [bookmark setMenuNeedsUpdate:YES];
+    } else if ([bookmark bookmarkType] == BDSKBookmarkTypeSeparator) {
+        [menu addItem:[NSMenuItem separatorItem]];
+    } else {
+        NSString *name = [bookmark name] ?: @"";
+        NSMenuItem *item = [menu addItemWithTitle:name 
action:@selector(openBookmark:)  keyEquivalent:@""];
+        [item setRepresentedObject:bookmark];
+        if (display)
+            [item setImageAndSize:[bookmark icon]];
+    }
+}
+
+- (void)updateMenu:(NSMenu *)menu forDisplay:(BOOL)display {
+    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]]) {
+        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:display];
+        } else if (display) {
+            for (NSMenuItem *item in [menu itemArray]) {
+                BDSKBookmark *bm = [item representedObject];
+                if ([bm isKindOfClass:[BDSKBookmark class]])
+                    [item setImageAndSize:[bm icon]];
+            }
+        }
+    }
+}
+
+- (void)menuNeedsUpdate:(NSMenu *)menu {
+    [self updateMenu:menu forDisplay:YES];
+}
+
+- (BOOL)menuHasKeyEquivalent:(NSMenu *)menu forEvent:(NSEvent *)event 
target:(id *)target action:(SEL *)action {
+    if ([[NSUserDefaults standardUserDefaults] 
dictionaryForKey:@"NSUserKeyEquivalents"])
+        [self updateMenu:menu forDisplay:NO];
+    return NO;
+}
+
 #pragma mark Notification handlers
 
 - (void)handleApplicationWillTerminateNotification:(NSNotification 
*)notification {
@@ -429,6 +496,11 @@
                 break;
         }
         
+        if ([keyPath isEqualToString:CHILDREN_KEY])
+            [bookmark setMenuNeedsUpdate:YES];
+        else if ([keyPath isEqualToString:NAME_KEY])
+            [[bookmark parent] setMenuNeedsUpdate:YES];
+        
     } else {
         [super observeValueForKeyPath:keyPath ofObject:object change:change 
context:context];
     }

Modified: trunk/bibdesk/BDSKSearchBookmark.h
===================================================================
--- trunk/bibdesk/BDSKSearchBookmark.h  2025-10-21 09:36:10 UTC (rev 29746)
+++ trunk/bibdesk/BDSKSearchBookmark.h  2025-10-21 16:17:08 UTC (rev 29747)
@@ -73,6 +73,8 @@
 
 @property (nonatomic, nullable, weak) BDSKSearchBookmark *parent;
 
+@property (nonatomic) BOOL menuNeedsUpdate;
+
 - (nullable NSArray *)children;
 - (NSUInteger)countOfChildren;
 - (BDSKSearchBookmark *)objectInChildrenAtIndex:(NSUInteger)idx;

Modified: trunk/bibdesk/BDSKSearchBookmark.m
===================================================================
--- trunk/bibdesk/BDSKSearchBookmark.m  2025-10-21 09:36:10 UTC (rev 29746)
+++ trunk/bibdesk/BDSKSearchBookmark.m  2025-10-21 16:17:08 UTC (rev 29747)
@@ -61,6 +61,7 @@
 @interface BDSKFolderSearchBookmark : BDSKSearchBookmark {
     NSString *label;
     NSMutableArray *children;
+    BOOL menuNeedsUpdate;
 }
 @end
 
@@ -75,7 +76,7 @@
 @implementation BDSKSearchBookmark
 
 @synthesize parent;
-@dynamic dictionaryValue, bookmarkType, info, label, icon, name, searchTerm;
+@dynamic dictionaryValue, bookmarkType, info, label, icon, name, searchTerm, 
menuNeedsUpdate;
 
 static Class BDSKSearchBookmarkClass = Nil;
 
@@ -156,6 +157,9 @@
 - (void)removeObjectFromChildrenAtIndex:(NSUInteger)idx {}
 - (void)removeChildrenAtIndexes:(NSIndexSet *)indexes {}
 
+- (BOOL)menuNeedsUpdate { return NO; }
+- (void)setMenuNeedsUpdate:(BOOL)flag {}
+
 - (BOOL)isDescendantOf:(BDSKSearchBookmark *)bookmark {
     if (self == bookmark)
         return YES;
@@ -333,6 +337,7 @@
         label = [aLabel copy];
         children = [aChildren mutableCopy];
         [children setValue:self forKey:@"parent"];
+        menuNeedsUpdate = YES;
     }
     return self;
 }
@@ -400,6 +405,14 @@
     [children removeObjectsAtIndexes:indexes];
 }
 
+- (BOOL)menuNeedsUpdate {
+    return menuNeedsUpdate;
+}
+
+- (void)setMenuNeedsUpdate:(BOOL)flag {
+    menuNeedsUpdate = flag;
+}
+
 @end
 
 #pragma mark -

Modified: trunk/bibdesk/BDSKSearchBookmarkController.h
===================================================================
--- trunk/bibdesk/BDSKSearchBookmarkController.h        2025-10-21 09:36:10 UTC 
(rev 29746)
+++ trunk/bibdesk/BDSKSearchBookmarkController.h        2025-10-21 16:17:08 UTC 
(rev 29747)
@@ -42,7 +42,7 @@
 
 @class BDSKSearchBookmark, BDSKOutlineView;
 
-@interface BDSKSearchBookmarkController : NSWindowController 
<NSOutlineViewDelegate, NSOutlineViewDataSource, NSToolbarDelegate, 
NSTouchBarDelegate> {
+@interface BDSKSearchBookmarkController : NSWindowController 
<NSOutlineViewDelegate, NSOutlineViewDataSource, NSToolbarDelegate, 
NSTouchBarDelegate, NSMenuDelegate> {
     BDSKOutlineView *outlineView;
     NSSegmentedControl *addFolderButton;
     NSSegmentedControl *addSeparatorButton;

Modified: trunk/bibdesk/BDSKSearchBookmarkController.m
===================================================================
--- trunk/bibdesk/BDSKSearchBookmarkController.m        2025-10-21 09:36:10 UTC 
(rev 29746)
+++ trunk/bibdesk/BDSKSearchBookmarkController.m        2025-10-21 16:17:08 UTC 
(rev 29747)
@@ -42,6 +42,7 @@
 #import "BDSKSearchGroupSheetController.h"
 #import "BDSKStringConstants.h"
 #import "NSImage_BDSKExtensions.h"
+#import "NSMenu_BDSKExtensions.h"
 #import "BDSKOutlineView.h"
 #import "NSWindowController_BDSKExtensions.h"
 #import "NSAnimationContext_BDSKExtensions.h"
@@ -288,6 +289,61 @@
     return YES;
 }
 
+#pragma mark NSMenu delegate
+
+- (void)addItemForBookmark:(BDSKSearchBookmark *)bookmark toMenu:(NSMenu 
*)menu {
+    if ([bookmark bookmarkType] == BDSKSearchBookmarkTypeFolder) {
+        NSString *label = [bookmark label] ?: @"";
+        NSMenu *submenu = [[NSMenu alloc] initWithTitle:label];
+        [submenu setDelegate:self];
+        NSMenuItem *item = [menu addItemWithTitle:label submenu:submenu];
+        [item setRepresentedObject:bookmark];
+        [item setImageAndSize:[bookmark icon]];
+        [bookmark setMenuNeedsUpdate:YES];
+    } else if ([bookmark bookmarkType] == BDSKSearchBookmarkTypeSeparator) {
+        [menu addItem:[NSMenuItem separatorItem]];
+    } else {
+        NSString *label = [bookmark label] ?: @"";
+        NSMenuItem *item = [menu addItemWithTitle:label 
action:@selector(newSearchGroupFromBookmark:)  keyEquivalent:@""];
+        [item setRepresentedObject:bookmark];
+        [item setImageAndSize:[bookmark icon]];
+    }
+}
+
+- (void)menuNeedsUpdate:(NSMenu *)menu {
+    NSMenu *supermenu = [menu supermenu];
+    NSInteger idx = [supermenu indexOfItemWithSubmenu:menu];
+    BDSKSearchBookmark *bookmark = nil;
+    
+    if (supermenu == [NSApp mainMenu])
+        bookmark = [self bookmarkRoot];
+    else if (idx >= 0)
+        bookmark = [[supermenu itemAtIndex:idx] representedObject];
+    
+    if ([bookmark isKindOfClass:[BDSKSearchBookmark class]]) {
+        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 (BDSKSearchBookmark *bm in bookmarks)
+                [self addItemForBookmark:bm toMenu:menu];
+        }
+    }
+}
+
+- (BOOL)menuHasKeyEquivalent:(NSMenu *)menu forEvent:(NSEvent *)event 
target:(id *)target action:(SEL *)action {
+    if ([[NSUserDefaults standardUserDefaults] 
dictionaryForKey:@"NSUserKeyEquivalents"])
+        [self menuNeedsUpdate:menu];
+    return NO;
+}
+
 #pragma mark Undo support
 
 - (void)handleWillUndoChange:(NSNotification *)notification {
@@ -400,6 +456,11 @@
                 break;
         }
         
+        if ([keyPath isEqualToString:CHILDREN_KEY])
+            [bookmark setMenuNeedsUpdate:YES];
+        else if ([keyPath isEqualToString:LABEL_KEY])
+            [[bookmark parent] setMenuNeedsUpdate:YES];
+        
         [self saveBookmarks];
     } else {
         [super observeValueForKeyPath:keyPath ofObject:object change:change 
context:context];

Modified: trunk/bibdesk/BDSKTextImportController.m
===================================================================
--- trunk/bibdesk/BDSKTextImportController.m    2025-10-21 09:36:10 UTC (rev 
29746)
+++ trunk/bibdesk/BDSKTextImportController.m    2025-10-21 16:17:08 UTC (rev 
29747)
@@ -75,6 +75,7 @@
 #import "BDSKComplexString.h"
 #import "NSWorkspace_BDSKExtensions.h"
 #import "BDSKDownloadManager.h"
+#import "BDSKBookmark.h"
 
 #define BDSKTextImportControllerFrameAutosaveName @"BDSKTextImportController 
Frame Autosave Name"
 
@@ -380,6 +381,8 @@
 
 - (IBAction)openBookmark:(id)sender{
     NSURL *url = [sender representedObject];
+    if ([url isKindOfClass:[BDSKBookmark class]])
+        url = [(BDSKBookmark *)url URL];
     if (url)
         [self showWebViewWithURL:url];
 }

Modified: trunk/bibdesk/BDSKURLSheetController.m
===================================================================
--- trunk/bibdesk/BDSKURLSheetController.m      2025-10-21 09:36:10 UTC (rev 
29746)
+++ trunk/bibdesk/BDSKURLSheetController.m      2025-10-21 16:17:08 UTC (rev 
29747)
@@ -41,6 +41,7 @@
 #import "NSURL_BDSKExtensions.h"
 #import "NSString_BDSKExtensions.h"
 #import "BDSKTouchBarButtonGroup.h"
+#import "BDSKBookmark.h"
 
 #define BDSKTouchBarItemIdentifierButtons 
@"edu.ucsd.mmccrack.bibdesk.touchbar-item.buttons"
 
@@ -80,7 +81,10 @@
 }
 
 - (void)openBookmark:(id)sender {
-    [self setUrlString:[sender representedObject]];
+    NSURL *url = [sender representedObject];
+    if ([url isKindOfClass:[BDSKBookmark class]])
+        url = [(BDSKBookmark *)url URL];
+    [self setUrlString:[url absoluteString]];
 }
 
 #pragma mark Touch Bar

Modified: trunk/bibdesk/Base.lproj/MainMenu.xib
===================================================================
--- trunk/bibdesk/Base.lproj/MainMenu.xib       2025-10-21 09:36:10 UTC (rev 
29746)
+++ trunk/bibdesk/Base.lproj/MainMenu.xib       2025-10-21 16:17:08 UTC (rev 
29747)
@@ -912,12 +912,12 @@
                             <menuItem title="Edit Search Bookmarks…" 
keyEquivalent="b" id="1141">
                                 <modifierMask key="keyEquivalentModifierMask" 
option="YES" command="YES"/>
                                 <connections>
-                                    <action selector="editSearchBookmarks:" 
target="214" id="1143"/>
+                                    <action selector="showWindow:" 
target="YuN-Uf-dgv" id="N5I-Z2-Fia"/>
                                 </connections>
                             </menuItem>
                         </items>
                         <connections>
-                            <outlet property="delegate" destination="214" 
id="1146"/>
+                            <outlet property="delegate" 
destination="YuN-Uf-dgv" id="uxY-BT-K0L"/>
                         </connections>
                     </menu>
                 </menuItem>
@@ -936,7 +936,7 @@
                             </menuItem>
                             <menuItem title="Edit Bookmarks…" id="1173">
                                 <connections>
-                                    <action selector="showBookmarks:" 
target="214" id="1174"/>
+                                    <action selector="showWindow:" 
target="I9c-Q4-e2D" id="DGN-h1-RJB"/>
                                 </connections>
                             </menuItem>
                             <menuItem isSeparatorItem="YES" id="1319"/>
@@ -950,7 +950,7 @@
                             </menuItem>
                         </items>
                         <connections>
-                            <outlet property="delegate" destination="214" 
id="1177"/>
+                            <outlet property="delegate" 
destination="I9c-Q4-e2D" id="5FM-54-OwP"/>
                         </connections>
                     </menu>
                 </menuItem>
@@ -1056,13 +1056,11 @@
         </menu>
         <customObject id="214" userLabel="AppController" 
customClass="BDSKAppController">
             <connections>
-                <outlet property="bookmarksMenu" destination="1171" id="1176"/>
                 <outlet property="columnsMenu" destination="611" id="1023"/>
                 <outlet property="groupFieldMenu" destination="1256" 
id="1261"/>
                 <outlet property="groupSortMenu" destination="742" id="1024"/>
                 <outlet property="historyMenu" destination="1321" id="1323"/>
                 <outlet property="previewDisplayMenu" destination="893" 
id="1198"/>
-                <outlet property="searchBookmarksMenu" destination="1137" 
id="1145"/>
                 <outlet property="shareMenu" destination="9js-A4-ZBi" 
id="i5L-px-YWA"/>
                 <outlet property="sidePreviewDisplayMenu" destination="1203" 
id="1212"/>
                 <outlet property="templatedCopyMenu" destination="533" 
id="ycb-kU-uDO"/>
@@ -1080,5 +1078,7 @@
                 <outlet property="updaterController" destination="1235" 
id="Byj-Ml-W89"/>
             </connections>
         </customObject>
+        <customObject id="YuN-Uf-dgv" 
customClass="BDSKSearchBookmarkController"/>
+        <customObject id="I9c-Q4-e2D" customClass="BDSKBookmarkController"/>
     </objects>
 </document>

Modified: trunk/bibdesk/BibDocument_Groups.m
===================================================================
--- trunk/bibdesk/BibDocument_Groups.m  2025-10-21 09:36:10 UTC (rev 29746)
+++ trunk/bibdesk/BibDocument_Groups.m  2025-10-21 16:17:08 UTC (rev 29747)
@@ -97,6 +97,8 @@
 #import "BDSKControlTableCellView.h"
 #import "NSPointerFunctions_BDSKExtensions.h"
 #import "CFString_BDSKExtensions.h"
+#import "BDSKBookmark.h"
+#import "BDSKSearchBookmark.h"
 
 static Boolean BDSKCaseInsensitiveStringEqual(const void *value1, const void 
*value2);
 static CFHashCode BDSKCaseInsensitiveStringHash(const void *value);
@@ -921,7 +923,7 @@
 }
 
 - (IBAction)newSearchGroupFromBookmark:(id)sender {
-    NSDictionary *dict = [sender representedObject];
+    NSDictionary *dict = [[sender representedObject] info];
     BDSKSearchGroup *group = [[BDSKSearchGroup alloc] initWithDictionary:dict];
     if (group) {
         [groups addChildGroup:(id)group];
@@ -1285,7 +1287,10 @@
 }
 
 - (IBAction)openBookmark:(id)sender{
-    if ([self openURL:[sender representedObject]] == NO)
+    NSURL *url = [sender representedObject];
+    if ([url isKindOfClass:[BDSKBookmark class]])
+        url = [(BDSKBookmark *)url URL];
+    if ([self openURL:url] == NO)
         NSBeep();
 }
 

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