forked from chromium/chromium
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdisconnected_app_handler.cc
69 lines (54 loc) · 2.09 KB
/
disconnected_app_handler.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ash/mus/disconnected_app_handler.h"
#include "ash/mus/bridge/wm_window_mus.h"
#include "ash/public/cpp/shell_window_ids.h"
namespace ash {
namespace mus {
namespace {
bool IsContainer(ui::Window* window) {
return WmWindowMus::Get(window)->IsContainer();
}
} // namespace
DisconnectedAppHandler::DisconnectedAppHandler(ui::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
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 (ui::Window* child : container->mus_window()->children()) {
if (!IsContainer(child))
Add(child);
}
}
}
DisconnectedAppHandler::~DisconnectedAppHandler() {}
void DisconnectedAppHandler::OnWindowEmbeddedAppDisconnected(
ui::Window* window) {
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);
ui::WindowTracker::OnTreeChanging(params);
}
} // namespace mus
} // namespace ash