diff options
author | rohitrao@chromium.org <rohitrao@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-09-15 14:52:03 +0000 |
---|---|---|
committer | rohitrao@chromium.org <rohitrao@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-09-15 14:52:03 +0000 |
commit | 66fae6db2a11355ffe9efe3bdf5f3879b4c0fcad (patch) | |
tree | 2fce70ad86b6a4edeeb2aa95444660e83d6518f9 /chrome/browser/cocoa/find_bar_cocoa_controller.mm | |
parent | 2a010997e928b0295279043921201f625983db3b (diff) | |
download | chromium_src-66fae6db2a11355ffe9efe3bdf5f3879b4c0fcad.zip chromium_src-66fae6db2a11355ffe9efe3bdf5f3879b4c0fcad.tar.gz chromium_src-66fae6db2a11355ffe9efe3bdf5f3879b4c0fcad.tar.bz2 |
[Mac] Restore focus to the previously focused view when dismissing the find bar.
If a result was found, restore focus to the tab contents. This allows for
keyboard navigation using the find bar.
BUG=http://crbug.com/12657
BUG=http://crbug.com/21374
TEST=See test case in bug 21374
Review URL: http://codereview.chromium.org/201061
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@26214 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/cocoa/find_bar_cocoa_controller.mm')
-rw-r--r-- | chrome/browser/cocoa/find_bar_cocoa_controller.mm | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/chrome/browser/cocoa/find_bar_cocoa_controller.mm b/chrome/browser/cocoa/find_bar_cocoa_controller.mm index b0f42c1..4b6e89e 100644 --- a/chrome/browser/cocoa/find_bar_cocoa_controller.mm +++ b/chrome/browser/cocoa/find_bar_cocoa_controller.mm @@ -12,6 +12,7 @@ #include "chrome/browser/cocoa/browser_window_cocoa.h" #import "chrome/browser/cocoa/find_bar_cocoa_controller.h" #import "chrome/browser/cocoa/find_bar_bridge.h" +#import "chrome/browser/cocoa/focus_tracker.h" #import "chrome/browser/cocoa/tab_strip_controller.h" #include "chrome/browser/tab_contents/tab_contents.h" @@ -120,6 +121,14 @@ // Methods from FindBar - (void)showFindBar { [[self view] setHidden:NO]; + + // Save the currently-focused view. |[self view]| is in the view + // hierarchy by now. showFindBar can be called even when the + // findbar is already open, so do not overwrite an already saved + // view. + if (!focusTracker_.get()) + focusTracker_.reset( + [[FocusTracker alloc] initWithWindow:[[self view] window]]); } - (void)hideFindBar { @@ -136,6 +145,15 @@ } +- (void)restoreSavedFocus { + if (!(focusTracker_.get() && + [focusTracker_ restoreFocusInWindow:[[self view] window]])) { + // Fall back to giving focus to the tab contents. + findBarBridge_->GetFindBarController()->tab_contents()->Focus(); + } + focusTracker_.reset(nil); +} + - (void)setFindText:(const string16&)findText { [findText_ setStringValue:base::SysUTF16ToNSString(findText)]; } @@ -177,6 +195,11 @@ [resultsLabel_ setStringValue:@""]; } + // If we found any results, reset the focus tracker, so we always + // restore focus to the tab contents. + if (result.number_of_matches() > 0) + focusTracker_.reset(nil); + // Resize |resultsLabel_| to completely contain its string and right-justify // it within |findText_|. sizeToFit may shrink the frame vertically, which we // don't want, so we save the original vertical positioning. |