update "open in tabs" entires in bookmarks menu when adding or deleting items
to containers w/out requiring a restart (bug 272117)
This commit is contained in:
Родитель
3a7c1d1b8e
Коммит
ae681d6727
|
@ -45,6 +45,10 @@
|
||||||
// Definitions
|
// Definitions
|
||||||
#define MENU_TRUNCATION_CHARS 60
|
#define MENU_TRUNCATION_CHARS 60
|
||||||
|
|
||||||
|
// used to determine if we've already added "Open In Tabs" to a menu. This will be on
|
||||||
|
// the "Open In Tabs" item, not the separator.
|
||||||
|
const long kOpenInTabsTag = 0xBEEF;
|
||||||
|
|
||||||
@interface BookmarkMenu(Private)
|
@interface BookmarkMenu(Private)
|
||||||
- (NSMenu *)menu;
|
- (NSMenu *)menu;
|
||||||
- (BookmarkFolder *)rootBookmarkFolder;
|
- (BookmarkFolder *)rootBookmarkFolder;
|
||||||
|
@ -129,23 +133,64 @@
|
||||||
[menu removeItemAtIndex:firstItemIndex];
|
[menu removeItemAtIndex:firstItemIndex];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// -addOpenInTabsToMenu:forBookmarkFolder:
|
||||||
|
//
|
||||||
|
// Adds the "Open In Tabs" option to open all items in the folder |inFolder| as a tabgroup.
|
||||||
|
// The main bookmark menu folder doesn't get this item, nor does any container that doesn't
|
||||||
|
// have any children. We use |kOpenInTabsTag| to determine if we've already added this
|
||||||
|
// to the menu so we don't do it twice.
|
||||||
|
//
|
||||||
|
- (void)addOpenInTabsToMenu:(NSMenu*)inMenu forBookmarkFolder:(BookmarkFolder*)inFolder
|
||||||
|
{
|
||||||
|
// first make sure it's not already present before we add it
|
||||||
|
if ([inMenu indexOfItemWithTag:kOpenInTabsTag] != -1)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// add the "Open In Tabs" option to open all items in this subfolder (not the main bookmark
|
||||||
|
// folder) as a tabgroup.
|
||||||
|
unsigned long childCount = [inFolder count];
|
||||||
|
if (inFolder != [[BookmarkManager sharedBookmarkManager] bookmarkMenuFolder] && childCount > 0) {
|
||||||
|
[inMenu addItem:[NSMenuItem separatorItem]];
|
||||||
|
|
||||||
|
NSMenuItem *menuItem = [[[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"Open in Tabs", nil) action:nil keyEquivalent:@""] autorelease];
|
||||||
|
[inMenu addItem:menuItem];
|
||||||
|
[menuItem setTarget:[NSApp delegate]];
|
||||||
|
[menuItem setTag:kOpenInTabsTag];
|
||||||
|
[menuItem setAction:@selector(openMenuBookmark:)];
|
||||||
|
[menuItem setRepresentedObject:inFolder];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// -removeOpenInTabsFromMenu:forBookmarkFolder:
|
||||||
|
//
|
||||||
|
// Removes the "Open In Tabs" menu item and separator from |inMenu|. This is used when |inFolder|
|
||||||
|
// drops to zero children.
|
||||||
|
//
|
||||||
|
- (void)removeOpenInTabsFromMenu:(NSMenu*)inMenu forBookmarkFolder:(BookmarkFolder*)inFolder
|
||||||
|
{
|
||||||
|
// first check if there are any children remaining. If so, bail. Then check if the
|
||||||
|
// menu is there at all by checking for our special tag. If not, bail.
|
||||||
|
unsigned long childCount = [inFolder count];
|
||||||
|
if (childCount)
|
||||||
|
return;
|
||||||
|
long location = [inMenu indexOfItemWithTag:kOpenInTabsTag];
|
||||||
|
if (location == -1)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// remove the menu item and the seaparator before it
|
||||||
|
[inMenu removeItemAtIndex:location--];
|
||||||
|
[inMenu removeItemAtIndex:location];
|
||||||
|
}
|
||||||
|
|
||||||
- (void)constructMenu:(NSMenu *)menu forBookmarkFolder:(BookmarkFolder *)aFolder
|
- (void)constructMenu:(NSMenu *)menu forBookmarkFolder:(BookmarkFolder *)aFolder
|
||||||
{
|
{
|
||||||
unsigned long childCount = [aFolder count];
|
unsigned long childCount = [aFolder count];
|
||||||
for (unsigned long i = 0; i < childCount; i++)
|
for (unsigned long i = 0; i < childCount; i++)
|
||||||
[self addItem:[aFolder objectAtIndex:i] toMenu:menu atIndex:i];
|
[self addItem:[aFolder objectAtIndex:i] toMenu:menu atIndex:i];
|
||||||
|
|
||||||
// add the "Open In Tabs" option to open all items in this subfolder (not the main bookmark
|
|
||||||
// folder) as a tabgroup.
|
|
||||||
if (aFolder != [[BookmarkManager sharedBookmarkManager] bookmarkMenuFolder] && childCount > 0) {
|
|
||||||
[menu addItem:[NSMenuItem separatorItem]];
|
|
||||||
|
|
||||||
NSMenuItem *menuItem = [[[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"Open in Tabs", nil) action:nil keyEquivalent:@""] autorelease];
|
[self addOpenInTabsToMenu:menu forBookmarkFolder:aFolder];
|
||||||
[menu addItem:menuItem];
|
|
||||||
[menuItem setTarget:[NSApp delegate]];
|
|
||||||
[menuItem setAction:@selector(openMenuBookmark:)];
|
|
||||||
[menuItem setRepresentedObject:aFolder];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)addItem:(BookmarkItem *)anItem toMenu:(NSMenu *)aMenu atIndex:(int)aIndex
|
- (void)addItem:(BookmarkItem *)anItem toMenu:(NSMenu *)aMenu atIndex:(int)aIndex
|
||||||
|
@ -223,8 +268,10 @@
|
||||||
if (menu) {
|
if (menu) {
|
||||||
NSDictionary *dict = [note userInfo];
|
NSDictionary *dict = [note userInfo];
|
||||||
[self addItem:[dict objectForKey:BookmarkFolderChildKey] toMenu:menu atIndex:[[dict objectForKey:BookmarkFolderChildIndexKey] unsignedIntValue]];
|
[self addItem:[dict objectForKey:BookmarkFolderChildKey] toMenu:menu atIndex:[[dict objectForKey:BookmarkFolderChildIndexKey] unsignedIntValue]];
|
||||||
|
[self addOpenInTabsToMenu:menu forBookmarkFolder:aFolder];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)bookmarkRemoved:(NSNotification *)note
|
- (void)bookmarkRemoved:(NSNotification *)note
|
||||||
{
|
{
|
||||||
BookmarkFolder *aFolder = [note object];
|
BookmarkFolder *aFolder = [note object];
|
||||||
|
@ -236,6 +283,7 @@
|
||||||
if (menu) {
|
if (menu) {
|
||||||
BookmarkItem *anItem = [[note userInfo] objectForKey:BookmarkFolderChildKey];
|
BookmarkItem *anItem = [[note userInfo] objectForKey:BookmarkFolderChildKey];
|
||||||
[menu removeItemAtIndex:[menu indexOfItemWithRepresentedObject:anItem]];
|
[menu removeItemAtIndex:[menu indexOfItemWithRepresentedObject:anItem]];
|
||||||
|
[self removeOpenInTabsFromMenu:menu forBookmarkFolder:aFolder];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче