| Index: ash/mus/disconnected_app_handler.cc
|
| diff --git a/ash/mus/disconnected_app_handler.cc b/ash/mus/disconnected_app_handler.cc
|
| index 5631a7b9ff9f213ecaceb2daee6c45cb62e48798..9499bbf5cf78d962ce9b722bb4c767b8e1d88f73 100644
|
| --- a/ash/mus/disconnected_app_handler.cc
|
| +++ b/ash/mus/disconnected_app_handler.cc
|
| @@ -4,16 +4,65 @@
|
|
|
| #include "ash/mus/disconnected_app_handler.h"
|
|
|
| +#include "ash/common/shell_window_ids.h"
|
| +#include "ash/mus/bridge/wm_window_mus.h"
|
| +
|
| namespace ash {
|
| namespace mus {
|
| +namespace {
|
| +
|
| +bool IsContainer(::mus::Window* window) {
|
| + return WmWindowMus::Get(window)->IsContainer();
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +DisconnectedAppHandler::DisconnectedAppHandler(::mus::Window* root_window) {
|
| + WmWindowMus* root = WmWindowMus::Get(root_window);
|
| + for (int shell_window_id = kShellWindowId_Min;
|
| + shell_window_id < kShellWindowId_Max; ++shell_window_id) {
|
| + // kShellWindowId_VirtualKeyboardContainer is lazily created.
|
| + // TODO(sky): http://crbug.com/616909 .
|
| + // kShellWindowId_PhantomWindow is not a container, but a window.
|
| + if (shell_window_id == kShellWindowId_VirtualKeyboardContainer ||
|
| + shell_window_id == kShellWindowId_PhantomWindow)
|
| + continue;
|
| +
|
| +// kShellWindowId_MouseCursorContainer is chromeos specific.
|
| +#if !defined(OS_CHROMEOS)
|
| + if (shell_window_id == kShellWindowId_MouseCursorContainer)
|
| + continue;
|
| +#endif
|
|
|
| -DisconnectedAppHandler::DisconnectedAppHandler() {}
|
| + WmWindowMus* container = WmWindowMus::AsWmWindowMus(
|
| + root->GetChildByShellWindowId(shell_window_id));
|
| + Add(container->mus_window());
|
| +
|
| + // Add any pre-existing windows in the container to
|
| + // |disconnected_app_handler_|.
|
| + for (::mus::Window* child : container->mus_window()->children()) {
|
| + if (!IsContainer(child))
|
| + Add(child);
|
| + }
|
| + }
|
| +}
|
|
|
| DisconnectedAppHandler::~DisconnectedAppHandler() {}
|
|
|
| void DisconnectedAppHandler::OnWindowEmbeddedAppDisconnected(
|
| ::mus::Window* window) {
|
| - window->Destroy();
|
| + if (!IsContainer(window))
|
| + window->Destroy();
|
| +}
|
| +
|
| +void DisconnectedAppHandler::OnTreeChanging(const TreeChangeParams& params) {
|
| + if (params.old_parent == params.receiver && IsContainer(params.old_parent))
|
| + Remove(params.target);
|
| +
|
| + if (params.new_parent == params.receiver && IsContainer(params.new_parent))
|
| + Add(params.target);
|
| +
|
| + ::mus::WindowTracker::OnTreeChanging(params);
|
| }
|
|
|
| } // namespace mus
|
|
|