summaryrefslogtreecommitdiffstats
path: root/chrome/browser/cocoa/find_bar_cocoa_controller.mm
diff options
context:
space:
mode:
authorrohitrao@chromium.org <rohitrao@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-09-15 18:01:58 +0000
committerrohitrao@chromium.org <rohitrao@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-09-15 18:01:58 +0000
commit59f3e6d0f59a671ed2f50d14abbec2708cb709b1 (patch)
tree36b3687d077ef4d5c0e9657c6520175550fadd00 /chrome/browser/cocoa/find_bar_cocoa_controller.mm
parentd88453afb9292607a16321e23785e5ee2417f776 (diff)
downloadchromium_src-59f3e6d0f59a671ed2f50d14abbec2708cb709b1.zip
chromium_src-59f3e6d0f59a671ed2f50d14abbec2708cb709b1.tar.gz
chromium_src-59f3e6d0f59a671ed2f50d14abbec2708cb709b1.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. Now with fix for valgrind failure. This CL reverts 26219, which in turn reverted 26214. BUG=http://crbug.com/12657 BUG=http://crbug.com/21374 TEST=See test case in bug 21374 Review URL: http://codereview.chromium.org/205010 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@26231 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.mm23
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.