Index: chrome/browser/cocoa/focus_tracker.mm |
=================================================================== |
--- chrome/browser/cocoa/focus_tracker.mm (revision 0) |
+++ chrome/browser/cocoa/focus_tracker.mm (revision 0) |
@@ -0,0 +1,46 @@ |
+// Copyright (c) 2009 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#import "chrome/browser/cocoa/focus_tracker.h" |
+ |
+#include "base/logging.h" |
+ |
+@implementation FocusTracker |
+ |
+- (id)initWithWindow:(NSWindow*)window { |
+ if ((self = [super init])) { |
+ NSResponder* current_focus = [window firstResponder]; |
+ |
+ // Special case NSTextViews, because they are removed from the |
+ // view hierarchy when their text field does not have focus. If |
+ // an NSTextView is the current first responder, save a pointer to |
+ // its NSTextField delegate instead. |
+ if ([current_focus isKindOfClass:[NSTextView class]]) { |
+ id delegate = [(NSTextView*)current_focus delegate]; |
+ if ([delegate isKindOfClass:[NSTextField class]]) |
+ current_focus = delegate; |
+ else |
+ current_focus = nil; |
+ } |
+ |
+ if ([current_focus isKindOfClass:[NSView class]]) { |
+ NSView* current_focus_view = (NSView*)current_focus; |
+ focusedView_.reset([current_focus_view retain]); |
+ } |
+ } |
+ |
+ return self; |
+} |
+ |
+- (BOOL)restoreFocusInWindow:(NSWindow*)window { |
+ if (!focusedView_.get()) |
+ return NO; |
+ |
+ if ([focusedView_ window] && [focusedView_ window] == window) |
+ return [window makeFirstResponder:focusedView_.get()]; |
+ |
+ return NO; |
+} |
+ |
+@end |
Property changes on: chrome/browser/cocoa/focus_tracker.mm |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |