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 9 namespace views { 10 11 // WidgetFocusManager ---------------------------------------------------------- 12 13 // static 14 WidgetFocusManager* WidgetFocusManager::GetInstance() { 15 return Singleton<WidgetFocusManager>::get(); 16 } 17 18 void WidgetFocusManager::AddFocusChangeListener( 19 WidgetFocusChangeListener* listener) { 20 focus_change_listeners_.AddObserver(listener); 21 } 22 23 void WidgetFocusManager::RemoveFocusChangeListener( 24 WidgetFocusChangeListener* listener) { 25 focus_change_listeners_.RemoveObserver(listener); 26 } 27 28 void 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 36 WidgetFocusManager::WidgetFocusManager() : enabled_(true) {} 37 38 WidgetFocusManager::~WidgetFocusManager() {} 39 40 // AutoNativeNotificationDisabler ---------------------------------------------- 41 42 AutoNativeNotificationDisabler::AutoNativeNotificationDisabler() { 43 WidgetFocusManager::GetInstance()->DisableNotifications(); 44 } 45 46 AutoNativeNotificationDisabler::~AutoNativeNotificationDisabler() { 47 WidgetFocusManager::GetInstance()->EnableNotifications(); 48 } 49 50 } // namespace views 51