blob: 788964f07c72666d9c5ffae66ec8742f618c8045 [file] [log] [blame]
// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef UI_VIEWS_WIDGET_ANY_WIDGET_OBSERVER_SINGLETON_H_
#define UI_VIEWS_WIDGET_ANY_WIDGET_OBSERVER_SINGLETON_H_
#include "base/no_destructor.h"
#include "base/observer_list.h"
namespace views {
class AnyWidgetObserver;
class Widget;
namespace internal {
// This is not the class you want - go look at AnyWidgetObserver.
// This class serves as the "thing being observed" by AnyWidgetObservers,
// since there is no relevant singleton for Widgets. Every Widget notifies the
// singleton instance of this class of its creation, and it handles notifying
// all AnyWidgetObservers of that.
class AnyWidgetObserverSingleton {
public:
static AnyWidgetObserverSingleton* GetInstance();
void OnAnyWidgetInitialized(Widget* widget);
void OnAnyWidgetShown(Widget* widget);
void OnAnyWidgetHidden(Widget* widget);
void OnAnyWidgetClosing(Widget* widget);
void OnAnyWidgetActivated(Widget* widget);
void AddObserver(AnyWidgetObserver* observer);
void RemoveObserver(AnyWidgetObserver* observer);
private:
friend class base::NoDestructor<AnyWidgetObserverSingleton>;
AnyWidgetObserverSingleton();
~AnyWidgetObserverSingleton();
base::ObserverList<AnyWidgetObserver> observers_;
};
} // namespace internal
} // namespace views
#endif // UI_VIEWS_WIDGET_ANY_WIDGET_OBSERVER_SINGLETON_H_