Home | History | Annotate | Download | only in focus
      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 
     10 namespace views {
     11 
     12 namespace {
     13 
     14 class DefaultFocusManagerFactory : public FocusManagerFactory {
     15  public:
     16   DefaultFocusManagerFactory() : FocusManagerFactory() {}
     17   virtual ~DefaultFocusManagerFactory() {}
     18 
     19  protected:
     20   virtual FocusManager* CreateFocusManager(Widget* widget,
     21                                            bool desktop_widget) OVERRIDE {
     22     return new FocusManager(widget, NULL /* delegate */);
     23   }
     24 
     25  private:
     26   DISALLOW_COPY_AND_ASSIGN(DefaultFocusManagerFactory);
     27 };
     28 
     29 FocusManagerFactory* focus_manager_factory = NULL;
     30 
     31 }  // namespace
     32 
     33 FocusManagerFactory::FocusManagerFactory() {
     34 }
     35 
     36 FocusManagerFactory::~FocusManagerFactory() {
     37 }
     38 
     39 // static
     40 FocusManager* FocusManagerFactory::Create(Widget* widget,
     41                                           bool desktop_widget) {
     42   if (!focus_manager_factory)
     43     focus_manager_factory = new DefaultFocusManagerFactory();
     44   return focus_manager_factory->CreateFocusManager(widget, desktop_widget);
     45 }
     46 
     47 // static
     48 void FocusManagerFactory::Install(FocusManagerFactory* f) {
     49   if (f == focus_manager_factory)
     50     return;
     51   delete focus_manager_factory;
     52   focus_manager_factory = f ? f : new DefaultFocusManagerFactory();
     53 }
     54 
     55 }  // namespace views
     56