window_list.cc 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. // Copyright (c) 2013 GitHub, Inc.
  2. // Use of this source code is governed by the MIT license that can be
  3. // found in the LICENSE file.
  4. #include "atom/browser/window_list.h"
  5. #include <algorithm>
  6. #include "atom/browser/native_window.h"
  7. #include "atom/browser/window_list_observer.h"
  8. #include "base/logging.h"
  9. namespace atom {
  10. // static
  11. base::LazyInstance<base::ObserverList<WindowListObserver>>::Leaky
  12. WindowList::observers_ = LAZY_INSTANCE_INITIALIZER;
  13. // static
  14. WindowList* WindowList::instance_ = nullptr;
  15. // static
  16. WindowList* WindowList::GetInstance() {
  17. if (!instance_)
  18. instance_ = new WindowList;
  19. return instance_;
  20. }
  21. // static
  22. void WindowList::AddWindow(NativeWindow* window) {
  23. DCHECK(window);
  24. // Push |window| on the appropriate list instance.
  25. WindowVector& windows = GetInstance()->windows_;
  26. windows.push_back(window);
  27. FOR_EACH_OBSERVER(WindowListObserver, observers_.Get(),
  28. OnWindowAdded(window));
  29. }
  30. // static
  31. void WindowList::RemoveWindow(NativeWindow* window) {
  32. WindowVector& windows = GetInstance()->windows_;
  33. windows.erase(std::remove(windows.begin(), windows.end(), window),
  34. windows.end());
  35. FOR_EACH_OBSERVER(WindowListObserver, observers_.Get(),
  36. OnWindowRemoved(window));
  37. if (windows.size() == 0)
  38. FOR_EACH_OBSERVER(WindowListObserver, observers_.Get(),
  39. OnWindowAllClosed());
  40. }
  41. // static
  42. void WindowList::WindowCloseCancelled(NativeWindow* window) {
  43. FOR_EACH_OBSERVER(WindowListObserver, observers_.Get(),
  44. OnWindowCloseCancelled(window));
  45. }
  46. // static
  47. void WindowList::AddObserver(WindowListObserver* observer) {
  48. observers_.Get().AddObserver(observer);
  49. }
  50. // static
  51. void WindowList::RemoveObserver(WindowListObserver* observer) {
  52. observers_.Get().RemoveObserver(observer);
  53. }
  54. // static
  55. void WindowList::CloseAllWindows() {
  56. WindowVector windows = GetInstance()->windows_;
  57. for (const auto& window : windows)
  58. if (!window->IsClosed())
  59. window->Close();
  60. }
  61. WindowList::WindowList() {
  62. }
  63. WindowList::~WindowList() {
  64. }
  65. } // namespace atom