summaryrefslogtreecommitdiffstats
path: root/chrome/browser/cocoa/toolbar_controller.mm
diff options
context:
space:
mode:
authorjeremy@chromium.org <jeremy@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-06-15 20:20:49 +0000
committerjeremy@chromium.org <jeremy@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-06-15 20:20:49 +0000
commitee2df648776cc000aded2b737608b805039cf5e8 (patch)
treea49a6c4aeee53e399f7751be1d9f39037aef109b /chrome/browser/cocoa/toolbar_controller.mm
parent084820e2662059decc9b3281b37c05ae55a13da0 (diff)
downloadchromium_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.mm45
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_,