| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "ash/wm/screen_pinning_controller.h" | 5 #include "ash/wm/screen_pinning_controller.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "ash/public/cpp/shell_window_ids.h" | 10 #include "ash/public/cpp/shell_window_ids.h" |
| 11 #include "ash/shell.h" | 11 #include "ash/shell.h" |
| 12 #include "ash/shell_port.h" | 12 #include "ash/shell_port.h" |
| 13 #include "ash/window_user_data.h" | 13 #include "ash/window_user_data.h" |
| 14 #include "ash/wm/container_finder.h" | 14 #include "ash/wm/container_finder.h" |
| 15 #include "ash/wm/window_dimmer.h" | 15 #include "ash/wm/window_dimmer.h" |
| 16 #include "ash/wm/window_state.h" | 16 #include "ash/wm/window_state.h" |
| 17 #include "ash/wm_window.h" | 17 #include "ash/wm_window.h" |
| 18 #include "base/auto_reset.h" | 18 #include "base/auto_reset.h" |
| 19 #include "base/logging.h" | 19 #include "base/logging.h" |
| 20 #include "base/memory/ptr_util.h" | 20 #include "base/memory/ptr_util.h" |
| 21 #include "ui/aura/window.h" | 21 #include "ui/aura/window.h" |
| 22 #include "ui/aura/window_observer.h" | 22 #include "ui/aura/window_observer.h" |
| 23 #include "ui/wm/core/window_util.h" | 23 #include "ui/wm/core/window_util.h" |
| 24 | 24 |
| 25 namespace ash { | 25 namespace ash { |
| 26 namespace { | 26 namespace { |
| 27 | 27 |
| 28 // Returns a list of WmWindows corresponding to SystemModalContainers, | 28 // Returns a list of Windows corresponding to SystemModalContainers, |
| 29 // except ones whose root is shared with |pinned_window|. | 29 // except ones whose root is shared with |pinned_window|. |
| 30 std::vector<WmWindow*> GetSystemModalWindowsExceptPinned( | 30 aura::Window::Windows GetSystemModalWindowsExceptPinned( |
| 31 WmWindow* pinned_window) { | 31 aura::Window* pinned_window) { |
| 32 WmWindow* pinned_root = pinned_window->GetRootWindow(); | 32 aura::Window* pinned_root = pinned_window->GetRootWindow(); |
| 33 | 33 |
| 34 std::vector<WmWindow*> result; | 34 aura::Window::Windows result; |
| 35 for (aura::Window* system_modal : wm::GetContainersFromAllRootWindows( | 35 for (aura::Window* system_modal : wm::GetContainersFromAllRootWindows( |
| 36 kShellWindowId_SystemModalContainer)) { | 36 kShellWindowId_SystemModalContainer)) { |
| 37 if (WmWindow::Get(system_modal)->GetRootWindow() == pinned_root) | 37 if (system_modal->GetRootWindow() == pinned_root) |
| 38 continue; | 38 continue; |
| 39 result.push_back(WmWindow::Get(system_modal)); | 39 result.push_back(system_modal); |
| 40 } | 40 } |
| 41 return result; | 41 return result; |
| 42 } | 42 } |
| 43 | 43 |
| 44 void AddObserverToChildren(WmWindow* container, | 44 void AddObserverToChildren(aura::Window* container, |
| 45 aura::WindowObserver* observer) { | 45 aura::WindowObserver* observer) { |
| 46 for (WmWindow* child : container->GetChildren()) { | 46 for (aura::Window* child : container->children()) |
| 47 WmWindow::GetAuraWindow(child)->AddObserver(observer); | 47 child->AddObserver(observer); |
| 48 } | |
| 49 } | 48 } |
| 50 | 49 |
| 51 void RemoveObserverFromChildren(WmWindow* container, | 50 void RemoveObserverFromChildren(aura::Window* container, |
| 52 aura::WindowObserver* observer) { | 51 aura::WindowObserver* observer) { |
| 53 for (WmWindow* child : container->GetChildren()) { | 52 for (aura::Window* child : container->children()) |
| 54 WmWindow::GetAuraWindow(child)->RemoveObserver(observer); | 53 child->RemoveObserver(observer); |
| 55 } | |
| 56 } | 54 } |
| 57 | 55 |
| 58 // Returns true if the aura::Window from a WindowDimmer is visible. | 56 // Returns true if the aura::Window from a WindowDimmer is visible. |
| 59 bool IsWindowDimmerWindowVisible(WindowDimmer* window_dimmer) { | 57 bool IsWindowDimmerWindowVisible(WindowDimmer* window_dimmer) { |
| 60 return window_dimmer->window()->layer()->GetTargetVisibility(); | 58 return window_dimmer->window()->layer()->GetTargetVisibility(); |
| 61 } | 59 } |
| 62 | 60 |
| 63 } // namespace | 61 } // namespace |
| 64 | 62 |
| 65 // Adapter to fire OnPinnedContainerWindowStackingChanged(). | 63 // Adapter to fire OnPinnedContainerWindowStackingChanged(). |
| 66 class ScreenPinningController::PinnedContainerChildWindowObserver | 64 class ScreenPinningController::PinnedContainerChildWindowObserver |
| 67 : public aura::WindowObserver { | 65 : public aura::WindowObserver { |
| 68 public: | 66 public: |
| 69 explicit PinnedContainerChildWindowObserver( | 67 explicit PinnedContainerChildWindowObserver( |
| 70 ScreenPinningController* controller) | 68 ScreenPinningController* controller) |
| 71 : controller_(controller) {} | 69 : controller_(controller) {} |
| 72 | 70 |
| 73 void OnWindowStackingChanged(aura::Window* window) override { | 71 void OnWindowStackingChanged(aura::Window* window) override { |
| 74 controller_->OnPinnedContainerWindowStackingChanged(WmWindow::Get(window)); | 72 controller_->OnPinnedContainerWindowStackingChanged(window); |
| 75 } | 73 } |
| 76 | 74 |
| 77 private: | 75 private: |
| 78 ScreenPinningController* controller_; | 76 ScreenPinningController* controller_; |
| 79 DISALLOW_COPY_AND_ASSIGN(PinnedContainerChildWindowObserver); | 77 DISALLOW_COPY_AND_ASSIGN(PinnedContainerChildWindowObserver); |
| 80 }; | 78 }; |
| 81 | 79 |
| 82 // Adapter to translate OnWindowAdded/OnWillRemoveWindow for the container | 80 // Adapter to translate OnWindowAdded/OnWillRemoveWindow for the container |
| 83 // containing the pinned window, to the corresponding controller's methods. | 81 // containing the pinned window, to the corresponding controller's methods. |
| 84 class ScreenPinningController::PinnedContainerWindowObserver | 82 class ScreenPinningController::PinnedContainerWindowObserver |
| 85 : public aura::WindowObserver { | 83 : public aura::WindowObserver { |
| 86 public: | 84 public: |
| 87 explicit PinnedContainerWindowObserver(ScreenPinningController* controller) | 85 explicit PinnedContainerWindowObserver(ScreenPinningController* controller) |
| 88 : controller_(controller) {} | 86 : controller_(controller) {} |
| 89 | 87 |
| 90 void OnWindowAdded(aura::Window* new_window) override { | 88 void OnWindowAdded(aura::Window* new_window) override { |
| 91 controller_->OnWindowAddedToPinnedContainer(WmWindow::Get(new_window)); | 89 controller_->OnWindowAddedToPinnedContainer(new_window); |
| 92 } | 90 } |
| 93 void OnWillRemoveWindow(aura::Window* window) override { | 91 void OnWillRemoveWindow(aura::Window* window) override { |
| 94 controller_->OnWillRemoveWindowFromPinnedContainer(WmWindow::Get(window)); | 92 controller_->OnWillRemoveWindowFromPinnedContainer(window); |
| 95 } | 93 } |
| 96 void OnWindowDestroying(aura::Window* window) override { | 94 void OnWindowDestroying(aura::Window* window) override { |
| 97 // Just in case. There is nothing we can do here. | 95 // Just in case. There is nothing we can do here. |
| 98 window->RemoveObserver(this); | 96 window->RemoveObserver(this); |
| 99 } | 97 } |
| 100 | 98 |
| 101 private: | 99 private: |
| 102 ScreenPinningController* controller_; | 100 ScreenPinningController* controller_; |
| 103 DISALLOW_COPY_AND_ASSIGN(PinnedContainerWindowObserver); | 101 DISALLOW_COPY_AND_ASSIGN(PinnedContainerWindowObserver); |
| 104 }; | 102 }; |
| 105 | 103 |
| 106 // Adapter to fire OnSystemModalContainerWindowStackingChanged(). | 104 // Adapter to fire OnSystemModalContainerWindowStackingChanged(). |
| 107 class ScreenPinningController::SystemModalContainerChildWindowObserver | 105 class ScreenPinningController::SystemModalContainerChildWindowObserver |
| 108 : public aura::WindowObserver { | 106 : public aura::WindowObserver { |
| 109 public: | 107 public: |
| 110 explicit SystemModalContainerChildWindowObserver( | 108 explicit SystemModalContainerChildWindowObserver( |
| 111 ScreenPinningController* controller) | 109 ScreenPinningController* controller) |
| 112 : controller_(controller) {} | 110 : controller_(controller) {} |
| 113 | 111 |
| 114 void OnWindowStackingChanged(aura::Window* window) override { | 112 void OnWindowStackingChanged(aura::Window* window) override { |
| 115 controller_->OnSystemModalContainerWindowStackingChanged( | 113 controller_->OnSystemModalContainerWindowStackingChanged(window); |
| 116 WmWindow::Get(window)); | |
| 117 } | 114 } |
| 118 | 115 |
| 119 private: | 116 private: |
| 120 ScreenPinningController* controller_; | 117 ScreenPinningController* controller_; |
| 121 DISALLOW_COPY_AND_ASSIGN(SystemModalContainerChildWindowObserver); | 118 DISALLOW_COPY_AND_ASSIGN(SystemModalContainerChildWindowObserver); |
| 122 }; | 119 }; |
| 123 | 120 |
| 124 // Adapter to translate OnWindowAdded/OnWillRemoveWindow for the | 121 // Adapter to translate OnWindowAdded/OnWillRemoveWindow for the |
| 125 // SystemModalContainer to the corresponding controller's methods. | 122 // SystemModalContainer to the corresponding controller's methods. |
| 126 class ScreenPinningController::SystemModalContainerWindowObserver | 123 class ScreenPinningController::SystemModalContainerWindowObserver |
| 127 : public aura::WindowObserver { | 124 : public aura::WindowObserver { |
| 128 public: | 125 public: |
| 129 explicit SystemModalContainerWindowObserver( | 126 explicit SystemModalContainerWindowObserver( |
| 130 ScreenPinningController* controller) | 127 ScreenPinningController* controller) |
| 131 : controller_(controller) {} | 128 : controller_(controller) {} |
| 132 | 129 |
| 133 void OnWindowAdded(aura::Window* new_window) override { | 130 void OnWindowAdded(aura::Window* new_window) override { |
| 134 controller_->OnWindowAddedToSystemModalContainer(WmWindow::Get(new_window)); | 131 controller_->OnWindowAddedToSystemModalContainer(new_window); |
| 135 } | 132 } |
| 136 void OnWillRemoveWindow(aura::Window* window) override { | 133 void OnWillRemoveWindow(aura::Window* window) override { |
| 137 controller_->OnWillRemoveWindowFromSystemModalContainer( | 134 controller_->OnWillRemoveWindowFromSystemModalContainer(window); |
| 138 WmWindow::Get(window)); | |
| 139 } | 135 } |
| 140 void OnWindowDestroying(aura::Window* window) override { | 136 void OnWindowDestroying(aura::Window* window) override { |
| 141 // Just in case. There is nothing we can do here. | 137 // Just in case. There is nothing we can do here. |
| 142 window->RemoveObserver(this); | 138 window->RemoveObserver(this); |
| 143 } | 139 } |
| 144 | 140 |
| 145 private: | 141 private: |
| 146 ScreenPinningController* controller_; | 142 ScreenPinningController* controller_; |
| 147 DISALLOW_COPY_AND_ASSIGN(SystemModalContainerWindowObserver); | 143 DISALLOW_COPY_AND_ASSIGN(SystemModalContainerWindowObserver); |
| 148 }; | 144 }; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 161 } | 157 } |
| 162 | 158 |
| 163 ScreenPinningController::~ScreenPinningController() { | 159 ScreenPinningController::~ScreenPinningController() { |
| 164 ShellPort::Get()->RemoveDisplayObserver(this); | 160 ShellPort::Get()->RemoveDisplayObserver(this); |
| 165 } | 161 } |
| 166 | 162 |
| 167 bool ScreenPinningController::IsPinned() const { | 163 bool ScreenPinningController::IsPinned() const { |
| 168 return pinned_window_ != nullptr; | 164 return pinned_window_ != nullptr; |
| 169 } | 165 } |
| 170 | 166 |
| 171 void ScreenPinningController::SetPinnedWindow(WmWindow* pinned_window) { | 167 void ScreenPinningController::SetPinnedWindow(aura::Window* pinned_window) { |
| 172 if (pinned_window->GetWindowState()->IsPinned()) { | 168 if (wm::GetWindowState(pinned_window)->IsPinned()) { |
| 173 if (pinned_window_) { | 169 if (pinned_window_) { |
| 174 LOG(DFATAL) << "Pinned mode is enabled, while it is already in " | 170 LOG(DFATAL) << "Pinned mode is enabled, while it is already in " |
| 175 << "the pinned mode"; | 171 << "the pinned mode"; |
| 176 return; | 172 return; |
| 177 } | 173 } |
| 178 | 174 |
| 179 WmWindow* container = pinned_window->GetParent(); | 175 aura::Window* container = pinned_window->parent(); |
| 180 std::vector<WmWindow*> system_modal_containers = | 176 aura::Window::Windows system_modal_containers = |
| 181 GetSystemModalWindowsExceptPinned(pinned_window); | 177 GetSystemModalWindowsExceptPinned(pinned_window); |
| 182 | 178 |
| 183 // Set up the container which has the pinned window. | 179 // Set up the container which has the pinned window. |
| 184 pinned_window_ = pinned_window; | 180 pinned_window_ = pinned_window; |
| 185 container->StackChildAtTop(pinned_window); | 181 container->StackChildAtTop(pinned_window); |
| 186 container->StackChildBelow(CreateWindowDimmer(container), pinned_window); | 182 container->StackChildBelow(CreateWindowDimmer(container), pinned_window); |
| 187 | 183 |
| 188 // Set the dim windows to the system containers, other than the one which | 184 // Set the dim windows to the system containers, other than the one which |
| 189 // the root window of the pinned window holds. | 185 // the root window of the pinned window holds. |
| 190 for (WmWindow* system_modal : system_modal_containers) | 186 for (aura::Window* system_modal : system_modal_containers) |
| 191 system_modal->StackChildAtBottom(CreateWindowDimmer(system_modal)); | 187 system_modal->StackChildAtBottom(CreateWindowDimmer(system_modal)); |
| 192 | 188 |
| 193 // Set observers. | 189 // Set observers. |
| 194 WmWindow::GetAuraWindow(container)->AddObserver( | 190 container->AddObserver(pinned_container_window_observer_.get()); |
| 195 pinned_container_window_observer_.get()); | |
| 196 AddObserverToChildren(container, | 191 AddObserverToChildren(container, |
| 197 pinned_container_child_window_observer_.get()); | 192 pinned_container_child_window_observer_.get()); |
| 198 for (WmWindow* system_modal : system_modal_containers) { | 193 for (aura::Window* system_modal : system_modal_containers) { |
| 199 WmWindow::GetAuraWindow(system_modal) | 194 system_modal->AddObserver(system_modal_container_window_observer_.get()); |
| 200 ->AddObserver(system_modal_container_window_observer_.get()); | |
| 201 AddObserverToChildren( | 195 AddObserverToChildren( |
| 202 system_modal, system_modal_container_child_window_observer_.get()); | 196 system_modal, system_modal_container_child_window_observer_.get()); |
| 203 } | 197 } |
| 204 } else { | 198 } else { |
| 205 if (pinned_window != pinned_window_) { | 199 if (pinned_window != pinned_window_) { |
| 206 LOG(DFATAL) << "Pinned mode is being disabled, but for the different " | 200 LOG(DFATAL) << "Pinned mode is being disabled, but for the different " |
| 207 << "target window."; | 201 << "target window."; |
| 208 return; | 202 return; |
| 209 } | 203 } |
| 210 | 204 |
| 211 WmWindow* container = pinned_window->GetParent(); | 205 aura::Window* container = pinned_window->parent(); |
| 212 std::vector<WmWindow*> system_modal_containers = | 206 aura::Window::Windows system_modal_containers = |
| 213 GetSystemModalWindowsExceptPinned(pinned_window_); | 207 GetSystemModalWindowsExceptPinned(pinned_window_); |
| 214 | 208 |
| 215 // Unset observers. | 209 // Unset observers. |
| 216 for (WmWindow* system_modal : | 210 for (aura::Window* system_modal : |
| 217 GetSystemModalWindowsExceptPinned(pinned_window_)) { | 211 GetSystemModalWindowsExceptPinned(pinned_window_)) { |
| 218 RemoveObserverFromChildren( | 212 RemoveObserverFromChildren( |
| 219 system_modal, system_modal_container_child_window_observer_.get()); | 213 system_modal, system_modal_container_child_window_observer_.get()); |
| 220 WmWindow::GetAuraWindow(system_modal) | 214 system_modal->RemoveObserver( |
| 221 ->RemoveObserver(system_modal_container_window_observer_.get()); | 215 system_modal_container_window_observer_.get()); |
| 222 } | 216 } |
| 223 RemoveObserverFromChildren(container, | 217 RemoveObserverFromChildren(container, |
| 224 pinned_container_child_window_observer_.get()); | 218 pinned_container_child_window_observer_.get()); |
| 225 WmWindow::GetAuraWindow(container)->RemoveObserver( | 219 container->RemoveObserver(pinned_container_window_observer_.get()); |
| 226 pinned_container_window_observer_.get()); | |
| 227 | 220 |
| 228 window_dimmers_->clear(); | 221 window_dimmers_->clear(); |
| 229 | |
| 230 pinned_window_ = nullptr; | 222 pinned_window_ = nullptr; |
| 231 } | 223 } |
| 232 | 224 |
| 233 Shell::Get()->NotifyPinnedStateChanged(pinned_window); | 225 Shell::Get()->NotifyPinnedStateChanged(pinned_window); |
| 234 } | 226 } |
| 235 | 227 |
| 236 void ScreenPinningController::OnWindowAddedToPinnedContainer( | 228 void ScreenPinningController::OnWindowAddedToPinnedContainer( |
| 237 WmWindow* new_window) { | 229 aura::Window* new_window) { |
| 238 KeepPinnedWindowOnTop(); | 230 KeepPinnedWindowOnTop(); |
| 239 WmWindow::GetAuraWindow(new_window) | 231 new_window->AddObserver(pinned_container_child_window_observer_.get()); |
| 240 ->AddObserver(pinned_container_child_window_observer_.get()); | |
| 241 } | 232 } |
| 242 | 233 |
| 243 void ScreenPinningController::OnWillRemoveWindowFromPinnedContainer( | 234 void ScreenPinningController::OnWillRemoveWindowFromPinnedContainer( |
| 244 WmWindow* window) { | 235 aura::Window* window) { |
| 245 WmWindow::GetAuraWindow(window)->RemoveObserver( | 236 window->RemoveObserver(pinned_container_child_window_observer_.get()); |
| 246 pinned_container_child_window_observer_.get()); | |
| 247 if (window == pinned_window_) { | 237 if (window == pinned_window_) { |
| 248 pinned_window_->GetWindowState()->Restore(); | 238 wm::GetWindowState(pinned_window_)->Restore(); |
| 249 return; | 239 return; |
| 250 } | 240 } |
| 251 } | 241 } |
| 252 | 242 |
| 253 void ScreenPinningController::OnPinnedContainerWindowStackingChanged( | 243 void ScreenPinningController::OnPinnedContainerWindowStackingChanged( |
| 254 WmWindow* window) { | 244 aura::Window* window) { |
| 255 KeepPinnedWindowOnTop(); | 245 KeepPinnedWindowOnTop(); |
| 256 } | 246 } |
| 257 | 247 |
| 258 void ScreenPinningController::OnWindowAddedToSystemModalContainer( | 248 void ScreenPinningController::OnWindowAddedToSystemModalContainer( |
| 259 WmWindow* new_window) { | 249 aura::Window* new_window) { |
| 260 KeepDimWindowAtBottom(new_window->GetParent()->aura_window()); | 250 KeepDimWindowAtBottom(new_window->parent()); |
| 261 WmWindow::GetAuraWindow(new_window) | 251 new_window->AddObserver(system_modal_container_child_window_observer_.get()); |
| 262 ->AddObserver(system_modal_container_child_window_observer_.get()); | |
| 263 } | 252 } |
| 264 | 253 |
| 265 void ScreenPinningController::OnWillRemoveWindowFromSystemModalContainer( | 254 void ScreenPinningController::OnWillRemoveWindowFromSystemModalContainer( |
| 266 WmWindow* window) { | 255 aura::Window* window) { |
| 267 WmWindow::GetAuraWindow(window)->RemoveObserver( | 256 window->RemoveObserver(system_modal_container_child_window_observer_.get()); |
| 268 system_modal_container_child_window_observer_.get()); | |
| 269 } | 257 } |
| 270 | 258 |
| 271 void ScreenPinningController::OnSystemModalContainerWindowStackingChanged( | 259 void ScreenPinningController::OnSystemModalContainerWindowStackingChanged( |
| 272 WmWindow* window) { | 260 aura::Window* window) { |
| 273 KeepDimWindowAtBottom(window->GetParent()->aura_window()); | 261 KeepDimWindowAtBottom(window->parent()); |
| 274 } | 262 } |
| 275 | 263 |
| 276 WmWindow* ScreenPinningController::CreateWindowDimmer(WmWindow* container) { | 264 aura::Window* ScreenPinningController::CreateWindowDimmer( |
| 265 aura::Window* container) { |
| 277 std::unique_ptr<WindowDimmer> window_dimmer = | 266 std::unique_ptr<WindowDimmer> window_dimmer = |
| 278 base::MakeUnique<WindowDimmer>(container->aura_window()); | 267 base::MakeUnique<WindowDimmer>(container); |
| 279 window_dimmer->SetDimOpacity(1); // Fully opaque. | 268 window_dimmer->SetDimOpacity(1); // Fully opaque. |
| 280 ::wm::SetWindowFullscreen(window_dimmer->window(), true); | 269 ::wm::SetWindowFullscreen(window_dimmer->window(), true); |
| 281 window_dimmer->window()->Show(); | 270 window_dimmer->window()->Show(); |
| 282 WmWindow* window = WmWindow::Get(window_dimmer->window()); | 271 aura::Window* window = window_dimmer->window(); |
| 283 window_dimmers_->Set(container->aura_window(), std::move(window_dimmer)); | 272 window_dimmers_->Set(container, std::move(window_dimmer)); |
| 284 return window; | 273 return window; |
| 285 } | 274 } |
| 286 | 275 |
| 287 void ScreenPinningController::OnDisplayConfigurationChanged() { | 276 void ScreenPinningController::OnDisplayConfigurationChanged() { |
| 288 // Note: this is called on display attached or detached. | 277 // Note: this is called on display attached or detached. |
| 289 if (!IsPinned()) | 278 if (!IsPinned()) |
| 290 return; | 279 return; |
| 291 | 280 |
| 292 // On display detaching, all necessary windows are transfered to the | 281 // On display detaching, all necessary windows are transfered to the |
| 293 // primary display's tree, and called this. | 282 // primary display's tree, and called this. |
| 294 // So, delete WindowDimmers which are not a part of target system modal | 283 // So, delete WindowDimmers which are not a part of target system modal |
| 295 // container. | 284 // container. |
| 296 // On display attaching, the new system modal container does not have the | 285 // On display attaching, the new system modal container does not have the |
| 297 // WindowDimmer. So create it. | 286 // WindowDimmer. So create it. |
| 298 | 287 |
| 299 // First, delete unnecessary WindowDimmers. | 288 // First, delete unnecessary WindowDimmers. |
| 300 for (aura::Window* container : window_dimmers_->GetWindows()) { | 289 for (aura::Window* container : window_dimmers_->GetWindows()) { |
| 301 if (container != pinned_window_->GetParent()->aura_window() && | 290 if (container != pinned_window_->parent() && |
| 302 !IsWindowDimmerWindowVisible(window_dimmers_->Get(container))) { | 291 !IsWindowDimmerWindowVisible(window_dimmers_->Get(container))) { |
| 303 window_dimmers_->Set(container, nullptr); | 292 window_dimmers_->Set(container, nullptr); |
| 304 } | 293 } |
| 305 } | 294 } |
| 306 | 295 |
| 307 // Then, create missing WindowDimmers. | 296 // Then, create missing WindowDimmers. |
| 308 std::vector<WmWindow*> system_modal_containers = | 297 aura::Window::Windows system_modal_containers = |
| 309 GetSystemModalWindowsExceptPinned(pinned_window_); | 298 GetSystemModalWindowsExceptPinned(pinned_window_); |
| 310 for (WmWindow* system_modal : system_modal_containers) { | 299 for (aura::Window* system_modal : system_modal_containers) { |
| 311 if (window_dimmers_->Get(system_modal->aura_window())) { | 300 if (window_dimmers_->Get(system_modal)) { |
| 312 // |system_modal| already has a WindowDimmer. | 301 // |system_modal| already has a WindowDimmer. |
| 313 continue; | 302 continue; |
| 314 } | 303 } |
| 315 | 304 |
| 316 // This is the new system modal dialog. | 305 // This is the new system modal dialog. |
| 317 system_modal->StackChildAtBottom(CreateWindowDimmer(system_modal)); | 306 system_modal->StackChildAtBottom(CreateWindowDimmer(system_modal)); |
| 318 | 307 |
| 319 // Set observers to the tree. | 308 // Set observers to the tree. |
| 320 WmWindow::GetAuraWindow(system_modal) | 309 system_modal->AddObserver(system_modal_container_window_observer_.get()); |
| 321 ->AddObserver(system_modal_container_window_observer_.get()); | |
| 322 AddObserverToChildren(system_modal, | 310 AddObserverToChildren(system_modal, |
| 323 system_modal_container_child_window_observer_.get()); | 311 system_modal_container_child_window_observer_.get()); |
| 324 } | 312 } |
| 325 } | 313 } |
| 326 | 314 |
| 327 void ScreenPinningController::KeepPinnedWindowOnTop() { | 315 void ScreenPinningController::KeepPinnedWindowOnTop() { |
| 328 if (in_restacking_) | 316 if (in_restacking_) |
| 329 return; | 317 return; |
| 330 | 318 |
| 331 base::AutoReset<bool> auto_reset(&in_restacking_, true); | 319 base::AutoReset<bool> auto_reset(&in_restacking_, true); |
| 332 WmWindow* container = pinned_window_->GetParent(); | 320 aura::Window* container = pinned_window_->parent(); |
| 333 container->StackChildAtTop(pinned_window_); | 321 container->StackChildAtTop(pinned_window_); |
| 334 WindowDimmer* pinned_window_dimmer = | 322 WindowDimmer* pinned_window_dimmer = window_dimmers_->Get(container); |
| 335 window_dimmers_->Get(container->aura_window()); | 323 if (pinned_window_dimmer && pinned_window_dimmer->window()) |
| 336 if (pinned_window_dimmer && pinned_window_dimmer->window()) { | 324 container->StackChildBelow(pinned_window_dimmer->window(), pinned_window_); |
| 337 container->StackChildBelow(WmWindow::Get(pinned_window_dimmer->window()), | |
| 338 pinned_window_); | |
| 339 } | |
| 340 } | 325 } |
| 341 | 326 |
| 342 void ScreenPinningController::KeepDimWindowAtBottom(aura::Window* container) { | 327 void ScreenPinningController::KeepDimWindowAtBottom(aura::Window* container) { |
| 343 if (in_restacking_) | 328 if (in_restacking_) |
| 344 return; | 329 return; |
| 345 | 330 |
| 346 WindowDimmer* window_dimmer = window_dimmers_->Get(container); | 331 WindowDimmer* window_dimmer = window_dimmers_->Get(container); |
| 347 if (window_dimmer) { | 332 if (window_dimmer) { |
| 348 base::AutoReset<bool> auto_reset(&in_restacking_, true); | 333 base::AutoReset<bool> auto_reset(&in_restacking_, true); |
| 349 container->StackChildAtBottom(window_dimmer->window()); | 334 container->StackChildAtBottom(window_dimmer->window()); |
| 350 } | 335 } |
| 351 } | 336 } |
| 352 | 337 |
| 353 } // namespace ash | 338 } // namespace ash |
| OLD | NEW |