summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/app/nibs/BookmarkEditor.xib25
-rw-r--r--chrome/browser/cocoa/bookmark_editor_controller.h2
-rw-r--r--chrome/browser/cocoa/bookmark_editor_controller.mm50
-rw-r--r--chrome/browser/cocoa/bookmark_editor_controller_unittest.mm21
4 files changed, 82 insertions, 16 deletions
diff --git a/chrome/app/nibs/BookmarkEditor.xib b/chrome/app/nibs/BookmarkEditor.xib
index d574a2e..deb0835 100644
--- a/chrome/app/nibs/BookmarkEditor.xib
+++ b/chrome/app/nibs/BookmarkEditor.xib
@@ -80,7 +80,7 @@
<reference key="NSSuperview" ref="1006"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="137649770">
- <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags">604110336</int>
<int key="NSCellFlags2">134217728</int>
<string key="NSContents">OK</string>
<reference key="NSSupport" ref="899171858"/>
@@ -316,6 +316,14 @@
</object>
<int key="connectionID">30</int>
</object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">okButton_</string>
+ <reference key="source" ref="1001"/>
+ <reference key="destination" ref="983581711"/>
+ </object>
+ <int key="connectionID">31</int>
+ </object>
</object>
<object class="IBMutableOrderedSet" key="objectRecords">
<object class="NSArray" key="orderedObjects">
@@ -515,9 +523,9 @@
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>{{609, 978}, {480, 270}}</string>
+ <string>{{555, 472}, {480, 270}}</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>{{609, 978}, {480, 270}}</string>
+ <string>{{555, 472}, {480, 270}}</string>
<boolean value="NO" id="6"/>
<string>{196, 240}</string>
<string>{{357, 418}, {480, 270}}</string>
@@ -563,7 +571,7 @@
</object>
</object>
<nil key="sourceID"/>
- <int key="maxID">30</int>
+ <int key="maxID">31</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<object class="NSMutableArray" key="referencedPartialClassDescriptions">
@@ -593,6 +601,7 @@
<string>browser_</string>
<string>nameField_</string>
<string>newFolderButton_</string>
+ <string>okButton_</string>
<string>urlField_</string>
</object>
<object class="NSMutableArray" key="dict.values">
@@ -600,6 +609,7 @@
<string>NSBrowser</string>
<string>NSTextField</string>
<string>NSButton</string>
+ <string>NSButton</string>
<string>NSTextField</string>
</object>
</object>
@@ -612,6 +622,13 @@
<string key="className">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">browser/cocoa/status_bubble_mac.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
<string key="minorKey">browser/cocoa/tab_strip_model_observer_bridge.h</string>
</object>
</object>
diff --git a/chrome/browser/cocoa/bookmark_editor_controller.h b/chrome/browser/cocoa/bookmark_editor_controller.h
index e297ea3..742fbd1 100644
--- a/chrome/browser/cocoa/bookmark_editor_controller.h
+++ b/chrome/browser/cocoa/bookmark_editor_controller.h
@@ -18,6 +18,7 @@
IBOutlet NSTextField* nameField_;
IBOutlet NSTextField* urlField_;
IBOutlet NSBrowser* browser_;
+ IBOutlet NSButton* okButton_;
IBOutlet NSButton* newFolderButton_;
NSWindow* parentWindow_;
@@ -47,6 +48,7 @@
@interface BookmarkEditorController(TestingAPI)
@property (assign) NSString* displayName;
@property (assign) NSString* displayURL;
+@property (readonly) BOOL okButtonEnabled;
@end
diff --git a/chrome/browser/cocoa/bookmark_editor_controller.mm b/chrome/browser/cocoa/bookmark_editor_controller.mm
index 704c56e..4ba0ab39 100644
--- a/chrome/browser/cocoa/bookmark_editor_controller.mm
+++ b/chrome/browser/cocoa/bookmark_editor_controller.mm
@@ -72,6 +72,11 @@ void BookmarkEditor::Show(gfx::NativeView parent_hwnd,
[nameField_ setStringValue:initialName_];
[urlField_ setStringValue:initialUrl_];
+ // Get a ping when the URL text changes;
+ // trigger an initial ping to set things up.
+ [urlField_ setDelegate:self];
+ [self controlTextDidChange:nil];
+
if (configuration_ == BookmarkEditor::SHOW_TREE) {
// build the tree et al
NOTIMPLEMENTED();
@@ -119,6 +124,30 @@ void BookmarkEditor::Show(gfx::NativeView parent_hwnd,
[NSApp endSheet:[self window]];
}
+// If possible, return a valid GURL from the URL text field.
+- (GURL)GURLFromUrlField {
+ NSString *url = [urlField_ stringValue];
+ GURL newURL = GURL([url UTF8String]);
+ if (!newURL.is_valid()) {
+ // Mimic observed friendliness from Windows
+ newURL = GURL([[NSString stringWithFormat:@"http://%@", url] UTF8String]);
+ }
+ return newURL;
+}
+
+// When the URL changes we may enable or disable the OK button.
+// We set ourselves as the delegate of urlField_ so this gets called.
+// (Yes, setting ourself as a delegate automatically registers us for
+// the notification.)
+- (void)controlTextDidChange:(NSNotification *)aNotification {
+ GURL newURL = [self GURLFromUrlField];
+ if (newURL.is_valid()) {
+ [okButton_ setEnabled:YES];
+ } else {
+ [okButton_ setEnabled:NO];
+ }
+}
+
// TODO(jrg): Once the tree is available edits may be more extensive
// than just name/url.
- (IBAction)ok:(id)sender {
@@ -128,14 +157,11 @@ void BookmarkEditor::Show(gfx::NativeView parent_hwnd,
if ((![name isEqual:initialName_]) ||
(![url isEqual:initialUrl_])) {
std::wstring newTitle = base::SysNSStringToWide(name);
- GURL newURL = GURL([url UTF8String]);
- if (!newURL.is_valid()) {
- // Mimic observed friendliness from Windows
- newURL = GURL([[NSString stringWithFormat:@"http://%@", url] UTF8String]);
- }
+ GURL newURL = [self GURLFromUrlField];
if (!newURL.is_valid()) {
- // Silently ignoring a bad URL is unfriendly.
- newURL = GURL();
+ // Shouldn't be reached -- OK button disabled if not valid!
+ NOTREACHED();
+ return;
}
int index = 0;
BookmarkModel* model = profile_->GetBookmarkModel();
@@ -158,6 +184,11 @@ void BookmarkEditor::Show(gfx::NativeView parent_hwnd,
- (void)didEndSheet:(NSWindow*)sheet
returnCode:(int)returnCode
contextInfo:(void*)contextInfo {
+ // This is probably unnecessary but it feels cleaner since the
+ // delegate of a text field can be automatically registered for
+ // notifications.
+ [urlField_ setDelegate:nil];
+
[[self window] orderOut:self];
// BookmarkEditor::Show() will create us then run away. Unusually
@@ -180,6 +211,11 @@ void BookmarkEditor::Show(gfx::NativeView parent_hwnd,
- (void)setDisplayURL:(NSString*)name {
[urlField_ setStringValue:name];
+ [self controlTextDidChange:nil];
+}
+
+- (BOOL)okButtonEnabled {
+ return [okButton_ isEnabled];
}
@end // BookmarkEditorController
diff --git a/chrome/browser/cocoa/bookmark_editor_controller_unittest.mm b/chrome/browser/cocoa/bookmark_editor_controller_unittest.mm
index 8400b9c..7303f34 100644
--- a/chrome/browser/cocoa/bookmark_editor_controller_unittest.mm
+++ b/chrome/browser/cocoa/bookmark_editor_controller_unittest.mm
@@ -90,14 +90,25 @@ TEST_F(BookmarkEditorControllerTest, UserEditsStuff) {
EXPECT_EQ(child->GetURL(), GURL(url_name));
// Change just the URL
+ EXPECT_TRUE([controller okButtonEnabled]);
[controller setDisplayURL:@"http://yellow-sneakers.com/"];
+ EXPECT_TRUE([controller okButtonEnabled]);
[controller ok:nil];
child = parent->GetChild(0);
EXPECT_EQ(child->GetTitle(), L"whamma jamma bamma");
EXPECT_EQ(child->GetURL(), GURL("http://yellow-sneakers.com/"));
-}
-
-
-
-
+ // Give it a URL which needs fixen up to be valid
+ // (e.g. http:// prefix added)
+ [controller setDisplayURL:@"x"];
+ [controller ok:nil];
+ child = parent->GetChild(0);
+ EXPECT_TRUE(child->GetURL().is_valid());
+
+ // Confirm OK button enabled/disabled as appropriate.
+ EXPECT_TRUE([controller okButtonEnabled]);
+ [controller setDisplayURL:@""];
+ EXPECT_FALSE([controller okButtonEnabled]);
+ [controller setDisplayURL:@"http://www.cnn.com"];
+ EXPECT_TRUE([controller okButtonEnabled]);
+}