| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ui/aura_shell/stacking_controller.h" | 5 #include "ui/aura_shell/stacking_controller.h" |
| 6 | 6 |
| 7 #include "ui/aura/desktop.h" | 7 #include "ui/aura/desktop.h" |
| 8 #include "ui/aura/window.h" | 8 #include "ui/aura/window.h" |
| 9 #include "ui/aura_shell/always_on_top_controller.h" |
| 9 #include "ui/aura_shell/shell.h" | 10 #include "ui/aura_shell/shell.h" |
| 10 #include "ui/aura_shell/shell_window_ids.h" | 11 #include "ui/aura_shell/shell_window_ids.h" |
| 11 | 12 |
| 12 namespace aura_shell { | 13 namespace aura_shell { |
| 13 namespace internal { | 14 namespace internal { |
| 14 namespace { | 15 namespace { |
| 15 | 16 |
| 16 aura::Window* GetContainer(int id) { | 17 aura::Window* GetContainer(int id) { |
| 17 return Shell::GetInstance()->GetContainer(id); | 18 return Shell::GetInstance()->GetContainer(id); |
| 18 } | 19 } |
| 19 | 20 |
| 20 // Returns true if children of |window| can be activated. | 21 // Returns true if children of |window| can be activated. |
| 21 bool SupportsChildActivation(aura::Window* window) { | 22 bool SupportsChildActivation(aura::Window* window) { |
| 22 return window->id() == kShellWindowId_DefaultContainer || | 23 return window->id() == kShellWindowId_DefaultContainer || |
| 23 window->id() == kShellWindowId_AlwaysOnTopContainer; | 24 window->id() == kShellWindowId_AlwaysOnTopContainer; |
| 24 } | 25 } |
| 25 | 26 |
| 26 } // namespace | 27 } // namespace |
| 27 | 28 |
| 28 //////////////////////////////////////////////////////////////////////////////// | 29 //////////////////////////////////////////////////////////////////////////////// |
| 29 // StackingController, public: | 30 // StackingController, public: |
| 30 | 31 |
| 31 StackingController::StackingController() { | 32 StackingController::StackingController() { |
| 32 aura::Desktop::GetInstance()->SetStackingClient(this); | 33 aura::Desktop::GetInstance()->SetStackingClient(this); |
| 33 } | 34 } |
| 34 | 35 |
| 35 StackingController::~StackingController() { | 36 StackingController::~StackingController() { |
| 36 } | 37 } |
| 37 | 38 |
| 39 void StackingController::Init() { |
| 40 always_on_top_controller_.reset(new internal::AlwaysOnTopController); |
| 41 always_on_top_controller_->SetContainers( |
| 42 GetContainer(internal::kShellWindowId_DefaultContainer), |
| 43 GetContainer(internal::kShellWindowId_AlwaysOnTopContainer)); |
| 44 } |
| 45 |
| 38 // static | 46 // static |
| 39 aura::Window* StackingController::GetActivatableWindow(aura::Window* window) { | 47 aura::Window* StackingController::GetActivatableWindow(aura::Window* window) { |
| 40 aura::Window* parent = window->parent(); | 48 aura::Window* parent = window->parent(); |
| 41 aura::Window* child = window; | 49 aura::Window* child = window; |
| 42 while (parent) { | 50 while (parent) { |
| 43 if (SupportsChildActivation(parent)) | 51 if (SupportsChildActivation(parent)) |
| 44 return child; | 52 return child; |
| 45 parent = parent->parent(); | 53 parent = parent->parent(); |
| 46 child = child->parent(); | 54 child = child->parent(); |
| 47 } | 55 } |
| 48 return false; | 56 return false; |
| 49 } | 57 } |
| 50 | 58 |
| 51 //////////////////////////////////////////////////////////////////////////////// | 59 //////////////////////////////////////////////////////////////////////////////// |
| 52 // StackingController, aura::StackingClient implementation: | 60 // StackingController, aura::StackingClient implementation: |
| 53 | 61 |
| 54 void StackingController::AddChildToDefaultParent(aura::Window* window) { | 62 void StackingController::AddChildToDefaultParent(aura::Window* window) { |
| 55 aura::Window* parent = NULL; | 63 aura::Window* parent = NULL; |
| 56 switch (window->type()) { | 64 switch (window->type()) { |
| 57 case aura::WINDOW_TYPE_NORMAL: | 65 case aura::WINDOW_TYPE_NORMAL: |
| 58 case aura::WINDOW_TYPE_POPUP: | 66 case aura::WINDOW_TYPE_POPUP: |
| 59 parent = GetContainer(internal::kShellWindowId_DefaultContainer); | 67 parent = always_on_top_controller_->GetContainer(window); |
| 60 break; | 68 break; |
| 61 case aura::WINDOW_TYPE_MENU: | 69 case aura::WINDOW_TYPE_MENU: |
| 62 case aura::WINDOW_TYPE_TOOLTIP: | 70 case aura::WINDOW_TYPE_TOOLTIP: |
| 63 parent = GetContainer(internal::kShellWindowId_MenusAndTooltipsContainer); | 71 parent = GetContainer(internal::kShellWindowId_MenusAndTooltipsContainer); |
| 64 break; | 72 break; |
| 65 default: | 73 default: |
| 66 NOTREACHED() << "Window " << window->id() | 74 NOTREACHED() << "Window " << window->id() |
| 67 << " has unhandled type " << window->type(); | 75 << " has unhandled type " << window->type(); |
| 68 break; | 76 break; |
| 69 } | 77 } |
| (...skipping 16 matching lines...) Expand all Loading... |
| 86 } | 94 } |
| 87 return NULL; | 95 return NULL; |
| 88 } | 96 } |
| 89 | 97 |
| 90 | 98 |
| 91 //////////////////////////////////////////////////////////////////////////////// | 99 //////////////////////////////////////////////////////////////////////////////// |
| 92 // StackingController, private: | 100 // StackingController, private: |
| 93 | 101 |
| 94 } // namespace internal | 102 } // namespace internal |
| 95 } // namespace aura_shell | 103 } // namespace aura_shell |
| OLD | NEW |