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

Side by Side Diff: mash/wm/root_window_controller.cc

Issue 2024313002: Moves mash/wm/public -> ash/public (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: feedback 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
« no previous file with comments | « mash/wm/root_window_controller.h ('k') | mash/wm/shelf_layout_impl.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "mash/wm/root_window_controller.h" 5 #include "mash/wm/root_window_controller.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <map> 9 #include <map>
10 #include <sstream> 10 #include <sstream>
(...skipping 26 matching lines...) Expand all
37 #include "mash/wm/screenlock_layout.h" 37 #include "mash/wm/screenlock_layout.h"
38 #include "mash/wm/shadow_controller.h" 38 #include "mash/wm/shadow_controller.h"
39 #include "mash/wm/shelf_layout_manager.h" 39 #include "mash/wm/shelf_layout_manager.h"
40 #include "mash/wm/status_layout_manager.h" 40 #include "mash/wm/status_layout_manager.h"
41 #include "mash/wm/window_manager.h" 41 #include "mash/wm/window_manager.h"
42 #include "mash/wm/window_manager_application.h" 42 #include "mash/wm/window_manager_application.h"
43 #include "mojo/public/cpp/bindings/type_converter.h" 43 #include "mojo/public/cpp/bindings/type_converter.h"
44 #include "services/shell/public/cpp/connector.h" 44 #include "services/shell/public/cpp/connector.h"
45 #include "ui/display/mojo/display_type_converters.h" 45 #include "ui/display/mojo/display_type_converters.h"
46 46
47 using ash::mojom::Container;
48
47 namespace mash { 49 namespace mash {
48 namespace wm { 50 namespace wm {
49 namespace { 51 namespace {
50 52
51 const uint32_t kWindowSwitchAccelerator = 1; 53 const uint32_t kWindowSwitchAccelerator = 1;
52 54
53 void AssertTrue(bool success) { 55 void AssertTrue(bool success) {
54 DCHECK(success); 56 DCHECK(success);
55 } 57 }
56 58
57 int ContainerToLocalId(mojom::Container container) { 59 int ContainerToLocalId(Container container) {
58 return static_cast<int>(container); 60 return static_cast<int>(container);
59 } 61 }
60 62
61 class WorkspaceLayoutManagerDelegateImpl 63 class WorkspaceLayoutManagerDelegateImpl
62 : public ash::wm::WorkspaceLayoutManagerDelegate { 64 : public ash::wm::WorkspaceLayoutManagerDelegate {
63 public: 65 public:
64 explicit WorkspaceLayoutManagerDelegateImpl( 66 explicit WorkspaceLayoutManagerDelegateImpl(
65 WmRootWindowControllerMus* root_window_controller) 67 WmRootWindowControllerMus* root_window_controller)
66 : root_window_controller_(root_window_controller) {} 68 : root_window_controller_(root_window_controller) {}
67 ~WorkspaceLayoutManagerDelegateImpl() override = default; 69 ~WorkspaceLayoutManagerDelegateImpl() override = default;
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
102 } else { 104 } else {
103 // This case only happens if we're destroyed before OnEmbed(). 105 // This case only happens if we're destroyed before OnEmbed().
104 delete this; 106 delete this;
105 } 107 }
106 } 108 }
107 109
108 shell::Connector* RootWindowController::GetConnector() { 110 shell::Connector* RootWindowController::GetConnector() {
109 return app_->connector(); 111 return app_->connector();
110 } 112 }
111 113
112 mus::Window* RootWindowController::GetWindowForContainer( 114 mus::Window* RootWindowController::GetWindowForContainer(Container container) {
113 mojom::Container container) {
114 return root_->GetChildByLocalId(ContainerToLocalId(container)); 115 return root_->GetChildByLocalId(ContainerToLocalId(container));
115 } 116 }
116 117
117 bool RootWindowController::WindowIsContainer(const mus::Window* window) const { 118 bool RootWindowController::WindowIsContainer(const mus::Window* window) const {
118 return window && 119 return window && window->local_id() > ContainerToLocalId(Container::ROOT) &&
119 window->local_id() > ContainerToLocalId(mojom::Container::ROOT) && 120 window->local_id() < ContainerToLocalId(Container::COUNT);
120 window->local_id() < ContainerToLocalId(mojom::Container::COUNT);
121 } 121 }
122 122
123 mus::WindowManagerClient* RootWindowController::window_manager_client() { 123 mus::WindowManagerClient* RootWindowController::window_manager_client() {
124 return window_manager_->window_manager_client(); 124 return window_manager_->window_manager_client();
125 } 125 }
126 126
127 void RootWindowController::OnAccelerator(uint32_t id, const ui::Event& event) { 127 void RootWindowController::OnAccelerator(uint32_t id, const ui::Event& event) {
128 switch (id) { 128 switch (id) {
129 case kWindowSwitchAccelerator: 129 case kWindowSwitchAccelerator:
130 window_manager_client()->ActivateNextWindow(); 130 window_manager_client()->ActivateNextWindow();
131 break; 131 break;
132 default: 132 default:
133 app_->OnAccelerator(id, event); 133 app_->OnAccelerator(id, event);
134 break; 134 break;
135 } 135 }
136 } 136 }
137 137
138 ShelfLayoutManager* RootWindowController::GetShelfLayoutManager() { 138 ShelfLayoutManager* RootWindowController::GetShelfLayoutManager() {
139 return static_cast<ShelfLayoutManager*>( 139 return static_cast<ShelfLayoutManager*>(
140 layout_managers_[GetWindowForContainer( 140 layout_managers_[GetWindowForContainer(Container::USER_PRIVATE_SHELF)]
141 mojom::Container::USER_PRIVATE_SHELF)]
142 .get()); 141 .get());
143 } 142 }
144 143
145 StatusLayoutManager* RootWindowController::GetStatusLayoutManager() { 144 StatusLayoutManager* RootWindowController::GetStatusLayoutManager() {
146 return static_cast<StatusLayoutManager*>( 145 return static_cast<StatusLayoutManager*>(
147 layout_managers_[GetWindowForContainer(mojom::Container::STATUS)].get()); 146 layout_managers_[GetWindowForContainer(Container::STATUS)].get());
148 } 147 }
149 148
150 RootWindowController::RootWindowController(WindowManagerApplication* app) 149 RootWindowController::RootWindowController(WindowManagerApplication* app)
151 : app_(app), root_(nullptr), window_count_(0) { 150 : app_(app), root_(nullptr), window_count_(0) {
152 window_manager_.reset(new WindowManager); 151 window_manager_.reset(new WindowManager);
153 } 152 }
154 153
155 RootWindowController::~RootWindowController() {} 154 RootWindowController::~RootWindowController() {}
156 155
157 void RootWindowController::AddAccelerators() { 156 void RootWindowController::AddAccelerators() {
158 window_manager_client()->AddAccelerator( 157 window_manager_client()->AddAccelerator(
159 kWindowSwitchAccelerator, 158 kWindowSwitchAccelerator,
160 mus::CreateKeyMatcher(mus::mojom::KeyboardCode::TAB, 159 mus::CreateKeyMatcher(mus::mojom::KeyboardCode::TAB,
161 mus::mojom::kEventFlagControlDown), 160 mus::mojom::kEventFlagControlDown),
162 base::Bind(&AssertTrue)); 161 base::Bind(&AssertTrue));
163 } 162 }
164 163
165 void RootWindowController::OnEmbed(mus::Window* root) { 164 void RootWindowController::OnEmbed(mus::Window* root) {
166 root_ = root; 165 root_ = root;
167 root_->set_local_id(ContainerToLocalId(mojom::Container::ROOT)); 166 root_->set_local_id(ContainerToLocalId(Container::ROOT));
168 root_->AddObserver(this); 167 root_->AddObserver(this);
169 layout_managers_[root_].reset(new FillLayout(root_)); 168 layout_managers_[root_].reset(new FillLayout(root_));
170 169
171 app_->OnRootWindowControllerGotRoot(this); 170 app_->OnRootWindowControllerGotRoot(this);
172 171
173 wm_root_window_controller_.reset( 172 wm_root_window_controller_.reset(
174 new WmRootWindowControllerMus(app_->globals(), this)); 173 new WmRootWindowControllerMus(app_->globals(), this));
175 174
176 CreateContainers(); 175 CreateContainers();
177 176
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
222 221
223 ash::PanelLayoutManager::Get(WmWindowMus::Get(root_)) 222 ash::PanelLayoutManager::Get(WmWindowMus::Get(root_))
224 ->SetShelf(wm_shelf_.get()); 223 ->SetShelf(wm_shelf_.get());
225 224
226 // TODO: http://crbug.com/614182 Ash's ShelfLayoutManager implements 225 // TODO: http://crbug.com/614182 Ash's ShelfLayoutManager implements
227 // DockedWindowLayoutManagerObserver so that it can inset by the docked 226 // DockedWindowLayoutManagerObserver so that it can inset by the docked
228 // windows. 227 // windows.
229 // docked_layout_manager_->AddObserver(shelf_->shelf_layout_manager()); 228 // docked_layout_manager_->AddObserver(shelf_->shelf_layout_manager());
230 } 229 }
231 230
232 void RootWindowController::CreateContainer( 231 void RootWindowController::CreateContainer(Container container,
233 mash::wm::mojom::Container container, 232 Container parent_container) {
234 mash::wm::mojom::Container parent_container) {
235 // Set the window's name to the container name (e.g. "Container::LOGIN"), 233 // Set the window's name to the container name (e.g. "Container::LOGIN"),
236 // which makes the window hierarchy easier to read. 234 // which makes the window hierarchy easier to read.
237 std::map<std::string, std::vector<uint8_t>> properties; 235 std::map<std::string, std::vector<uint8_t>> properties;
238 std::ostringstream container_name; 236 std::ostringstream container_name;
239 container_name << container; 237 container_name << container;
240 properties[mus::mojom::WindowManager::kName_Property] = 238 properties[mus::mojom::WindowManager::kName_Property] =
241 mojo::ConvertTo<std::vector<uint8_t>>(container_name.str()); 239 mojo::ConvertTo<std::vector<uint8_t>>(container_name.str());
242 240
243 mus::Window* window = root_->window_tree()->NewWindow(&properties); 241 mus::Window* window = root_->window_tree()->NewWindow(&properties);
244 window->set_local_id(ContainerToLocalId(container)); 242 window->set_local_id(ContainerToLocalId(container));
245 layout_managers_[window].reset(new FillLayout(window)); 243 layout_managers_[window].reset(new FillLayout(window));
246 WmWindowMus::Get(window)->SetShellWindowId( 244 WmWindowMus::Get(window)->SetShellWindowId(
247 MashContainerToAshContainer(container)); 245 MashContainerToAshContainer(container));
248 246
249 // User private windows are hidden by default until the window manager learns 247 // User private windows are hidden by default until the window manager learns
250 // the lock state, so their contents are never accidentally revealed. Tests, 248 // the lock state, so their contents are never accidentally revealed. Tests,
251 // however, usually assume the screen is unlocked. 249 // however, usually assume the screen is unlocked.
252 const bool is_test = base::CommandLine::ForCurrentProcess()->HasSwitch( 250 const bool is_test = base::CommandLine::ForCurrentProcess()->HasSwitch(
253 mus::switches::kUseTestConfig); 251 mus::switches::kUseTestConfig);
254 window->SetVisible(container != mojom::Container::USER_PRIVATE || is_test); 252 window->SetVisible(container != Container::USER_PRIVATE || is_test);
255 253
256 mus::Window* parent = 254 mus::Window* parent =
257 root_->GetChildByLocalId(ContainerToLocalId(parent_container)); 255 root_->GetChildByLocalId(ContainerToLocalId(parent_container));
258 parent->AddChild(window); 256 parent->AddChild(window);
259 } 257 }
260 258
261 void RootWindowController::CreateContainers() { 259 void RootWindowController::CreateContainers() {
262 CreateContainer(mojom::Container::ALL_USER_BACKGROUND, 260 CreateContainer(Container::ALL_USER_BACKGROUND, Container::ROOT);
263 mojom::Container::ROOT); 261 CreateContainer(Container::USER, Container::ROOT);
264 CreateContainer(mojom::Container::USER, mojom::Container::ROOT); 262 CreateContainer(Container::USER_BACKGROUND, Container::USER);
265 CreateContainer(mojom::Container::USER_BACKGROUND, mojom::Container::USER); 263 CreateContainer(Container::USER_PRIVATE, Container::USER);
266 CreateContainer(mojom::Container::USER_PRIVATE, mojom::Container::USER); 264 CreateContainer(Container::USER_PRIVATE_WINDOWS, Container::USER_PRIVATE);
267 CreateContainer(mojom::Container::USER_PRIVATE_WINDOWS, 265 CreateContainer(Container::USER_PRIVATE_ALWAYS_ON_TOP_WINDOWS,
268 mojom::Container::USER_PRIVATE); 266 Container::USER_PRIVATE);
269 CreateContainer(mojom::Container::USER_PRIVATE_ALWAYS_ON_TOP_WINDOWS, 267 CreateContainer(Container::USER_PRIVATE_DOCKED_WINDOWS,
270 mojom::Container::USER_PRIVATE); 268 Container::USER_PRIVATE);
271 CreateContainer(mojom::Container::USER_PRIVATE_DOCKED_WINDOWS, 269 CreateContainer(Container::USER_PRIVATE_PRESENTATION_WINDOWS,
272 mojom::Container::USER_PRIVATE); 270 Container::USER_PRIVATE);
273 CreateContainer(mojom::Container::USER_PRIVATE_PRESENTATION_WINDOWS, 271 CreateContainer(Container::USER_PRIVATE_SHELF, Container::USER_PRIVATE);
274 mojom::Container::USER_PRIVATE); 272 CreateContainer(Container::USER_PRIVATE_PANELS, Container::USER_PRIVATE);
275 CreateContainer(mojom::Container::USER_PRIVATE_SHELF, 273 CreateContainer(Container::USER_PRIVATE_APP_LIST, Container::USER_PRIVATE);
276 mojom::Container::USER_PRIVATE); 274 CreateContainer(Container::USER_PRIVATE_SYSTEM_MODAL,
277 CreateContainer(mojom::Container::USER_PRIVATE_PANELS, 275 Container::USER_PRIVATE);
278 mojom::Container::USER_PRIVATE); 276 CreateContainer(Container::LOGIN, Container::ROOT);
279 CreateContainer(mojom::Container::USER_PRIVATE_APP_LIST, 277 CreateContainer(Container::LOGIN_WINDOWS, Container::LOGIN);
280 mojom::Container::USER_PRIVATE); 278 CreateContainer(Container::LOGIN_APP, Container::LOGIN);
281 CreateContainer(mojom::Container::USER_PRIVATE_SYSTEM_MODAL, 279 CreateContainer(Container::LOGIN_SHELF, Container::LOGIN);
282 mojom::Container::USER_PRIVATE); 280 CreateContainer(Container::STATUS, Container::ROOT);
283 CreateContainer(mojom::Container::LOGIN, mojom::Container::ROOT); 281 CreateContainer(Container::BUBBLES, Container::ROOT);
284 CreateContainer(mojom::Container::LOGIN_WINDOWS, mojom::Container::LOGIN); 282 CreateContainer(Container::SYSTEM_MODAL_WINDOWS, Container::ROOT);
285 CreateContainer(mojom::Container::LOGIN_APP, mojom::Container::LOGIN); 283 CreateContainer(Container::KEYBOARD, Container::ROOT);
286 CreateContainer(mojom::Container::LOGIN_SHELF, mojom::Container::LOGIN); 284 CreateContainer(Container::MENUS, Container::ROOT);
287 CreateContainer(mojom::Container::STATUS, mojom::Container::ROOT); 285 CreateContainer(Container::DRAG_AND_TOOLTIPS, Container::ROOT);
288 CreateContainer(mojom::Container::BUBBLES, mojom::Container::ROOT);
289 CreateContainer(mojom::Container::SYSTEM_MODAL_WINDOWS,
290 mojom::Container::ROOT);
291 CreateContainer(mojom::Container::KEYBOARD, mojom::Container::ROOT);
292 CreateContainer(mojom::Container::MENUS, mojom::Container::ROOT);
293 CreateContainer(mojom::Container::DRAG_AND_TOOLTIPS, mojom::Container::ROOT);
294 286
295 // Override the default layout managers for certain containers. 287 // Override the default layout managers for certain containers.
296 mus::Window* user_background = 288 mus::Window* user_background =
297 GetWindowForContainer(mojom::Container::USER_BACKGROUND); 289 GetWindowForContainer(Container::USER_BACKGROUND);
298 layout_managers_[user_background].reset( 290 layout_managers_[user_background].reset(
299 new BackgroundLayout(user_background)); 291 new BackgroundLayout(user_background));
300 292
301 mus::Window* login_app = GetWindowForContainer(mojom::Container::LOGIN_APP); 293 mus::Window* login_app = GetWindowForContainer(Container::LOGIN_APP);
302 layout_managers_[login_app].reset(new ScreenlockLayout(login_app)); 294 layout_managers_[login_app].reset(new ScreenlockLayout(login_app));
303 295
304 mus::Window* user_shelf = 296 mus::Window* user_shelf =
305 GetWindowForContainer(mojom::Container::USER_PRIVATE_SHELF); 297 GetWindowForContainer(Container::USER_PRIVATE_SHELF);
306 ShelfLayoutManager* shelf_layout_manager = 298 ShelfLayoutManager* shelf_layout_manager =
307 new ShelfLayoutManager(user_shelf, this); 299 new ShelfLayoutManager(user_shelf, this);
308 layout_managers_[user_shelf].reset(shelf_layout_manager); 300 layout_managers_[user_shelf].reset(shelf_layout_manager);
309 301
310 wm_shelf_.reset(new WmShelfMus(shelf_layout_manager)); 302 wm_shelf_.reset(new WmShelfMus(shelf_layout_manager));
311 303
312 mus::Window* status = GetWindowForContainer(mojom::Container::STATUS); 304 mus::Window* status = GetWindowForContainer(Container::STATUS);
313 layout_managers_[status].reset(new StatusLayoutManager(status)); 305 layout_managers_[status].reset(new StatusLayoutManager(status));
314 306
315 mus::Window* user_private_windows = 307 mus::Window* user_private_windows =
316 GetWindowForContainer(mojom::Container::USER_PRIVATE_WINDOWS); 308 GetWindowForContainer(Container::USER_PRIVATE_WINDOWS);
317 // WorkspaceLayoutManager is not a mash::wm::LayoutManager (it's an 309 // WorkspaceLayoutManager is not a mash::wm::LayoutManager (it's an
318 // ash::wm::LayoutManager), so it can't be in |layout_managers_|. 310 // ash::wm::LayoutManager), so it can't be in |layout_managers_|.
319 layout_managers_.erase(user_private_windows); 311 layout_managers_.erase(user_private_windows);
320 std::unique_ptr<WorkspaceLayoutManagerDelegateImpl> 312 std::unique_ptr<WorkspaceLayoutManagerDelegateImpl>
321 workspace_layout_manager_delegate(new WorkspaceLayoutManagerDelegateImpl( 313 workspace_layout_manager_delegate(new WorkspaceLayoutManagerDelegateImpl(
322 wm_root_window_controller_.get())); 314 wm_root_window_controller_.get()));
323 WmWindowMus* user_private_windows_wm = WmWindowMus::Get(user_private_windows); 315 WmWindowMus* user_private_windows_wm = WmWindowMus::Get(user_private_windows);
324 user_private_windows_wm->SetSnapsChildrenToPhysicalPixelBoundary(); 316 user_private_windows_wm->SetSnapsChildrenToPhysicalPixelBoundary();
325 user_private_windows_wm->SetChildrenUseExtendedHitRegion(); 317 user_private_windows_wm->SetChildrenUseExtendedHitRegion();
326 user_private_windows_wm->SetLayoutManager( 318 user_private_windows_wm->SetLayoutManager(
327 base::WrapUnique(new ash::WorkspaceLayoutManager( 319 base::WrapUnique(new ash::WorkspaceLayoutManager(
328 user_private_windows_wm, 320 user_private_windows_wm,
329 std::move(workspace_layout_manager_delegate)))); 321 std::move(workspace_layout_manager_delegate))));
330 322
331 mus::Window* user_private_docked_windows = 323 mus::Window* user_private_docked_windows =
332 GetWindowForContainer(mojom::Container::USER_PRIVATE_DOCKED_WINDOWS); 324 GetWindowForContainer(Container::USER_PRIVATE_DOCKED_WINDOWS);
333 WmWindowMus* user_private_docked_windows_wm = 325 WmWindowMus* user_private_docked_windows_wm =
334 WmWindowMus::Get(user_private_docked_windows); 326 WmWindowMus::Get(user_private_docked_windows);
335 user_private_docked_windows_wm->SetSnapsChildrenToPhysicalPixelBoundary(); 327 user_private_docked_windows_wm->SetSnapsChildrenToPhysicalPixelBoundary();
336 layout_managers_.erase(user_private_docked_windows); 328 layout_managers_.erase(user_private_docked_windows);
337 user_private_docked_windows_wm->SetChildrenUseExtendedHitRegion(); 329 user_private_docked_windows_wm->SetChildrenUseExtendedHitRegion();
338 user_private_docked_windows_wm->SetLayoutManager(base::WrapUnique( 330 user_private_docked_windows_wm->SetLayoutManager(base::WrapUnique(
339 new ash::DockedWindowLayoutManager(user_private_docked_windows_wm))); 331 new ash::DockedWindowLayoutManager(user_private_docked_windows_wm)));
340 332
341 mus::Window* user_private_panels = 333 mus::Window* user_private_panels =
342 GetWindowForContainer(mojom::Container::USER_PRIVATE_PANELS); 334 GetWindowForContainer(Container::USER_PRIVATE_PANELS);
343 WmWindowMus* user_private_panels_wm = WmWindowMus::Get(user_private_panels); 335 WmWindowMus* user_private_panels_wm = WmWindowMus::Get(user_private_panels);
344 user_private_panels_wm->SetSnapsChildrenToPhysicalPixelBoundary(); 336 user_private_panels_wm->SetSnapsChildrenToPhysicalPixelBoundary();
345 layout_managers_.erase(user_private_panels); 337 layout_managers_.erase(user_private_panels);
346 user_private_panels_wm->SetChildrenUseExtendedHitRegion(); 338 user_private_panels_wm->SetChildrenUseExtendedHitRegion();
347 user_private_panels_wm->SetLayoutManager( 339 user_private_panels_wm->SetLayoutManager(
348 base::WrapUnique(new ash::PanelLayoutManager(user_private_panels_wm))); 340 base::WrapUnique(new ash::PanelLayoutManager(user_private_panels_wm)));
349 341
350 mus::Window* user_private_always_on_top = GetWindowForContainer( 342 mus::Window* user_private_always_on_top =
351 mojom::Container::USER_PRIVATE_ALWAYS_ON_TOP_WINDOWS); 343 GetWindowForContainer(Container::USER_PRIVATE_ALWAYS_ON_TOP_WINDOWS);
352 WmWindowMus* user_private_always_on_top_wm = 344 WmWindowMus* user_private_always_on_top_wm =
353 WmWindowMus::Get(user_private_always_on_top); 345 WmWindowMus::Get(user_private_always_on_top);
354 user_private_always_on_top_wm->SetChildrenUseExtendedHitRegion(); 346 user_private_always_on_top_wm->SetChildrenUseExtendedHitRegion();
355 user_private_always_on_top_wm->SetSnapsChildrenToPhysicalPixelBoundary(); 347 user_private_always_on_top_wm->SetSnapsChildrenToPhysicalPixelBoundary();
356 } 348 }
357 349
358 } // namespace wm 350 } // namespace wm
359 } // namespace mash 351 } // namespace mash
OLDNEW
« no previous file with comments | « mash/wm/root_window_controller.h ('k') | mash/wm/shelf_layout_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698