diff --git a/mozilla/camino/resources/localized/English.lproj/BrowserWindow.nib/info.nib b/mozilla/camino/resources/localized/English.lproj/BrowserWindow.nib/info.nib index b785fd99835..95fe74f2556 100644 --- a/mozilla/camino/resources/localized/English.lproj/BrowserWindow.nib/info.nib +++ b/mozilla/camino/resources/localized/English.lproj/BrowserWindow.nib/info.nib @@ -6,8 +6,6 @@ 148 35 445 438 0 0 1280 938 IBEditorPositions - 124 - 58 576 170 96 0 0 1152 746 297 72 297 213 294 0 0 1152 746 314 @@ -32,17 +30,7 @@ 337 341 606 458 0 0 1280 832 IBFramework Version - 362.0 - IBGroupedObjects - - 7 - - 641 - 640 - - - IBLastGroupID - 10 + 364.0 IBLockedObjects 748 @@ -50,6 +38,6 @@ 889 IBSystem Version - 7D24 + 7F44 diff --git a/mozilla/camino/resources/localized/English.lproj/BrowserWindow.nib/objects.nib b/mozilla/camino/resources/localized/English.lproj/BrowserWindow.nib/objects.nib index f3426ac87f8..64c9d1971ba 100644 Binary files a/mozilla/camino/resources/localized/English.lproj/BrowserWindow.nib/objects.nib and b/mozilla/camino/resources/localized/English.lproj/BrowserWindow.nib/objects.nib differ diff --git a/mozilla/camino/resources/localized/English.lproj/Localizable.strings b/mozilla/camino/resources/localized/English.lproj/Localizable.strings index 7aad48c6d72..adf40a1c3ef 100644 Binary files a/mozilla/camino/resources/localized/English.lproj/Localizable.strings and b/mozilla/camino/resources/localized/English.lproj/Localizable.strings differ diff --git a/mozilla/camino/src/application/MainController.mm b/mozilla/camino/src/application/MainController.mm index 2566082314e..8e476ab9343 100644 --- a/mozilla/camino/src/application/MainController.mm +++ b/mozilla/camino/src/application/MainController.mm @@ -434,9 +434,9 @@ const int kReuseWindowOnAE = 2; if (openInNewWindow) [self openBrowserWindowWithURLs:[(BookmarkFolder *)item childURLs] behind:behindWindow]; else if (openInNewTab) - [browserWindowController openTabGroup:[(BookmarkFolder *)item childURLs] replaceExistingTabs:NO]; + [browserWindowController openURLArray:[(BookmarkFolder *)item childURLs] replaceExistingTabs:NO]; else - [browserWindowController openTabGroup:[(BookmarkFolder *)item childURLs] replaceExistingTabs:YES]; + [browserWindowController openURLArray:[(BookmarkFolder *)item childURLs] replaceExistingTabs:YES]; } } @@ -831,7 +831,7 @@ const int kReuseWindowOnAE = 2; [browser showWindow: self]; } - [browser openTabGroup:urlArray replaceExistingTabs:YES]; + [browser openURLArray:urlArray replaceExistingTabs:YES]; return browser; } diff --git a/mozilla/camino/src/bookmarks/BookmarkButton.mm b/mozilla/camino/src/bookmarks/BookmarkButton.mm index 76a0a1a1c9c..db12ce52b62 100644 --- a/mozilla/camino/src/bookmarks/BookmarkButton.mm +++ b/mozilla/camino/src/bookmarks/BookmarkButton.mm @@ -94,7 +94,6 @@ [super dealloc]; } - - (void)setBookmarkItem:(BookmarkItem*)aItem { [aItem retain]; @@ -173,42 +172,7 @@ -(NSMenu*)menuForEvent:(NSEvent*)aEvent { - BookmarkItem *item = [self BookmarkItem]; - if (item) { - NSMenu* contextMenu = [[[self superview] menu] copy]; - [[contextMenu itemArray] makeObjectsPerformSelector:@selector(setTarget:) withObject: self]; - NSString *nulString = [NSString string]; - // clean the menu out - int numItems = [contextMenu numberOfItems]; - int itemIndex = [contextMenu indexOfItemWithTarget:self andAction:@selector(showBookmarkInfo:)]; - while (numItems > (itemIndex+1)) - [contextMenu removeItemAtIndex:(--numItems)]; - // set up menu - if ([item isKindOfClass:[Bookmark class]]) { - itemIndex = [contextMenu indexOfItemWithTarget:self andAction:@selector(openBookmarkInNewWindow:)]; - [[contextMenu itemAtIndex:itemIndex] setTitle:NSLocalizedString(@"Open in New Window",@"Open in New Window")]; - itemIndex = [contextMenu indexOfItemWithTarget:self andAction:@selector(openBookmarkInNewTab:)]; - [[contextMenu itemAtIndex:itemIndex] setTitle:NSLocalizedString(@"Open in New Tab",@"Open in New Tab")]; - } else if ([item isKindOfClass:[BookmarkFolder class]]) { - itemIndex = [contextMenu indexOfItemWithTarget:self andAction:@selector(openBookmarkInNewWindow:)]; - [[contextMenu itemAtIndex:itemIndex] setTitle:NSLocalizedString(@"Open Tabs in New Window",@"Open Tabs in New Window")]; - itemIndex = [contextMenu indexOfItemWithTarget:self andAction:@selector(openBookmarkInNewTab:)]; - [[contextMenu itemAtIndex:itemIndex] setTitle:NSLocalizedString(@"Open in Tabs",@"Open in Tabs")]; - } - // if it's a button, it's got to be on toolbar folder, so we can delete & make new folders - NSMenuItem *menuItem = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"Delete",@"Delete") action:@selector(deleteBookmarks:) keyEquivalent:nulString]; - [menuItem setTarget:self]; - [contextMenu addItem:menuItem]; - [menuItem release]; - [contextMenu addItem:[NSMenuItem separatorItem]]; - // create new folder - menuItem = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"Create New Folder...",@"Create New Folder...") action:@selector(addFolder:) keyEquivalent:nulString]; - [menuItem setTarget:self]; - [contextMenu addItem:menuItem]; - [menuItem release]; - return [contextMenu autorelease]; - } - return nil; + return [[BookmarkManager sharedBookmarkManager] contextMenuForItem:[self BookmarkItem] fromView:nil target:self]; } // diff --git a/mozilla/camino/src/bookmarks/BookmarkManager.h b/mozilla/camino/src/bookmarks/BookmarkManager.h index feb52b6d79f..368bc66ca20 100644 --- a/mozilla/camino/src/bookmarks/BookmarkManager.h +++ b/mozilla/camino/src/bookmarks/BookmarkManager.h @@ -42,6 +42,7 @@ @class BookmarkFolder; @class BookmarkImportDlgController; +@class BookmarkOutlineView; @class KindaSmartFolderManager; @class RunLoopMessenger; @@ -92,6 +93,7 @@ -(NSArray *)searchBookmarksForString:(NSString *)searchString; -(unsigned) firstUserCollection; -(BOOL) isDropValid:(NSArray *)items toFolder:(BookmarkFolder *)parent; +-(NSMenu *)contextMenuForItem:(id)item fromView:(BookmarkOutlineView *)outlineView target:(id)target; // Reading bookmark files -(BOOL) readBookmarks; diff --git a/mozilla/camino/src/bookmarks/BookmarkManager.mm b/mozilla/camino/src/bookmarks/BookmarkManager.mm index 67a0cba492c..f1b00f59da2 100644 --- a/mozilla/camino/src/bookmarks/BookmarkManager.mm +++ b/mozilla/camino/src/bookmarks/BookmarkManager.mm @@ -21,6 +21,7 @@ * * Contributor(s): * David Haas +* Josh Aas * * * Alternatively, the contents of this file may be used under the terms of @@ -49,6 +50,8 @@ #import "BookmarkFolder.h" #import "BookmarkToolbar.h" #import "BookmarkImportDlgController.h" +#import "BookmarkOutlineView.h" +#import "BookmarkViewController.h" #import "KindaSmartFolderManager.h" #import "BrowserWindowController.h" #import "MainController.h" @@ -456,6 +459,82 @@ static unsigned gFirstUserCollection = 0; return YES; } +// unified context menu generator for all kinds of bookmarks +// this can be called from a bookmark outline view +// or from a bookmark button, which should pass a nil outlineView +- (NSMenu *)contextMenuForItem:(id)item fromView:(BookmarkOutlineView *)outlineView target:(id)target +{ + // don't do anything if item == nil + if (!item) + return nil; + + NSString * nulString = [NSString string]; + NSMenu * contextMenu = [[[NSMenu alloc] initWithTitle:@"notitle"] autorelease]; + BOOL isFolder = [item isKindOfClass:[BookmarkFolder class]]; + NSString * menuTitle; + + // open in new window + if (isFolder || (outlineView && ([outlineView numberOfSelectedRows] > 1))) + menuTitle = NSLocalizedString(@"Open Tabs in New Window", @""); + else + menuTitle = NSLocalizedString(@"Open in New Window", @""); + NSMenuItem *menuItem = [[NSMenuItem alloc] initWithTitle:menuTitle action:@selector(openBookmarkInNewWindow:) keyEquivalent:nulString]; + [menuItem setTarget:target]; + [contextMenu addItem:menuItem]; + + // open in new tab + if (isFolder || ([outlineView numberOfSelectedRows] > 1)) + menuTitle = NSLocalizedString(@"Open in New Tabs", @""); + else + menuTitle = NSLocalizedString(@"Open in New Tab", @""); + menuItem = [[NSMenuItem alloc] initWithTitle:menuTitle action:@selector(openBookmarkInNewTab:) keyEquivalent:nulString]; + [menuItem setTarget:target]; + [contextMenu addItem:menuItem]; + + if (!outlineView || ([outlineView numberOfSelectedRows] == 1)) { + [contextMenu addItem:[NSMenuItem separatorItem]]; + menuTitle = NSLocalizedString(@"Get Info", @""); + menuItem = [[NSMenuItem alloc] initWithTitle:menuTitle action:@selector(showBookmarkInfo:) keyEquivalent:nulString]; + [menuItem setTarget:target]; + [contextMenu addItem:menuItem]; + } + + if ([item isKindOfClass:[BookmarkFolder class]]) { + menuTitle = NSLocalizedString(@"Use as Dock Menu", @""); + menuItem = [[NSMenuItem alloc] initWithTitle:menuTitle action:@selector(makeDockMenu:) keyEquivalent:nulString]; + [menuItem setTarget:item]; + [contextMenu addItem:menuItem]; + } + + BOOL allowNewFolder = NO; + if ([target isKindOfClass:[BookmarkViewController class]]) { + if (![[target activeCollection] isSmartFolder]) + allowNewFolder = YES; + } else + allowNewFolder = YES; + if (allowNewFolder) { + // space + [contextMenu addItem:[NSMenuItem separatorItem]]; + // create new folder + menuTitle = NSLocalizedString(@"Create New Folder...", @""); + menuItem = [[NSMenuItem alloc] initWithTitle:menuTitle action:@selector(addFolder:) keyEquivalent:nulString]; + [menuItem setTarget:target]; + [contextMenu addItem:menuItem]; + } + + id parent = [item parent]; + if ([parent isKindOfClass:[BookmarkFolder class]] && ![parent isSmartFolder]) { + // space + [contextMenu addItem:[NSMenuItem separatorItem]]; + // delete + menuTitle = NSLocalizedString(@"Delete", @""); + menuItem = [[NSMenuItem alloc] initWithTitle:menuTitle action:@selector(deleteBookmarks:) keyEquivalent:nulString]; + [menuItem setTarget:target]; + [contextMenu addItem:menuItem]; + } + return contextMenu; +} + #pragma mark - // // BookmarkClient protocol - so we know when to write out diff --git a/mozilla/camino/src/bookmarks/BookmarkOutlineView.mm b/mozilla/camino/src/bookmarks/BookmarkOutlineView.mm index cbb2de5aec4..0eab303e6a8 100644 --- a/mozilla/camino/src/bookmarks/BookmarkOutlineView.mm +++ b/mozilla/camino/src/bookmarks/BookmarkOutlineView.mm @@ -22,6 +22,7 @@ * Contributor(s): * Joe Hewitt (Original Author) * David Haas +* Josh Aas * * * Alternatively, the contents of this file may be used under the terms of @@ -41,6 +42,7 @@ #import "BookmarkOutlineView.h" #import "BookmarkFolder.h" #import "Bookmark.h" +#import "BookmarkManager.h" #import "NSArray+Utils.h" @@ -51,16 +53,30 @@ [self registerForDraggedTypes:[NSArray arrayWithObjects:@"MozURLType", @"MozBookmarkType", NSStringPboardType, NSURLPboardType, nil]]; } +-(NSMenu*)menu +{ + BookmarkManager *bm = [BookmarkManager sharedBookmarkManager]; + BookmarkFolder *activeCollection = [[self delegate] activeCollection]; + // only give a default menu if its the bookmark menu or toolbar + if ((activeCollection == [bm bookmarkMenuFolder]) || (activeCollection == [bm toolbarFolder])) { + // set up default menu + NSMenu *menu = [[[NSMenu alloc] init] autorelease]; + NSMenuItem *menuItem = [[[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"Create New Folder...", @"") + action:@selector(addFolder:) keyEquivalent:[NSString string]] autorelease]; + [menuItem setTarget:[self delegate]]; + [menu addItem:menuItem]; + return menu; + } + return nil; +} + - (void)draggedImage:(NSImage *)anImage endedAt:(NSPoint)aPoint operation:(NSDragOperation)operation { - if (operation == NSDragOperationDelete) - { + if (operation == NSDragOperationDelete) { NSPasteboard* pboard = [NSPasteboard pasteboardWithName:NSDragPboard]; NSArray* bookmarks = [NSArray pointerArrayFromDataArrayForMozBookmarkDrop:[pboard propertyListForType: @"MozBookmarkType"]]; - if (bookmarks) - { - for (unsigned int i = 0; i < [bookmarks count]; ++i) - { + if (bookmarks) { + for (unsigned int i = 0; i < [bookmarks count]; ++i) { BookmarkItem* item = [bookmarks objectAtIndex:i]; [[item parent] deleteChild:item]; } diff --git a/mozilla/camino/src/bookmarks/BookmarkViewController.h b/mozilla/camino/src/bookmarks/BookmarkViewController.h index 47e5615bdd1..c2580847726 100644 --- a/mozilla/camino/src/bookmarks/BookmarkViewController.h +++ b/mozilla/camino/src/bookmarks/BookmarkViewController.h @@ -67,7 +67,7 @@ IBOutlet BookmarkOutlineView* mItemPane; IBOutlet NSTableView* mSearchPane; // shows search results, can be hidden - IBOutlet HistoryDataSource* mHistorySource; //can swap to this for history data + IBOutlet HistoryDataSource* mHistorySource; // can swap to this for history data BOOL mSetupComplete; // have we been fully initialized? BOOL mSplittersRestored; // splitters can only be positioned after we resize to fit the window diff --git a/mozilla/camino/src/bookmarks/BookmarkViewController.mm b/mozilla/camino/src/bookmarks/BookmarkViewController.mm index d9f4003db8c..3425a4b2339 100644 --- a/mozilla/camino/src/bookmarks/BookmarkViewController.mm +++ b/mozilla/camino/src/bookmarks/BookmarkViewController.mm @@ -20,9 +20,10 @@ * the Initial Developer. All Rights Reserved. * * Contributor(s): -* Simon Fraser -* Max Horn -* David Haas +* Simon Fraser +* Max Horn +* David Haas +* Simon Woodside * * * Alternatively, the contents of this file may be used under the terms of @@ -1141,52 +1142,9 @@ const long kMinSearchPaneHeight = 80; return nil; } - - (NSMenu *)outlineView:(NSOutlineView *)outlineView contextMenuForItem:(id)item +- (NSMenu *)outlineView:(NSOutlineView *)outlineView contextMenuForItem:(id)item { - NSMenu *contextMenu = nil; - if (item) { - NSString *nulString = [NSString string]; - contextMenu = [mItemPane menu]; - // clean the menu out - int numItems = [contextMenu numberOfItems]; - int itemIndex = [contextMenu indexOfItemWithTarget:self andAction:@selector(showBookmarkInfo:)]; - while (numItems > (itemIndex+1)) - [contextMenu removeItemAtIndex:(--numItems)]; - if ([item isKindOfClass:[Bookmark class]]) { - itemIndex = [contextMenu indexOfItemWithTarget:self andAction:@selector(openBookmarkInNewWindow:)]; - [[contextMenu itemAtIndex:itemIndex] setTitle:NSLocalizedString(@"Open in New Window",@"Open in New Window")]; - itemIndex = [contextMenu indexOfItemWithTarget:self andAction:@selector(openBookmarkInNewTab:)]; - [[contextMenu itemAtIndex:itemIndex] setTitle:NSLocalizedString(@"Open in New Tab",@"Open in New Tab")]; - } else if ([item isKindOfClass:[BookmarkFolder class]]) { - itemIndex = [contextMenu indexOfItemWithTarget:self andAction:@selector(openBookmarkInNewWindow:)]; - [[contextMenu itemAtIndex:itemIndex] setTitle:NSLocalizedString(@"Open Tabs in New Window",@"Open Tabs in New Window")]; - itemIndex = [contextMenu indexOfItemWithTarget:self andAction:@selector(openBookmarkInNewTab:)]; - [[contextMenu itemAtIndex:itemIndex] setTitle:NSLocalizedString(@"Open in Tabs",@"Open in Tabs")]; - NSMenuItem *menuItem = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"Use as Dock Menu",@"Use as Dock Menu") action:@selector(makeDockMenu:) keyEquivalent:nulString]; - [menuItem setTarget:item]; - [contextMenu addItem:menuItem]; - [menuItem release]; - [contextMenu addItem:[NSMenuItem separatorItem]]; - } - id parent = [item parent]; - if ([parent isKindOfClass:[BookmarkFolder class]] && ![parent isSmartFolder]) { - // delete - NSMenuItem *menuItem = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"Delete",@"Delete") action:@selector(deleteBookmarks:) keyEquivalent:nulString]; - [menuItem setTarget:self]; - [contextMenu addItem:menuItem]; - [menuItem release]; - } - if (![[self activeCollection] isSmartFolder]) { - // space - [contextMenu addItem:[NSMenuItem separatorItem]]; - // create new folder - NSMenuItem *menuItem = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"Create New Folder...",@"Create New Folder...") action:@selector(addFolder:) keyEquivalent:nulString]; - [menuItem setTarget:self]; - [contextMenu addItem:menuItem]; - [menuItem release]; - } - } - return contextMenu; + return [[BookmarkManager sharedBookmarkManager] contextMenuForItem:item fromView:outlineView target:self]; } - (void)reloadDataForItem:(id)item reloadChildren: (BOOL)aReloadChildren diff --git a/mozilla/camino/src/browser/BrowserTabView.mm b/mozilla/camino/src/browser/BrowserTabView.mm index 31ed226cc0e..399f1c04fa8 100644 --- a/mozilla/camino/src/browser/BrowserTabView.mm +++ b/mozilla/camino/src/browser/BrowserTabView.mm @@ -383,7 +383,7 @@ if ([aBookmark isKindOfClass:[Bookmark class]]) return [self handleDropOnTab:overTabViewItem overContent:overContentArea withURL:[aBookmark url]]; else if ([aBookmark isKindOfClass:[BookmarkFolder class]]) { - [[[self window] windowController] openTabGroup:[aBookmark childURLs] replaceExistingTabs:YES]; + [[[self window] windowController] openURLArray:[aBookmark childURLs] replaceExistingTabs:YES]; return YES; } } else if ([draggedItems count] > 1) { @@ -395,7 +395,7 @@ else if ([aBookmark isKindOfClass:[BookmarkFolder class]]) [urlArray addObjectsFromArray:[aBookmark childURLs]]; } - [[[self window] windowController] openTabGroup:urlArray replaceExistingTabs:YES]; + [[[self window] windowController] openURLArray:urlArray replaceExistingTabs:YES]; return YES; } } diff --git a/mozilla/camino/src/browser/BrowserWindowController.h b/mozilla/camino/src/browser/BrowserWindowController.h index aa49b16fce4..2eb00aa757d 100644 --- a/mozilla/camino/src/browser/BrowserWindowController.h +++ b/mozilla/camino/src/browser/BrowserWindowController.h @@ -282,10 +282,9 @@ typedef enum - (IBAction)frameToThisWindow:(id)sender; - (void)openNewWindowWithURL: (NSString*)aURLSpec referrer:(NSString*)aReferrer loadInBackground: (BOOL)aLoadInBG; -- (void)openNewWindowWithGroupURLs: (NSArray *)urlArray loadInBackground: (BOOL)aLoadInBG; - (void)openNewTabWithURL: (NSString*)aURLSpec referrer: (NSString*)aReferrer loadInBackground: (BOOL)aLoadInBG; -- (void)openTabGroup:(NSArray*)urlArray replaceExistingTabs:(BOOL)replaceExisting; +- (void)openURLArray:(NSArray*)urlArray replaceExistingTabs:(BOOL)replaceExisting; -(BrowserTabViewItem*)createNewTabItem; diff --git a/mozilla/camino/src/browser/BrowserWindowController.mm b/mozilla/camino/src/browser/BrowserWindowController.mm index c22e24a8e93..7eef3287213 100644 --- a/mozilla/camino/src/browser/BrowserWindowController.mm +++ b/mozilla/camino/src/browser/BrowserWindowController.mm @@ -1221,7 +1221,7 @@ static NSArray* sToolbarDefaults = nil; } else { - [self openTabGroup:resolvedURLs replaceExistingTabs:YES]; + [self openURLArray:resolvedURLs replaceExistingTabs:YES]; } // global history needs to know the user typed this url so it can present it @@ -2007,12 +2007,6 @@ static NSArray* sToolbarDefaults = nil; [browser loadURL: aURLSpec referrer:aReferrer activate:!aLoadInBG]; } -- (void)openNewWindowWithGroupURLs: (NSArray *)urlArray loadInBackground: (BOOL)aLoadInBG -{ - BrowserWindowController* browser = [self openNewWindow:aLoadInBG]; - [browser openTabGroup:urlArray replaceExistingTabs:YES]; -} - // // -openNewWindow: // @@ -2091,8 +2085,7 @@ static NSArray* sToolbarDefaults = nil; [[[newTab view] getBrowserView] setPageDescriptor:aDesc displayType:aDisplayType]; } - -- (void)openTabGroup:(NSArray*)urlArray replaceExistingTabs:(BOOL)replaceExisting +- (void)openURLArray:(NSArray*)urlArray replaceExistingTabs:(BOOL)replaceExisting { // ensure the content area is visible. We can't rely on normal url loading // to do this because for the new tabs we create below, they won't be connected diff --git a/mozilla/camino/src/extensions/ExtendedOutlineView.mm b/mozilla/camino/src/extensions/ExtendedOutlineView.mm index bed4d47e6a4..b580cbc4937 100644 --- a/mozilla/camino/src/extensions/ExtendedOutlineView.mm +++ b/mozilla/camino/src/extensions/ExtendedOutlineView.mm @@ -22,6 +22,7 @@ * Contributor(s): * David Hyatt (Original Author) * Max Horn (Context menu, tooltip code, and editing) +* Josh Aas (contextual menu fixups) * * * Alternatively, the contents of this file may be used under the terms of @@ -208,9 +209,13 @@ if ([delegate respondsToSelector:@selector(outlineView:contextMenuForItem:)]) return [delegate outlineView:self contextMenuForItem:item]; - } else + } else { // no item, no context menu return nil; + } + } + else { + [self deselectAll:self]; } // Just return the default context menu diff --git a/mozilla/camino/src/history/HistoryDataSource.mm b/mozilla/camino/src/history/HistoryDataSource.mm index 1aae4770f37..b3f33fc26fe 100644 --- a/mozilla/camino/src/history/HistoryDataSource.mm +++ b/mozilla/camino/src/history/HistoryDataSource.mm @@ -445,6 +445,8 @@ HistoryRDFObserver::OnChange(nsIRDFDataSource*, nsIRDFResource*, [contextMenu addItem:menuItem]; [menuItem release]; + [contextMenu addItem:[NSMenuItem separatorItem]]; + // delete menuItem = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"Delete",@"") action:@selector(deleteHistoryItems:) keyEquivalent:nulString]; [menuItem setTarget:self];