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 namespace views {
8 
9 // WidgetFocusManager ----------------------------------------------------------
10 
11 // static
GetInstance()12 WidgetFocusManager* WidgetFocusManager::GetInstance() {
13   static base::NoDestructor<WidgetFocusManager> instance;
14   return instance.get();
15 }
16 
17 WidgetFocusManager::~WidgetFocusManager() = default;
18 
AddFocusChangeListener(WidgetFocusChangeListener * listener)19 void WidgetFocusManager::AddFocusChangeListener(
20     WidgetFocusChangeListener* listener) {
21   focus_change_listeners_.AddObserver(listener);
22 }
23 
RemoveFocusChangeListener(WidgetFocusChangeListener * listener)24 void WidgetFocusManager::RemoveFocusChangeListener(
25     WidgetFocusChangeListener* listener) {
26   focus_change_listeners_.RemoveObserver(listener);
27 }
28 
OnNativeFocusChanged(gfx::NativeView focused_now)29 void WidgetFocusManager::OnNativeFocusChanged(gfx::NativeView focused_now) {
30   if (enabled_) {
31     for (WidgetFocusChangeListener& observer : focus_change_listeners_)
32       observer.OnNativeFocusChanged(focused_now);
33   }
34 }
35 
36 WidgetFocusManager::WidgetFocusManager() = default;
37 
38 // AutoNativeNotificationDisabler ----------------------------------------------
39 
AutoNativeNotificationDisabler()40 AutoNativeNotificationDisabler::AutoNativeNotificationDisabler() {
41   WidgetFocusManager::GetInstance()->DisableNotifications();
42 }
43 
~AutoNativeNotificationDisabler()44 AutoNativeNotificationDisabler::~AutoNativeNotificationDisabler() {
45   WidgetFocusManager::GetInstance()->EnableNotifications();
46 }
47 
48 }  // namespace views
49