1// Copyright (c) 2011 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/widget_focus_manager.h"
6
7#include "base/memory/singleton.h"
8
9namespace views {
10
11// WidgetFocusManager ----------------------------------------------------------
12
13// static
14WidgetFocusManager* WidgetFocusManager::GetInstance() {
15  return Singleton<WidgetFocusManager>::get();
16}
17
18void WidgetFocusManager::AddFocusChangeListener(
19    WidgetFocusChangeListener* listener) {
20  focus_change_listeners_.AddObserver(listener);
21}
22
23void WidgetFocusManager::RemoveFocusChangeListener(
24    WidgetFocusChangeListener* listener) {
25  focus_change_listeners_.RemoveObserver(listener);
26}
27
28void WidgetFocusManager::OnWidgetFocusEvent(gfx::NativeView focused_before,
29                                            gfx::NativeView focused_now) {
30  if (enabled_ && focused_before != focused_now) {
31    FOR_EACH_OBSERVER(WidgetFocusChangeListener, focus_change_listeners_,
32                      OnNativeFocusChange(focused_before, focused_now));
33  }
34}
35
36WidgetFocusManager::WidgetFocusManager() : enabled_(true) {}
37
38WidgetFocusManager::~WidgetFocusManager() {}
39
40// AutoNativeNotificationDisabler ----------------------------------------------
41
42AutoNativeNotificationDisabler::AutoNativeNotificationDisabler() {
43  WidgetFocusManager::GetInstance()->DisableNotifications();
44}
45
46AutoNativeNotificationDisabler::~AutoNativeNotificationDisabler() {
47  WidgetFocusManager::GetInstance()->EnableNotifications();
48}
49
50}  // namespace views
51