1// Copyright (c) 2012 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 "ui/base/cocoa/focus_tracker.h"
6
7#include "base/basictypes.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
47