|
@@ -7,6 +7,7 @@
|
|
|
#include <algorithm>
|
|
|
|
|
|
#include "base/logging.h"
|
|
|
+#include "base/no_destructor.h"
|
|
|
#include "shell/browser/native_window.h"
|
|
|
#include "shell/browser/window_list_observer.h"
|
|
|
|
|
@@ -24,10 +25,6 @@ std::vector<base::WeakPtr<T>> ConvertToWeakPtrVector(std::vector<T*> raw_ptrs) {
|
|
|
|
|
|
namespace electron {
|
|
|
|
|
|
-// static
|
|
|
-base::LazyInstance<base::ObserverList<WindowListObserver>>::Leaky
|
|
|
- WindowList::observers_ = LAZY_INSTANCE_INITIALIZER;
|
|
|
-
|
|
|
// static
|
|
|
WindowList* WindowList::instance_ = nullptr;
|
|
|
|
|
@@ -55,7 +52,7 @@ void WindowList::AddWindow(NativeWindow* window) {
|
|
|
WindowVector& windows = GetInstance()->windows_;
|
|
|
windows.push_back(window);
|
|
|
|
|
|
- for (WindowListObserver& observer : observers_.Get())
|
|
|
+ for (WindowListObserver& observer : GetObservers())
|
|
|
observer.OnWindowAdded(window);
|
|
|
}
|
|
|
|
|
@@ -65,29 +62,29 @@ void WindowList::RemoveWindow(NativeWindow* window) {
|
|
|
windows.erase(std::remove(windows.begin(), windows.end(), window),
|
|
|
windows.end());
|
|
|
|
|
|
- for (WindowListObserver& observer : observers_.Get())
|
|
|
+ for (WindowListObserver& observer : GetObservers())
|
|
|
observer.OnWindowRemoved(window);
|
|
|
|
|
|
if (windows.empty()) {
|
|
|
- for (WindowListObserver& observer : observers_.Get())
|
|
|
+ for (WindowListObserver& observer : GetObservers())
|
|
|
observer.OnWindowAllClosed();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// static
|
|
|
void WindowList::WindowCloseCancelled(NativeWindow* window) {
|
|
|
- for (WindowListObserver& observer : observers_.Get())
|
|
|
+ for (WindowListObserver& observer : GetObservers())
|
|
|
observer.OnWindowCloseCancelled(window);
|
|
|
}
|
|
|
|
|
|
// static
|
|
|
void WindowList::AddObserver(WindowListObserver* observer) {
|
|
|
- observers_.Get().AddObserver(observer);
|
|
|
+ GetObservers().AddObserver(observer);
|
|
|
}
|
|
|
|
|
|
// static
|
|
|
void WindowList::RemoveObserver(WindowListObserver* observer) {
|
|
|
- observers_.Get().RemoveObserver(observer);
|
|
|
+ GetObservers().RemoveObserver(observer);
|
|
|
}
|
|
|
|
|
|
// static
|
|
@@ -118,4 +115,10 @@ WindowList::WindowList() = default;
|
|
|
|
|
|
WindowList::~WindowList() = default;
|
|
|
|
|
|
+// static
|
|
|
+base::ObserverList<WindowListObserver>& WindowList::GetObservers() {
|
|
|
+ static base::NoDestructor<base::ObserverList<WindowListObserver>> instance;
|
|
|
+ return *instance;
|
|
|
+}
|
|
|
+
|
|
|
} // namespace electron
|