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

Side by Side Diff: mojo/examples/window_manager/window_manager.cc

Issue 474883003: Move focus from the view manager to the window manager. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 6 years, 4 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 | Annotate | Revision Log
« no previous file with comments | « mojo/examples/window_manager/DEPS ('k') | mojo/examples/wm_flow/wm/wm.cc » ('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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "base/basictypes.h" 5 #include "base/basictypes.h"
6 #include "base/bind.h" 6 #include "base/bind.h"
7 #include "mojo/examples/keyboard/keyboard.mojom.h" 7 #include "mojo/examples/keyboard/keyboard.mojom.h"
8 #include "mojo/examples/window_manager/debug_panel.h" 8 #include "mojo/examples/window_manager/debug_panel.h"
9 #include "mojo/examples/window_manager/window_manager.mojom.h" 9 #include "mojo/examples/window_manager/window_manager.mojom.h"
10 #include "mojo/public/cpp/application/application_connection.h" 10 #include "mojo/public/cpp/application/application_connection.h"
11 #include "mojo/public/cpp/application/application_delegate.h" 11 #include "mojo/public/cpp/application/application_delegate.h"
12 #include "mojo/public/cpp/application/application_impl.h" 12 #include "mojo/public/cpp/application/application_impl.h"
13 #include "mojo/public/cpp/application/interface_factory_impl.h" 13 #include "mojo/public/cpp/application/interface_factory_impl.h"
14 #include "mojo/services/public/cpp/geometry/geometry_type_converters.h" 14 #include "mojo/services/public/cpp/geometry/geometry_type_converters.h"
15 #include "mojo/services/public/cpp/input_events/input_events_type_converters.h" 15 #include "mojo/services/public/cpp/input_events/input_events_type_converters.h"
16 #include "mojo/services/public/cpp/view_manager/view.h" 16 #include "mojo/services/public/cpp/view_manager/view.h"
17 #include "mojo/services/public/cpp/view_manager/view_manager.h" 17 #include "mojo/services/public/cpp/view_manager/view_manager.h"
18 #include "mojo/services/public/cpp/view_manager/view_manager_client_factory.h"
19 #include "mojo/services/public/cpp/view_manager/view_manager_delegate.h" 18 #include "mojo/services/public/cpp/view_manager/view_manager_delegate.h"
20 #include "mojo/services/public/cpp/view_manager/view_observer.h" 19 #include "mojo/services/public/cpp/view_manager/view_observer.h"
21 #include "mojo/services/public/cpp/view_manager/window_manager_delegate.h" 20 #include "mojo/services/public/cpp/view_manager/window_manager_delegate.h"
22 #include "mojo/services/public/interfaces/input_events/input_events.mojom.h" 21 #include "mojo/services/public/interfaces/input_events/input_events.mojom.h"
23 #include "mojo/services/public/interfaces/launcher/launcher.mojom.h" 22 #include "mojo/services/public/interfaces/launcher/launcher.mojom.h"
24 #include "mojo/services/public/interfaces/navigation/navigation.mojom.h" 23 #include "mojo/services/public/interfaces/navigation/navigation.mojom.h"
24 #include "mojo/services/window_manager/window_manager_app.h"
25 #include "mojo/views/views_init.h" 25 #include "mojo/views/views_init.h"
26 #include "ui/aura/window.h"
26 #include "ui/events/event.h" 27 #include "ui/events/event.h"
27 #include "ui/events/event_constants.h" 28 #include "ui/events/event_constants.h"
28 #include "ui/gfx/geometry/size_conversions.h" 29 #include "ui/gfx/geometry/size_conversions.h"
29 30
30 #if defined CreateWindow 31 #if defined CreateWindow
31 #undef CreateWindow 32 #undef CreateWindow
32 #endif 33 #endif
33 34
34 namespace mojo { 35 namespace mojo {
35 namespace examples { 36 namespace examples {
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
243 const Id launcher_ui_view_id_; 244 const Id launcher_ui_view_id_;
244 const Id control_panel_view_id_; 245 const Id control_panel_view_id_;
245 246
246 DISALLOW_COPY_AND_ASSIGN(RootLayoutManager); 247 DISALLOW_COPY_AND_ASSIGN(RootLayoutManager);
247 }; 248 };
248 249
249 class WindowManager 250 class WindowManager
250 : public ApplicationDelegate, 251 : public ApplicationDelegate,
251 public DebugPanel::Delegate, 252 public DebugPanel::Delegate,
252 public ViewManagerDelegate, 253 public ViewManagerDelegate,
253 public WindowManagerDelegate { 254 public WindowManagerDelegate,
255 public ui::EventHandler {
254 public: 256 public:
255 WindowManager() 257 WindowManager()
256 : window_manager_factory_(this), 258 : window_manager_factory_(this),
257 navigator_host_factory_(this), 259 navigator_host_factory_(this),
258 launcher_ui_(NULL), 260 launcher_ui_(NULL),
259 view_manager_(NULL), 261 view_manager_(NULL),
260 view_manager_client_factory_(this), 262 window_manager_app_(new WindowManagerApp(this, this)),
261 app_(NULL) {} 263 app_(NULL) {}
262 264
263 virtual ~WindowManager() {} 265 virtual ~WindowManager() {
266 window_manager_app_->host()->window()->RemovePreTargetHandler(this);
267 }
264 268
265 void CloseWindow(Id view_id) { 269 void CloseWindow(Id view_id) {
266 View* view = view_manager_->GetViewById(view_id); 270 View* view = view_manager_->GetViewById(view_id);
267 DCHECK(view); 271 DCHECK(view);
268 std::vector<View*>::iterator iter = 272 std::vector<View*>::iterator iter =
269 std::find(windows_.begin(), windows_.end(), view); 273 std::find(windows_.begin(), windows_.end(), view);
270 DCHECK(iter != windows_.end()); 274 DCHECK(iter != windows_.end());
271 windows_.erase(iter); 275 windows_.erase(iter);
272 view->Destroy(); 276 view->Destroy();
273 } 277 }
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
318 source_view_id, 322 source_view_id,
319 target)); 323 target));
320 } 324 }
321 325
322 private: 326 private:
323 // Overridden from ApplicationDelegate: 327 // Overridden from ApplicationDelegate:
324 virtual void Initialize(ApplicationImpl* app) MOJO_OVERRIDE { 328 virtual void Initialize(ApplicationImpl* app) MOJO_OVERRIDE {
325 app_ = app; 329 app_ = app;
326 app->ConnectToService("mojo:mojo_launcher", &launcher_); 330 app->ConnectToService("mojo:mojo_launcher", &launcher_);
327 views_init_.reset(new ViewsInit); 331 views_init_.reset(new ViewsInit);
332 window_manager_app_->Initialize(app);
328 } 333 }
329 334
330 virtual bool ConfigureIncomingConnection(ApplicationConnection* connection) 335 virtual bool ConfigureIncomingConnection(ApplicationConnection* connection)
331 MOJO_OVERRIDE { 336 MOJO_OVERRIDE {
332 connection->AddService(&window_manager_factory_); 337 connection->AddService(&window_manager_factory_);
333 connection->AddService(&navigator_host_factory_); 338 connection->AddService(&navigator_host_factory_);
334 connection->AddService(&view_manager_client_factory_); 339 window_manager_app_->ConfigureIncomingConnection(connection);
335 return true; 340 return true;
336 } 341 }
337 342
338 // Overridden from ViewManagerDelegate: 343 // Overridden from ViewManagerDelegate:
339 virtual void OnEmbed(ViewManager* view_manager, 344 virtual void OnEmbed(ViewManager* view_manager,
340 View* root, 345 View* root,
341 ServiceProviderImpl* exported_services, 346 ServiceProviderImpl* exported_services,
342 scoped_ptr<ServiceProvider> imported_services) OVERRIDE { 347 scoped_ptr<ServiceProvider> imported_services) OVERRIDE {
343 DCHECK(!view_manager_); 348 DCHECK(!view_manager_);
344 view_manager_ = view_manager; 349 view_manager_ = view_manager;
345 view_manager_->SetWindowManagerDelegate(this);
346 350
347 View* view = View::Create(view_manager_); 351 View* view = View::Create(view_manager_);
348 root->AddChild(view); 352 root->AddChild(view);
349 view->SetBounds(gfx::Rect(root->bounds().size())); 353 view->SetBounds(gfx::Rect(root->bounds().size()));
350 content_view_id_ = view->id(); 354 content_view_id_ = view->id();
351 355
352 root->SetColor(SK_ColorBLUE); 356 root->SetColor(SK_ColorBLUE);
353 357
354 Id launcher_ui_id = CreateLauncherUI(); 358 Id launcher_ui_id = CreateLauncherUI();
355 Id control_panel_id = CreateControlPanel(view); 359 Id control_panel_id = CreateControlPanel(view);
356 360
357 root_layout_manager_.reset( 361 root_layout_manager_.reset(
358 new RootLayoutManager(view_manager, root, 362 new RootLayoutManager(view_manager, root,
359 content_view_id_, 363 content_view_id_,
360 launcher_ui_id, 364 launcher_ui_id,
361 control_panel_id)); 365 control_panel_id));
362 root->AddObserver(root_layout_manager_.get()); 366 root->AddObserver(root_layout_manager_.get());
367
368 window_manager_app_->host()->window()->AddPreTargetHandler(this);
363 } 369 }
364 virtual void OnViewManagerDisconnected(ViewManager* view_manager) OVERRIDE { 370 virtual void OnViewManagerDisconnected(ViewManager* view_manager) OVERRIDE {
365 DCHECK_EQ(view_manager_, view_manager); 371 DCHECK_EQ(view_manager_, view_manager);
366 view_manager_ = NULL; 372 view_manager_ = NULL;
367 base::MessageLoop::current()->Quit(); 373 base::MessageLoop::current()->Quit();
368 } 374 }
369 375
370 // Overridden from WindowManagerDelegate: 376 // Overridden from WindowManagerDelegate:
371 virtual void Embed( 377 virtual void Embed(
372 const String& url, 378 const String& url,
373 InterfaceRequest<ServiceProvider> service_provider) OVERRIDE { 379 InterfaceRequest<ServiceProvider> service_provider) OVERRIDE {
374 CreateWindow(url, 380 CreateWindow(url,
375 NavigationDetailsPtr().Pass(), 381 NavigationDetailsPtr().Pass(),
376 ResponseDetailsPtr().Pass()); 382 ResponseDetailsPtr().Pass());
377 } 383 }
378 virtual void DispatchEvent(View* target, EventPtr event) OVERRIDE { 384 virtual void DispatchEvent(EventPtr event) MOJO_OVERRIDE {}
379 // TODO(beng): More sophisticated focus handling than this is required! 385
380 if (event->action == EVENT_TYPE_MOUSE_PRESSED && 386 // Overridden from ui::EventHandler:
381 !IsDescendantOfKeyboard(target)) { 387 virtual void OnEvent(ui::Event* event) OVERRIDE {
382 target->SetFocus(); 388 View* view = WindowManagerApp::GetViewForWindow(
389 static_cast<aura::Window*>(event->target()));
390 if (event->type() == ui::ET_MOUSE_PRESSED &&
391 !IsDescendantOfKeyboard(view)) {
392 view->SetFocus();
383 } 393 }
384 view_manager_->DispatchEvent(target, event.Pass());
385 } 394 }
386 395
387 void OnLaunch( 396 void OnLaunch(
388 uint32 source_view_id, 397 uint32 source_view_id,
389 Target requested_target, 398 Target requested_target,
390 const mojo::String& handler_url, 399 const mojo::String& handler_url,
391 const mojo::String& view_url, 400 const mojo::String& view_url,
392 ResponseDetailsPtr response) { 401 ResponseDetailsPtr response) {
393 // TODO(mpcomplete): This seems to be unused in favor of |response|. We 402 // TODO(mpcomplete): This seems to be unused in favor of |response|. We
394 // might need to use it (and fill it in properly, with method, etc) if we 403 // might need to use it (and fill it in properly, with method, etc) if we
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
506 window_manager_factory_; 515 window_manager_factory_;
507 InterfaceFactoryImplWithContext<NavigatorHostImpl, WindowManager> 516 InterfaceFactoryImplWithContext<NavigatorHostImpl, WindowManager>
508 navigator_host_factory_; 517 navigator_host_factory_;
509 518
510 scoped_ptr<ViewsInit> views_init_; 519 scoped_ptr<ViewsInit> views_init_;
511 DebugPanel* debug_panel_; 520 DebugPanel* debug_panel_;
512 LauncherPtr launcher_; 521 LauncherPtr launcher_;
513 View* launcher_ui_; 522 View* launcher_ui_;
514 std::vector<View*> windows_; 523 std::vector<View*> windows_;
515 ViewManager* view_manager_; 524 ViewManager* view_manager_;
516 ViewManagerClientFactory view_manager_client_factory_;
517 scoped_ptr<RootLayoutManager> root_layout_manager_; 525 scoped_ptr<RootLayoutManager> root_layout_manager_;
518 526
527 scoped_ptr<WindowManagerApp> window_manager_app_;
528
519 // Id of the view most content is added to. The keyboard is NOT added here. 529 // Id of the view most content is added to. The keyboard is NOT added here.
520 Id content_view_id_; 530 Id content_view_id_;
521 531
522 scoped_ptr<KeyboardManager> keyboard_manager_; 532 scoped_ptr<KeyboardManager> keyboard_manager_;
523 ApplicationImpl* app_; 533 ApplicationImpl* app_;
524 534
525 DISALLOW_COPY_AND_ASSIGN(WindowManager); 535 DISALLOW_COPY_AND_ASSIGN(WindowManager);
526 }; 536 };
527 537
528 void WindowManagerConnection::CloseWindow(Id view_id) { 538 void WindowManagerConnection::CloseWindow(Id view_id) {
(...skipping 21 matching lines...) Expand all
550 } 560 }
551 561
552 } // namespace examples 562 } // namespace examples
553 563
554 // static 564 // static
555 ApplicationDelegate* ApplicationDelegate::Create() { 565 ApplicationDelegate* ApplicationDelegate::Create() {
556 return new examples::WindowManager; 566 return new examples::WindowManager;
557 } 567 }
558 568
559 } // namespace mojo 569 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/examples/window_manager/DEPS ('k') | mojo/examples/wm_flow/wm/wm.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698