Index: chrome/browser/autocomplete/autocomplete_edit_view_mac.mm |
diff --git a/chrome/browser/autocomplete/autocomplete_edit_view_mac.mm b/chrome/browser/autocomplete/autocomplete_edit_view_mac.mm |
index d0d1db4421de04f419b2a30d3ee1ef747ae6e007..c86fa29cc7aeacf7e614be016a01df795a9e3d8f 100644 |
--- a/chrome/browser/autocomplete/autocomplete_edit_view_mac.mm |
+++ b/chrome/browser/autocomplete/autocomplete_edit_view_mac.mm |
@@ -97,6 +97,8 @@ NSRange ComponentToNSRange(const url_parse::Component& component) { |
AutocompleteEditViewMac* edit_view_; // weak, owns us. |
} |
- initWithEditView:(AutocompleteEditViewMac*)view; |
+- (void)windowDidResignKey:(NSNotification*)notification; |
+- (void)windowDidBecomeKey:(NSNotification*)notification; |
@end |
AutocompleteEditViewMac::AutocompleteEditViewMac( |
@@ -122,6 +124,18 @@ AutocompleteEditViewMac::AutocompleteEditViewMac( |
// Needed so that editing doesn't lose the styling. |
[field_ setAllowsEditingTextAttributes:YES]; |
+ |
+ // Track the window's key status for signalling focus changes to |
+ // |model_|. |
+ NSNotificationCenter* nc = [NSNotificationCenter defaultCenter]; |
+ [nc addObserver:edit_helper_ |
+ selector:@selector(windowDidResignKey:) |
+ name:NSWindowDidResignKeyNotification |
+ object:[field_ window]]; |
+ [nc addObserver:edit_helper_ |
+ selector:@selector(windowDidBecomeKey:) |
+ name:NSWindowDidBecomeKeyNotification |
+ object:[field_ window]]; |
} |
AutocompleteEditViewMac::~AutocompleteEditViewMac() { |
@@ -137,6 +151,9 @@ AutocompleteEditViewMac::~AutocompleteEditViewMac() { |
// Disconnect field_ from edit_helper_ so that we don't get calls |
// after destruction. |
[field_ setDelegate:nil]; |
+ |
+ // Disconnect notifications so they don't signal a dead object. |
+ [[NSNotificationCenter defaultCenter] removeObserver:edit_helper_]; |
} |
void AutocompleteEditViewMac::SaveStateToTab(TabContents* tab) { |
@@ -440,7 +457,10 @@ void AutocompleteEditViewMac::OnEscapeKeyPressed() { |
model_->OnEscapeKeyPressed(); |
} |
void AutocompleteEditViewMac::OnSetFocus(bool f) { |
- model_->OnSetFocus(f); |
+ // Only forward if we actually do have the focus. |
+ if ([field_ currentEditor]) { |
+ model_->OnSetFocus(f); |
+ } |
} |
void AutocompleteEditViewMac::OnKillFocus() { |
// TODO(shess): This would seem to be a job for |model_|. |
@@ -537,4 +557,14 @@ void AutocompleteEditViewMac::FocusLocation() { |
// it's set to the start of the text. |
} |
+// Signal that we've lost focus when the window resigns key. |
+- (void)windowDidResignKey:(NSNotification*)notification { |
+ edit_view_->OnKillFocus(); |
+} |
+ |
+// Signal that we may have regained focus. |
+- (void)windowDidBecomeKey:(NSNotification*)notification { |
+ edit_view_->OnSetFocus(false); |
+} |
+ |
@end |