| OLD | NEW |
| 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/bind.h" | 5 #include "base/bind.h" |
| 6 #include "base/macros.h" | 6 #include "base/macros.h" |
| 7 #include "examples/keyboard/keyboard.mojom.h" | 7 #include "examples/keyboard/keyboard.mojom.h" |
| 8 #include "examples/window_manager/debug_panel.h" | 8 #include "examples/window_manager/debug_panel.h" |
| 9 #include "examples/window_manager/window_manager.mojom.h" | 9 #include "examples/window_manager/window_manager.mojom.h" |
| 10 #include "mojo/application/application_runner_chromium.h" | 10 #include "mojo/application/application_runner_chromium.h" |
| 11 #include "mojo/converters/geometry/geometry_type_converters.h" | 11 #include "mojo/converters/geometry/geometry_type_converters.h" |
| 12 #include "mojo/converters/input_events/input_events_type_converters.h" | 12 #include "mojo/converters/input_events/input_events_type_converters.h" |
| 13 #include "mojo/public/c/system/main.h" | 13 #include "mojo/public/c/system/main.h" |
| 14 #include "mojo/public/cpp/application/application_connection.h" | 14 #include "mojo/public/cpp/application/application_connection.h" |
| 15 #include "mojo/public/cpp/application/application_delegate.h" | 15 #include "mojo/public/cpp/application/application_delegate.h" |
| 16 #include "mojo/public/cpp/application/application_impl.h" | 16 #include "mojo/public/cpp/application/application_impl.h" |
| 17 #include "mojo/public/cpp/application/interface_factory_impl.h" | 17 #include "mojo/public/cpp/application/interface_factory_impl.h" |
| 18 #include "mojo/public/cpp/application/service_provider_impl.h" | 18 #include "mojo/public/cpp/application/service_provider_impl.h" |
| 19 #include "mojo/services/public/cpp/view_manager/view.h" | 19 #include "mojo/services/public/cpp/view_manager/view.h" |
| 20 #include "mojo/services/public/cpp/view_manager/view_manager.h" | 20 #include "mojo/services/public/cpp/view_manager/view_manager.h" |
| 21 #include "mojo/services/public/cpp/view_manager/view_manager_delegate.h" | 21 #include "mojo/services/public/cpp/view_manager/view_manager_delegate.h" |
| 22 #include "mojo/services/public/cpp/view_manager/view_observer.h" | 22 #include "mojo/services/public/cpp/view_manager/view_observer.h" |
| 23 #include "mojo/services/public/interfaces/input_events/input_events.mojom.h" | 23 #include "mojo/services/public/interfaces/input_events/input_events.mojom.h" |
| 24 #include "mojo/services/public/interfaces/navigation/navigation.mojom.h" | 24 #include "mojo/services/public/interfaces/navigation/navigation.mojom.h" |
| 25 #include "mojo/services/window_manager/basic_focus_rules.h" | |
| 26 #include "mojo/services/window_manager/view_target.h" | |
| 27 #include "mojo/services/window_manager/window_manager_app.h" | 25 #include "mojo/services/window_manager/window_manager_app.h" |
| 28 #include "mojo/services/window_manager/window_manager_delegate.h" | 26 #include "mojo/services/window_manager/window_manager_delegate.h" |
| 29 #include "mojo/views/views_init.h" | 27 #include "mojo/views/views_init.h" |
| 28 #include "ui/aura/window.h" |
| 30 #include "ui/events/event.h" | 29 #include "ui/events/event.h" |
| 31 #include "ui/events/event_constants.h" | 30 #include "ui/events/event_constants.h" |
| 32 #include "ui/gfx/geometry/size_conversions.h" | 31 #include "ui/gfx/geometry/size_conversions.h" |
| 32 #include "ui/wm/core/focus_rules.h" |
| 33 | 33 |
| 34 #if defined CreateWindow | 34 #if defined CreateWindow |
| 35 #undef CreateWindow | 35 #undef CreateWindow |
| 36 #endif | 36 #endif |
| 37 | 37 |
| 38 namespace mojo { | 38 namespace mojo { |
| 39 namespace examples { | 39 namespace examples { |
| 40 | 40 |
| 41 class WindowManager; | 41 class WindowManager; |
| 42 | 42 |
| 43 namespace { | 43 namespace { |
| 44 | 44 |
| 45 const int kBorderInset = 25; | 45 const int kBorderInset = 25; |
| 46 const int kControlPanelWidth = 200; | 46 const int kControlPanelWidth = 200; |
| 47 const int kTextfieldHeight = 25; | 47 const int kTextfieldHeight = 25; |
| 48 | 48 |
| 49 class WMFocusRules : public wm::FocusRules { |
| 50 public: |
| 51 WMFocusRules(mojo::WindowManagerApp* window_manager_app, |
| 52 mojo::View* window_container) |
| 53 : window_container_(window_container), |
| 54 window_manager_app_(window_manager_app) {} |
| 55 virtual ~WMFocusRules() {} |
| 56 |
| 57 private: |
| 58 // Overridden from wm::FocusRules: |
| 59 virtual bool IsToplevelWindow(aura::Window* window) const override { |
| 60 return mojo::WindowManagerApp::GetViewForWindow(window)->parent() == |
| 61 window_container_; |
| 62 } |
| 63 virtual bool CanActivateWindow(aura::Window* window) const override { |
| 64 return mojo::WindowManagerApp::GetViewForWindow(window)->parent() == |
| 65 window_container_; |
| 66 } |
| 67 virtual bool CanFocusWindow(aura::Window* window) const override { |
| 68 return true; |
| 69 } |
| 70 virtual aura::Window* GetToplevelWindow(aura::Window* window) const override { |
| 71 mojo::View* view = mojo::WindowManagerApp::GetViewForWindow(window); |
| 72 while (view->parent() != window_container_) { |
| 73 view = view->parent(); |
| 74 // Unparented hierarchy, there is no "top level" window. |
| 75 if (!view) |
| 76 return NULL; |
| 77 } |
| 78 |
| 79 return window_manager_app_->GetWindowForViewId(view->id()); |
| 80 } |
| 81 virtual aura::Window* GetActivatableWindow( |
| 82 aura::Window* window) const override { |
| 83 return GetToplevelWindow(window); |
| 84 } |
| 85 virtual aura::Window* GetFocusableWindow( |
| 86 aura::Window* window) const override { |
| 87 return window; |
| 88 } |
| 89 virtual aura::Window* GetNextActivatableWindow( |
| 90 aura::Window* ignore) const override { |
| 91 aura::Window* activatable = GetActivatableWindow(ignore); |
| 92 const aura::Window::Windows& children = activatable->parent()->children(); |
| 93 for (aura::Window::Windows::const_reverse_iterator it = children.rbegin(); |
| 94 it != children.rend(); ++it) { |
| 95 if (*it != ignore) |
| 96 return *it; |
| 97 } |
| 98 return NULL; |
| 99 } |
| 100 |
| 101 mojo::View* window_container_; |
| 102 mojo::WindowManagerApp* window_manager_app_; |
| 103 |
| 104 DISALLOW_COPY_AND_ASSIGN(WMFocusRules); |
| 105 }; |
| 106 |
| 49 } // namespace | 107 } // namespace |
| 50 | 108 |
| 51 class WindowManagerConnection : public InterfaceImpl<IWindowManager> { | 109 class WindowManagerConnection : public InterfaceImpl<IWindowManager> { |
| 52 public: | 110 public: |
| 53 explicit WindowManagerConnection(WindowManager* window_manager) | 111 explicit WindowManagerConnection(WindowManager* window_manager) |
| 54 : window_manager_(window_manager) {} | 112 : window_manager_(window_manager) {} |
| 55 virtual ~WindowManagerConnection() {} | 113 virtual ~WindowManagerConnection() {} |
| 56 | 114 |
| 57 private: | 115 private: |
| 58 // Overridden from IWindowManager: | 116 // Overridden from IWindowManager: |
| (...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 263 : shell_(nullptr), | 321 : shell_(nullptr), |
| 264 window_manager_factory_(this), | 322 window_manager_factory_(this), |
| 265 launcher_ui_(NULL), | 323 launcher_ui_(NULL), |
| 266 view_manager_(NULL), | 324 view_manager_(NULL), |
| 267 window_manager_app_(new WindowManagerApp(this, this)), | 325 window_manager_app_(new WindowManagerApp(this, this)), |
| 268 app_(NULL) {} | 326 app_(NULL) {} |
| 269 | 327 |
| 270 virtual ~WindowManager() { | 328 virtual ~WindowManager() { |
| 271 // host() may be destroyed by the time we get here. | 329 // host() may be destroyed by the time we get here. |
| 272 // TODO: figure out a way to always cleanly remove handler. | 330 // TODO: figure out a way to always cleanly remove handler. |
| 273 | 331 if (window_manager_app_->host()) |
| 274 // TODO(erg): In the aura version, we removed ourselves from the | 332 window_manager_app_->host()->window()->RemovePreTargetHandler(this); |
| 275 // PreTargetHandler list here. We may need to do something analogous when | |
| 276 // we get event handling without aura working. | |
| 277 } | 333 } |
| 278 | 334 |
| 279 void CloseWindow(Id view_id) { | 335 void CloseWindow(Id view_id) { |
| 280 WindowVector::iterator iter = GetWindowByViewId(view_id); | 336 WindowVector::iterator iter = GetWindowByViewId(view_id); |
| 281 DCHECK(iter != windows_.end()); | 337 DCHECK(iter != windows_.end()); |
| 282 Window* window = *iter; | 338 Window* window = *iter; |
| 283 windows_.erase(iter); | 339 windows_.erase(iter); |
| 284 window->view()->Destroy(); | 340 window->view()->Destroy(); |
| 285 } | 341 } |
| 286 | 342 |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 365 Id launcher_ui_id = CreateLauncherUI(); | 421 Id launcher_ui_id = CreateLauncherUI(); |
| 366 Id control_panel_id = CreateControlPanel(view); | 422 Id control_panel_id = CreateControlPanel(view); |
| 367 | 423 |
| 368 root_layout_manager_.reset( | 424 root_layout_manager_.reset( |
| 369 new RootLayoutManager(view_manager, root, | 425 new RootLayoutManager(view_manager, root, |
| 370 content_view_id_, | 426 content_view_id_, |
| 371 launcher_ui_id, | 427 launcher_ui_id, |
| 372 control_panel_id)); | 428 control_panel_id)); |
| 373 root->AddObserver(root_layout_manager_.get()); | 429 root->AddObserver(root_layout_manager_.get()); |
| 374 | 430 |
| 375 // TODO(erg): In the aura version, we explicitly added ourselves as a | 431 window_manager_app_->host()->window()->AddPreTargetHandler(this); |
| 376 // PreTargetHandler to the window() here. We probably have to do something | |
| 377 // analogous here. | |
| 378 | 432 |
| 379 window_manager_app_->InitFocus(scoped_ptr<mojo::FocusRules>( | 433 window_manager_app_->InitFocus(new WMFocusRules(window_manager_app_.get(), |
| 380 new mojo::BasicFocusRules(window_manager_app_.get(), | 434 view)); |
| 381 view))); | |
| 382 } | 435 } |
| 383 virtual void OnViewManagerDisconnected(ViewManager* view_manager) override { | 436 virtual void OnViewManagerDisconnected(ViewManager* view_manager) override { |
| 384 DCHECK_EQ(view_manager_, view_manager); | 437 DCHECK_EQ(view_manager_, view_manager); |
| 385 view_manager_ = NULL; | 438 view_manager_ = NULL; |
| 386 base::MessageLoop::current()->Quit(); | 439 base::MessageLoop::current()->Quit(); |
| 387 } | 440 } |
| 388 | 441 |
| 389 // Overridden from WindowManagerDelegate: | 442 // Overridden from WindowManagerDelegate: |
| 390 virtual void Embed( | 443 virtual void Embed( |
| 391 const String& url, | 444 const String& url, |
| 392 InterfaceRequest<ServiceProvider> service_provider) override { | 445 InterfaceRequest<ServiceProvider> service_provider) override { |
| 393 const Id kInvalidSourceViewId = 0; | 446 const Id kInvalidSourceViewId = 0; |
| 394 OnLaunch(kInvalidSourceViewId, TARGET_DEFAULT, url); | 447 OnLaunch(kInvalidSourceViewId, TARGET_DEFAULT, url); |
| 395 } | 448 } |
| 396 | 449 |
| 397 // Overridden from ui::EventHandler: | 450 // Overridden from ui::EventHandler: |
| 398 virtual void OnEvent(ui::Event* event) override { | 451 virtual void OnEvent(ui::Event* event) override { |
| 399 View* view = WindowManagerApp::GetViewForViewTarget( | 452 View* view = WindowManagerApp::GetViewForWindow( |
| 400 static_cast<ViewTarget*>(event->target())); | 453 static_cast<aura::Window*>(event->target())); |
| 401 if (event->type() == ui::ET_MOUSE_PRESSED && | 454 if (event->type() == ui::ET_MOUSE_PRESSED && |
| 402 !IsDescendantOfKeyboard(view)) { | 455 !IsDescendantOfKeyboard(view)) { |
| 403 view->SetFocus(); | 456 view->SetFocus(); |
| 404 } | 457 } |
| 405 } | 458 } |
| 406 | 459 |
| 407 void OnLaunch(uint32 source_view_id, | 460 void OnLaunch(uint32 source_view_id, |
| 408 Target requested_target, | 461 Target requested_target, |
| 409 const mojo::String& url) { | 462 const mojo::String& url) { |
| 410 Target target = debug_panel_->navigation_target(); | 463 Target target = debug_panel_->navigation_target(); |
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 548 window_manager_->RequestNavigate(view_id_, target, request.Pass()); | 601 window_manager_->RequestNavigate(view_id_, target, request.Pass()); |
| 549 } | 602 } |
| 550 | 603 |
| 551 } // namespace examples | 604 } // namespace examples |
| 552 } // namespace mojo | 605 } // namespace mojo |
| 553 | 606 |
| 554 MojoResult MojoMain(MojoHandle shell_handle) { | 607 MojoResult MojoMain(MojoHandle shell_handle) { |
| 555 mojo::ApplicationRunnerChromium runner(new mojo::examples::WindowManager); | 608 mojo::ApplicationRunnerChromium runner(new mojo::examples::WindowManager); |
| 556 return runner.Run(shell_handle); | 609 return runner.Run(shell_handle); |
| 557 } | 610 } |
| OLD | NEW |