OLD | NEW |
| (Empty) |
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #import "chrome/browser/cocoa/focus_tracker.h" | |
6 | |
7 #include "base/logging.h" | |
8 | |
9 @implementation FocusTracker | |
10 | |
11 - (id)initWithWindow:(NSWindow*)window { | |
12 if ((self = [super init])) { | |
13 NSResponder* current_focus = [window firstResponder]; | |
14 | |
15 // Special case NSTextViews, because they are removed from the | |
16 // view hierarchy when their text field does not have focus. If | |
17 // an NSTextView is the current first responder, save a pointer to | |
18 // its NSTextField delegate instead. | |
19 if ([current_focus isKindOfClass:[NSTextView class]]) { | |
20 id delegate = [(NSTextView*)current_focus delegate]; | |
21 if ([delegate isKindOfClass:[NSTextField class]]) | |
22 current_focus = delegate; | |
23 else | |
24 current_focus = nil; | |
25 } | |
26 | |
27 if ([current_focus isKindOfClass:[NSView class]]) { | |
28 NSView* current_focus_view = (NSView*)current_focus; | |
29 focusedView_.reset([current_focus_view retain]); | |
30 } | |
31 } | |
32 | |
33 return self; | |
34 } | |
35 | |
36 - (BOOL)restoreFocusInWindow:(NSWindow*)window { | |
37 if (!focusedView_.get()) | |
38 return NO; | |
39 | |
40 if ([focusedView_ window] && [focusedView_ window] == window) | |
41 return [window makeFirstResponder:focusedView_.get()]; | |
42 | |
43 return NO; | |
44 } | |
45 | |
46 @end | |
OLD | NEW |