visibility_client.cc 1.1 KB

123456789101112131415161718192021222324252627282930313233343536
  1. // Copyright (c) 2012 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "ui/aura/client/visibility_client.h"
  5. #include "ui/aura/window.h"
  6. #include "ui/aura/window_event_dispatcher.h"
  7. #include "ui/base/class_property.h"
  8. DEFINE_UI_CLASS_PROPERTY_TYPE(aura::client::VisibilityClient*)
  9. namespace aura {
  10. namespace client {
  11. // A property key to store a client that handles window visibility changes.
  12. DEFINE_UI_CLASS_PROPERTY_KEY(VisibilityClient*,
  13. kWindowVisibilityClientKey,
  14. nullptr)
  15. void SetVisibilityClient(Window* window, VisibilityClient* client) {
  16. window->SetProperty(kWindowVisibilityClientKey, client);
  17. }
  18. VisibilityClient* GetVisibilityClient(Window* window) {
  19. VisibilityClient* visibility_client = NULL;
  20. aura::Window* current = window;
  21. do {
  22. visibility_client = current->GetProperty(kWindowVisibilityClientKey);
  23. current = current->parent();
  24. } while (current && !visibility_client);
  25. return visibility_client;
  26. }
  27. } // namespace client
  28. } // namespace aura