focus_manager_factory.cc revision 5821806d5e7f356e8fa4b058a389a808ea183019
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#include "ui/views/focus/focus_manager_factory.h"
6
7#include "base/compiler_specific.h"
8#include "ui/views/focus/focus_manager.h"
9
10namespace views {
11
12namespace {
13
14class DefaultFocusManagerFactory : public FocusManagerFactory {
15 public:
16  DefaultFocusManagerFactory() : FocusManagerFactory() {}
17  virtual ~DefaultFocusManagerFactory() {}
18
19 protected:
20  virtual FocusManager* CreateFocusManager(Widget* widget) OVERRIDE {
21    return new FocusManager(widget, NULL /* delegate */);
22  }
23
24 private:
25  DISALLOW_COPY_AND_ASSIGN(DefaultFocusManagerFactory);
26};
27
28FocusManagerFactory* focus_manager_factory = NULL;
29
30}  // namespace
31
32FocusManagerFactory::FocusManagerFactory() {
33}
34
35FocusManagerFactory::~FocusManagerFactory() {
36}
37
38// static
39FocusManager* FocusManagerFactory::Create(Widget* widget) {
40  if (!focus_manager_factory)
41    focus_manager_factory = new DefaultFocusManagerFactory();
42  return focus_manager_factory->CreateFocusManager(widget);
43}
44
45// static
46void FocusManagerFactory::Install(FocusManagerFactory* f) {
47  if (f == focus_manager_factory)
48    return;
49  delete focus_manager_factory;
50  focus_manager_factory = f ? f : new DefaultFocusManagerFactory();
51}
52
53}  // namespace views
54