| Index: services/ui/public/cpp/window_tree_client.cc
|
| diff --git a/services/ui/public/cpp/window_tree_client.cc b/services/ui/public/cpp/window_tree_client.cc
|
| index 11e73b05533d8f45fb7c94dd285dadeb1e01723d..84b2f203e95bd1985702a25a058729e2edaf76ad 100644
|
| --- a/services/ui/public/cpp/window_tree_client.cc
|
| +++ b/services/ui/public/cpp/window_tree_client.cc
|
| @@ -473,28 +473,19 @@ bool WindowTreeClient::ApplyServerChangeToExistingInFlightChange(
|
| return true;
|
| }
|
|
|
| -Window* WindowTreeClient::BuildWindowTree(
|
| +void WindowTreeClient::BuildWindowTree(
|
| const mojo::Array<mojom::WindowDataPtr>& windows,
|
| Window* initial_parent) {
|
| - std::vector<Window*> parents;
|
| - Window* root = nullptr;
|
| - Window* last_window = nullptr;
|
| - if (initial_parent)
|
| - parents.push_back(initial_parent);
|
| - for (size_t i = 0; i < windows.size(); ++i) {
|
| - if (last_window && windows[i]->parent_id == server_id(last_window)) {
|
| - parents.push_back(last_window);
|
| - } else if (!parents.empty()) {
|
| - while (server_id(parents.back()) != windows[i]->parent_id)
|
| - parents.pop_back();
|
| - }
|
| - Window* window = AddWindowToClient(
|
| - this, !parents.empty() ? parents.back() : nullptr, windows[i]);
|
| - if (!last_window)
|
| - root = window;
|
| - last_window = window;
|
| + for (const auto& window_data : windows) {
|
| + Window* parent = window_data->parent_id == 0
|
| + ? nullptr
|
| + : GetWindowByServerId(window_data->parent_id);
|
| + Window* existing_window = GetWindowByServerId(window_data->window_id);
|
| + if (!existing_window)
|
| + AddWindowToClient(this, parent, window_data);
|
| + else if (parent)
|
| + WindowPrivate(parent).LocalAddChild(existing_window);
|
| }
|
| - return root;
|
| }
|
|
|
| Window* WindowTreeClient::NewWindowImpl(
|
|
|