Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(291)

Side by Side Diff: components/mus/ws/window_manager_window_tree_factory.cc

Issue 2072343002: Changes how window manager obtains WindowTree from mus (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: include Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "components/mus/ws/window_manager_window_tree_factory.h"
6
7 #include "base/bind.h"
8 #include "components/mus/ws/window_manager_window_tree_factory_set.h"
9 #include "components/mus/ws/window_server.h"
10 #include "components/mus/ws/window_tree.h"
11
12 namespace mus {
13 namespace ws {
14
15 struct WindowManagerWindowTreeFactory::PendingRequest {
16 mojom::WindowTreeRequest window_tree_request;
17 mojom::WindowTreeClientPtr window_tree_client;
18 };
19
20 WindowManagerWindowTreeFactory::WindowManagerWindowTreeFactory(
21 WindowManagerWindowTreeFactorySet* window_manager_window_tree_factory_set,
22 const UserId& user_id,
23 mojo::InterfaceRequest<mojom::WindowManagerWindowTreeFactory> request)
24 : window_manager_window_tree_factory_set_(
25 window_manager_window_tree_factory_set),
26 user_id_(user_id),
27 binding_(this),
28 window_tree_(nullptr) {
29 if (request.is_pending())
30 binding_.Bind(std::move(request));
31 }
32
33 WindowManagerWindowTreeFactory::~WindowManagerWindowTreeFactory() {}
34
35 void WindowManagerWindowTreeFactory::BindPendingRequest() {
36 if (!pending_request_)
37 return;
38
39 SetWindowTree(GetWindowServer()->CreateTreeForWindowManager(
40 user_id_, std::move(pending_request_->window_tree_request),
41 std::move(pending_request_->window_tree_client)));
42 pending_request_.reset();
43 }
44
45 void WindowManagerWindowTreeFactory::CreateWindowTree(
46 mojom::WindowTreeRequest window_tree_request,
47 mojom::WindowTreeClientPtr window_tree_client) {
48 // CreateWindowTree() can only be called once, so there is no reason to keep
49 // the binding around.
50 if (binding_.is_bound())
51 binding_.Close();
52
53 if (GetWindowServer()->created_one_display()) {
54 SetWindowTree(GetWindowServer()->CreateTreeForWindowManager(
55 user_id_, std::move(window_tree_request),
56 std::move(window_tree_client)));
57 } else {
58 pending_request_.reset(new PendingRequest);
59 pending_request_->window_tree_request = std::move(window_tree_request);
60 pending_request_->window_tree_client = std::move(window_tree_client);
61 window_manager_window_tree_factory_set_
62 ->OnWindowManagerWindowTreeFactoryReady(this);
63 }
64 }
65
66 WindowManagerWindowTreeFactory::WindowManagerWindowTreeFactory(
67 WindowManagerWindowTreeFactorySet* window_manager_window_tree_factory_set,
68 const UserId& user_id)
69 : window_manager_window_tree_factory_set_(
70 window_manager_window_tree_factory_set),
71 user_id_(user_id),
72 binding_(this),
73 window_tree_(nullptr) {}
74
75 WindowServer* WindowManagerWindowTreeFactory::GetWindowServer() {
76 return window_manager_window_tree_factory_set_->window_server();
77 }
78
79 void WindowManagerWindowTreeFactory::SetWindowTree(WindowTree* window_tree) {
80 DCHECK(!window_tree_);
81 window_tree_ = window_tree;
82
83 if (!pending_request_)
84 window_manager_window_tree_factory_set_
85 ->OnWindowManagerWindowTreeFactoryReady(this);
86 }
87
88 } // namespace ws
89 } // namespace mus
OLDNEW
« no previous file with comments | « components/mus/ws/window_manager_window_tree_factory.h ('k') | components/mus/ws/window_manager_window_tree_factory_set.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698