2014-10-31 18:17:05 +00:00
|
|
|
// Copyright (c) 2013 GitHub, Inc.
|
2014-04-25 09:49:37 +00:00
|
|
|
// Use of this source code is governed by the MIT license that can be
|
2013-05-02 14:54:09 +00:00
|
|
|
// found in the LICENSE file.
|
|
|
|
|
2014-03-16 00:30:26 +00:00
|
|
|
#include "atom/browser/window_list.h"
|
2013-05-02 14:54:09 +00:00
|
|
|
|
|
|
|
#include <algorithm>
|
|
|
|
|
2014-03-16 00:30:26 +00:00
|
|
|
#include "atom/browser/native_window.h"
|
|
|
|
#include "atom/browser/window_list_observer.h"
|
2014-03-16 01:37:04 +00:00
|
|
|
#include "base/logging.h"
|
2013-05-02 14:54:09 +00:00
|
|
|
|
|
|
|
namespace atom {
|
|
|
|
|
|
|
|
// static
|
2015-09-02 07:16:49 +00:00
|
|
|
base::LazyInstance<base::ObserverList<WindowListObserver>>::Leaky
|
2013-05-02 14:54:09 +00:00
|
|
|
WindowList::observers_ = LAZY_INSTANCE_INITIALIZER;
|
|
|
|
|
|
|
|
// static
|
2016-07-10 09:52:28 +00:00
|
|
|
WindowList* WindowList::instance_ = nullptr;
|
2013-05-02 14:54:09 +00:00
|
|
|
|
|
|
|
// static
|
|
|
|
WindowList* WindowList::GetInstance() {
|
|
|
|
if (!instance_)
|
|
|
|
instance_ = new WindowList;
|
|
|
|
return instance_;
|
|
|
|
}
|
|
|
|
|
|
|
|
// static
|
|
|
|
void WindowList::AddWindow(NativeWindow* window) {
|
|
|
|
DCHECK(window);
|
|
|
|
// Push |window| on the appropriate list instance.
|
|
|
|
WindowVector& windows = GetInstance()->windows_;
|
|
|
|
windows.push_back(window);
|
|
|
|
|
|
|
|
FOR_EACH_OBSERVER(WindowListObserver, observers_.Get(),
|
|
|
|
OnWindowAdded(window));
|
|
|
|
}
|
|
|
|
|
|
|
|
// static
|
|
|
|
void WindowList::RemoveWindow(NativeWindow* window) {
|
|
|
|
WindowVector& windows = GetInstance()->windows_;
|
|
|
|
windows.erase(std::remove(windows.begin(), windows.end(), window),
|
|
|
|
windows.end());
|
|
|
|
|
|
|
|
FOR_EACH_OBSERVER(WindowListObserver, observers_.Get(),
|
|
|
|
OnWindowRemoved(window));
|
|
|
|
|
|
|
|
if (windows.size() == 0)
|
|
|
|
FOR_EACH_OBSERVER(WindowListObserver, observers_.Get(),
|
|
|
|
OnWindowAllClosed());
|
|
|
|
}
|
|
|
|
|
2013-05-02 15:43:23 +00:00
|
|
|
// static
|
|
|
|
void WindowList::WindowCloseCancelled(NativeWindow* window) {
|
|
|
|
FOR_EACH_OBSERVER(WindowListObserver, observers_.Get(),
|
|
|
|
OnWindowCloseCancelled(window));
|
|
|
|
}
|
|
|
|
|
2013-05-02 14:54:09 +00:00
|
|
|
// static
|
|
|
|
void WindowList::AddObserver(WindowListObserver* observer) {
|
|
|
|
observers_.Get().AddObserver(observer);
|
|
|
|
}
|
|
|
|
|
|
|
|
// static
|
|
|
|
void WindowList::RemoveObserver(WindowListObserver* observer) {
|
|
|
|
observers_.Get().RemoveObserver(observer);
|
|
|
|
}
|
|
|
|
|
|
|
|
// static
|
|
|
|
void WindowList::CloseAllWindows() {
|
|
|
|
WindowVector windows = GetInstance()->windows_;
|
2016-07-10 13:56:42 +00:00
|
|
|
for (const auto& window : windows)
|
2016-09-30 22:04:13 +00:00
|
|
|
if (!window->IsClosed())
|
|
|
|
window->Close();
|
2013-05-02 14:54:09 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
WindowList::WindowList() {
|
|
|
|
}
|
|
|
|
|
|
|
|
WindowList::~WindowList() {
|
|
|
|
}
|
|
|
|
|
|
|
|
} // namespace atom
|