diff options
author | jeremy@chromium.org <jeremy@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-06-15 20:20:49 +0000 |
---|---|---|
committer | jeremy@chromium.org <jeremy@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-06-15 20:20:49 +0000 |
commit | ee2df648776cc000aded2b737608b805039cf5e8 (patch) | |
tree | a49a6c4aeee53e399f7751be1d9f39037aef109b /chrome/browser/cocoa/toolbar_controller.mm | |
parent | 084820e2662059decc9b3281b37c05ae55a13da0 (diff) | |
download | chromium_src-ee2df648776cc000aded2b737608b805039cf5e8.zip chromium_src-ee2df648776cc000aded2b737608b805039cf5e8.tar.gz chromium_src-ee2df648776cc000aded2b737608b805039cf5e8.tar.bz2 |
Fix http://crbug.com/13971: OSX: Text copied from Omnibox is styled
Provide a custom field editor for the location bar that overrides cut/copy to only write plain text to the clipboard.
BUG=13971
TEST=Type a URL in the Omnibox, select all and copy url, open Textedit and paste the url into it. Expected results: url should be unstyled previous behavior: styled text (as it appeared in the Omnibox was pasted)
Review URL: http://codereview.chromium.org/126075
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18425 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/cocoa/toolbar_controller.mm')
-rw-r--r-- | chrome/browser/cocoa/toolbar_controller.mm | 45 |
1 files changed, 41 insertions, 4 deletions
diff --git a/chrome/browser/cocoa/toolbar_controller.mm b/chrome/browser/cocoa/toolbar_controller.mm index 74f319f..81fdf04 100644 --- a/chrome/browser/cocoa/toolbar_controller.mm +++ b/chrome/browser/cocoa/toolbar_controller.mm @@ -14,6 +14,30 @@ static NSString* const kStarImageName = @"star"; static NSString* const kStarredImageName = @"starred"; +@implementation LocationBarFieldEditor +- (void)copy:(id)sender { + NSPasteboard* pb = [NSPasteboard generalPasteboard]; + [self performCopy:pb]; +} + +- (void)cut:(id)sender { + NSPasteboard* pb = [NSPasteboard generalPasteboard]; + [self performCut:pb]; +} + +- (void)performCopy:(NSPasteboard*)pb { + [pb declareTypes:[NSArray array] owner:nil]; + [self writeSelectionToPasteboard:pb types: + [NSArray arrayWithObject:NSStringPboardType]]; +} + +- (void)performCut:(NSPasteboard*)pb { + [self performCopy:pb]; + [self delete:nil]; +} + +@end + @interface ToolbarController(Private) - (void)initCommandStatus:(CommandUpdater*)commands; @end @@ -51,10 +75,6 @@ static NSString* const kStarredImageName = @"starred"; [locationBar_ setFont:[NSFont systemFontOfSize:[NSFont systemFontSize]]]; } -- (void)dealloc { - [super dealloc]; -} - - (LocationBar*)locationBar { return locationBarView_.get(); } @@ -121,6 +141,23 @@ static NSString* const kStarredImageName = @"starred"; [goButton_ setTag:tag]; } +- (id)customFieldEditorForObject:(id)obj { + if (obj == locationBar_) { + // Lazilly construct Field editor, Cocoa UI code always runs on the + // same thread, so there shoudn't be a race condition here. + if (locationBarFieldEditor_.get() == nil) { + locationBarFieldEditor_.reset([[LocationBarFieldEditor alloc] init]); + } + + // This needs to be called every time, otherwise notifications + // aren't sent correctly. + DCHECK(locationBarFieldEditor_.get()); + [locationBarFieldEditor_.get() setFieldEditor:YES]; + return locationBarFieldEditor_.get(); + } + return nil; +} + // Returns an array of views in the order of the outlets above. - (NSArray*)toolbarViews { return [NSArray arrayWithObjects:backButton_, forwardButton_, reloadButton_, |