| // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "ui/views/focus/widget_focus_manager.h" |
| |
| #include "base/memory/singleton.h" |
| |
| namespace views { |
| |
| // WidgetFocusManager ---------------------------------------------------------- |
| |
| // static |
| WidgetFocusManager* WidgetFocusManager::GetInstance() { |
| return Singleton<WidgetFocusManager>::get(); |
| } |
| |
| void WidgetFocusManager::AddFocusChangeListener( |
| WidgetFocusChangeListener* listener) { |
| focus_change_listeners_.AddObserver(listener); |
| } |
| |
| void WidgetFocusManager::RemoveFocusChangeListener( |
| WidgetFocusChangeListener* listener) { |
| focus_change_listeners_.RemoveObserver(listener); |
| } |
| |
| void WidgetFocusManager::OnWidgetFocusEvent(gfx::NativeView focused_before, |
| gfx::NativeView focused_now) { |
| if (enabled_ && focused_before != focused_now) { |
| FOR_EACH_OBSERVER(WidgetFocusChangeListener, focus_change_listeners_, |
| OnNativeFocusChange(focused_before, focused_now)); |
| } |
| } |
| |
| WidgetFocusManager::WidgetFocusManager() : enabled_(true) {} |
| |
| WidgetFocusManager::~WidgetFocusManager() {} |
| |
| // AutoNativeNotificationDisabler ---------------------------------------------- |
| |
| AutoNativeNotificationDisabler::AutoNativeNotificationDisabler() { |
| WidgetFocusManager::GetInstance()->DisableNotifications(); |
| } |
| |
| AutoNativeNotificationDisabler::~AutoNativeNotificationDisabler() { |
| WidgetFocusManager::GetInstance()->EnableNotifications(); |
| } |
| |
| } // namespace views |