| Index: mojo/services/window_manager/window_manager_app.cc
|
| diff --git a/mojo/services/window_manager/window_manager_app.cc b/mojo/services/window_manager/window_manager_app.cc
|
| deleted file mode 100644
|
| index ec9e94d23adf031bdcbbcb63a4c61ab458795495..0000000000000000000000000000000000000000
|
| --- a/mojo/services/window_manager/window_manager_app.cc
|
| +++ /dev/null
|
| @@ -1,340 +0,0 @@
|
| -// Copyright 2014 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "mojo/services/window_manager/window_manager_app.h"
|
| -
|
| -#include "base/message_loop/message_loop.h"
|
| -#include "base/stl_util.h"
|
| -#include "mojo/converters/geometry/geometry_type_converters.h"
|
| -#include "mojo/converters/input_events/input_events_type_converters.h"
|
| -#include "mojo/public/cpp/application/application_connection.h"
|
| -#include "mojo/public/cpp/application/application_impl.h"
|
| -#include "mojo/public/interfaces/application/shell.mojom.h"
|
| -#include "mojo/services/public/cpp/view_manager/view.h"
|
| -#include "mojo/services/public/cpp/view_manager/view_manager.h"
|
| -#include "mojo/services/window_manager/focus_controller.h"
|
| -#include "mojo/services/window_manager/focus_rules.h"
|
| -#include "mojo/services/window_manager/view_event_dispatcher.h"
|
| -#include "mojo/services/window_manager/view_target.h"
|
| -#include "mojo/services/window_manager/view_targeter.h"
|
| -#include "mojo/services/window_manager/window_manager_delegate.h"
|
| -#include "ui/base/hit_test.h"
|
| -
|
| -namespace mojo {
|
| -
|
| -namespace {
|
| -
|
| -Id GetIdForView(View* view) {
|
| - return view ? view->id() : 0;
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -// Used for calls to Embed() that occur before we've connected to the
|
| -// ViewManager.
|
| -struct WindowManagerApp::PendingEmbed {
|
| - String url;
|
| - InterfaceRequest<mojo::ServiceProvider> service_provider;
|
| -};
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -// WindowManagerApp, public:
|
| -
|
| -WindowManagerApp::WindowManagerApp(
|
| - ViewManagerDelegate* view_manager_delegate,
|
| - WindowManagerDelegate* window_manager_delegate)
|
| - : shell_(nullptr),
|
| - native_viewport_event_dispatcher_factory_(this),
|
| - wrapped_view_manager_delegate_(view_manager_delegate),
|
| - window_manager_delegate_(window_manager_delegate),
|
| - view_manager_(nullptr),
|
| - root_(nullptr) {
|
| -}
|
| -
|
| -WindowManagerApp::~WindowManagerApp() {
|
| - STLDeleteElements(&connections_);
|
| -}
|
| -
|
| -void WindowManagerApp::AddConnection(WindowManagerImpl* connection) {
|
| - DCHECK(connections_.find(connection) == connections_.end());
|
| - connections_.insert(connection);
|
| -}
|
| -
|
| -void WindowManagerApp::RemoveConnection(WindowManagerImpl* connection) {
|
| - DCHECK(connections_.find(connection) != connections_.end());
|
| - connections_.erase(connection);
|
| -}
|
| -
|
| -void WindowManagerApp::SetCapture(Id view) {
|
| - // TODO(erg): Capture. Another pile of worms that is mixed in here.
|
| -
|
| - // capture_client_->capture_client()->SetCapture(GetWindowForViewId(view));
|
| -
|
| - // TODO(beng): notify connected clients that capture has changed, probably
|
| - // by implementing some capture-client observer.
|
| -}
|
| -
|
| -void WindowManagerApp::FocusWindow(Id view_id) {
|
| - View* view = view_manager_->GetViewById(view_id);
|
| - DCHECK(view);
|
| - focus_controller_->FocusView(view);
|
| -}
|
| -
|
| -void WindowManagerApp::ActivateWindow(Id view_id) {
|
| - View* view = view_manager_->GetViewById(view_id);
|
| - DCHECK(view);
|
| - focus_controller_->ActivateView(view);
|
| -}
|
| -
|
| -bool WindowManagerApp::IsReady() const {
|
| - return view_manager_ && root_;
|
| -}
|
| -
|
| -void WindowManagerApp::InitFocus(scoped_ptr<mojo::FocusRules> rules) {
|
| - focus_controller_.reset(new mojo::FocusController(rules.Pass()));
|
| - focus_controller_->AddObserver(this);
|
| -
|
| - DCHECK(root_);
|
| - SetFocusController(root_, focus_controller_.get());
|
| -}
|
| -
|
| -void WindowManagerApp::Embed(
|
| - const String& url,
|
| - InterfaceRequest<ServiceProvider> service_provider) {
|
| - if (view_manager_) {
|
| - window_manager_delegate_->Embed(url, service_provider.Pass());
|
| - return;
|
| - }
|
| - scoped_ptr<PendingEmbed> pending_embed(new PendingEmbed);
|
| - pending_embed->url = url;
|
| - pending_embed->service_provider = service_provider.Pass();
|
| - pending_embeds_.push_back(pending_embed.release());
|
| -}
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -// WindowManagerApp, ApplicationDelegate implementation:
|
| -
|
| -void WindowManagerApp::Initialize(ApplicationImpl* impl) {
|
| - shell_ = impl->shell();
|
| - LaunchViewManager(impl);
|
| -}
|
| -
|
| -bool WindowManagerApp::ConfigureIncomingConnection(
|
| - ApplicationConnection* connection) {
|
| - connection->AddService(static_cast<InterfaceFactory<WindowManager>*>(this));
|
| - return true;
|
| -}
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -// WindowManagerApp, ViewManagerDelegate implementation:
|
| -
|
| -void WindowManagerApp::OnEmbed(ViewManager* view_manager,
|
| - View* root,
|
| - ServiceProviderImpl* exported_services,
|
| - scoped_ptr<ServiceProvider> imported_services) {
|
| - DCHECK(!view_manager_ && !root_);
|
| - view_manager_ = view_manager;
|
| - root_ = root;
|
| -
|
| - view_event_dispatcher_.reset(new ViewEventDispatcher());
|
| -
|
| - RegisterSubtree(root_);
|
| -
|
| - // TODO(erg): Also move the capture client over.
|
| - //
|
| - // capture_client_.reset(
|
| - // new wm::ScopedCaptureClient(window_tree_host_->window()));
|
| -
|
| - if (wrapped_view_manager_delegate_) {
|
| - wrapped_view_manager_delegate_->OnEmbed(
|
| - view_manager, root, exported_services, imported_services.Pass());
|
| - }
|
| -
|
| - for (PendingEmbed* pending_embed : pending_embeds_)
|
| - Embed(pending_embed->url, pending_embed->service_provider.Pass());
|
| - pending_embeds_.clear();
|
| -}
|
| -
|
| -void WindowManagerApp::OnViewManagerDisconnected(
|
| - ViewManager* view_manager) {
|
| - DCHECK_EQ(view_manager_, view_manager);
|
| - if (wrapped_view_manager_delegate_)
|
| - wrapped_view_manager_delegate_->OnViewManagerDisconnected(view_manager);
|
| - view_manager_ = nullptr;
|
| - base::MessageLoop::current()->Quit();
|
| -}
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -// WindowManagerApp, ViewObserver implementation:
|
| -
|
| -void WindowManagerApp::OnTreeChanged(
|
| - const ViewObserver::TreeChangeParams& params) {
|
| - if (params.receiver != root_)
|
| - return;
|
| - DCHECK(params.old_parent || params.new_parent);
|
| - if (!params.target)
|
| - return;
|
| -
|
| - if (params.new_parent) {
|
| - if (registered_view_id_set_.find(params.target->id()) ==
|
| - registered_view_id_set_.end()) {
|
| - RegisteredViewIdSet::const_iterator it =
|
| - registered_view_id_set_.find(params.new_parent->id());
|
| - DCHECK(it != registered_view_id_set_.end());
|
| - RegisterSubtree(params.target);
|
| - }
|
| - } else if (params.old_parent) {
|
| - UnregisterSubtree(params.target);
|
| - }
|
| -}
|
| -
|
| -void WindowManagerApp::OnViewDestroying(View* view) {
|
| - if (view != root_) {
|
| - Unregister(view);
|
| - return;
|
| - }
|
| - root_ = nullptr;
|
| - if (focus_controller_)
|
| - focus_controller_->RemoveObserver(this);
|
| -}
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -// WindowManagerApp, ui::EventHandler implementation:
|
| -
|
| -void WindowManagerApp::OnEvent(ui::Event* event) {
|
| - if (!window_manager_client_)
|
| - return;
|
| -
|
| - View* view = static_cast<ViewTarget*>(event->target())->view();
|
| - if (!view)
|
| - return;
|
| -
|
| - if (focus_controller_)
|
| - focus_controller_->OnEvent(event);
|
| -
|
| - window_manager_client_->DispatchInputEventToView(view->id(),
|
| - Event::From(*event));
|
| -}
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -// WindowManagerApp, mojo::FocusControllerObserver implementation:
|
| -
|
| -void WindowManagerApp::OnViewFocused(View* gained_focus,
|
| - View* lost_focus) {
|
| - for (Connections::const_iterator it = connections_.begin();
|
| - it != connections_.end(); ++it) {
|
| - (*it)->NotifyViewFocused(GetIdForView(gained_focus),
|
| - GetIdForView(lost_focus));
|
| - }
|
| -}
|
| -
|
| -void WindowManagerApp::OnViewActivated(View* gained_active,
|
| - View* lost_active) {
|
| - for (Connections::const_iterator it = connections_.begin();
|
| - it != connections_.end(); ++it) {
|
| - (*it)->NotifyWindowActivated(GetIdForView(gained_active),
|
| - GetIdForView(lost_active));
|
| - }
|
| - if (gained_active)
|
| - gained_active->MoveToFront();
|
| -}
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -// WindowManagerApp, private:
|
| -
|
| -void WindowManagerApp::RegisterSubtree(View* view) {
|
| - view->AddObserver(this);
|
| - DCHECK(registered_view_id_set_.find(view->id()) ==
|
| - registered_view_id_set_.end());
|
| - // All events pass through the root during dispatch, so we only need a handler
|
| - // installed there.
|
| - if (view == root_) {
|
| - ViewTarget* target = ViewTarget::TargetFromView(view);
|
| - target->SetEventTargeter(scoped_ptr<ViewTargeter>(new ViewTargeter()));
|
| - target->AddPreTargetHandler(this);
|
| - view_event_dispatcher_->SetRootViewTarget(target);
|
| - }
|
| - registered_view_id_set_.insert(view->id());
|
| - View::Children::const_iterator it = view->children().begin();
|
| - for (; it != view->children().end(); ++it)
|
| - RegisterSubtree(*it);
|
| -}
|
| -
|
| -void WindowManagerApp::UnregisterSubtree(View* view) {
|
| - for (View* child : view->children())
|
| - UnregisterSubtree(child);
|
| - Unregister(view);
|
| -}
|
| -
|
| -void WindowManagerApp::Unregister(View* view) {
|
| - RegisteredViewIdSet::iterator it = registered_view_id_set_.find(view->id());
|
| - if (it == registered_view_id_set_.end()) {
|
| - // Because we unregister in OnViewDestroying() we can still get a subsequent
|
| - // OnTreeChanged for the same view. Ignore this one.
|
| - return;
|
| - }
|
| - view->RemoveObserver(this);
|
| - DCHECK(it != registered_view_id_set_.end());
|
| - registered_view_id_set_.erase(it);
|
| -}
|
| -
|
| -void WindowManagerApp::DispatchInputEventToView(View* view, EventPtr event) {
|
| - window_manager_client_->DispatchInputEventToView(view->id(), event.Pass());
|
| -}
|
| -
|
| -void WindowManagerApp::SetViewportSize(const gfx::Size& size) {
|
| - window_manager_client_->SetViewportSize(Size::From(size));
|
| -}
|
| -
|
| -void WindowManagerApp::LaunchViewManager(ApplicationImpl* app) {
|
| - // TODO(sky): figure out logic if this connection goes away.
|
| - view_manager_client_factory_.reset(
|
| - new ViewManagerClientFactory(shell_, this));
|
| -
|
| - MessagePipe pipe;
|
| - ApplicationConnection* view_manager_app =
|
| - app->ConnectToApplication("mojo:view_manager");
|
| - ServiceProvider* view_manager_service_provider =
|
| - view_manager_app->GetServiceProvider();
|
| - view_manager_service_provider->ConnectToService(ViewManagerService::Name_,
|
| - pipe.handle1.Pass());
|
| - view_manager_client_ = ViewManagerClientFactory::WeakBindViewManagerToPipe(
|
| - pipe.handle0.Pass(), shell_, this).Pass();
|
| -
|
| - view_manager_app->AddService(&native_viewport_event_dispatcher_factory_);
|
| - view_manager_app->AddService(
|
| - static_cast<InterfaceFactory<WindowManagerInternal>*>(this));
|
| -
|
| - view_manager_app->ConnectToService(&window_manager_client_);
|
| -}
|
| -
|
| -void WindowManagerApp::Create(ApplicationConnection* connection,
|
| - InterfaceRequest<WindowManagerInternal> request) {
|
| - if (wm_internal_binding_.get()) {
|
| - VLOG(1) <<
|
| - "WindowManager allows only one WindowManagerInternal connection.";
|
| - return;
|
| - }
|
| - wm_internal_binding_.reset(
|
| - new Binding<WindowManagerInternal>(this, request.Pass()));
|
| -}
|
| -
|
| -void WindowManagerApp::Create(ApplicationConnection* connection,
|
| - InterfaceRequest<WindowManager> request) {
|
| - WindowManagerImpl* wm = new WindowManagerImpl(this, false);
|
| - wm->Bind(request.PassMessagePipe());
|
| - // WindowManagerImpl is deleted when the connection has an error, or from our
|
| - // destructor.
|
| -}
|
| -
|
| -void WindowManagerApp::CreateWindowManagerForViewManagerClient(
|
| - uint16_t connection_id,
|
| - ScopedMessagePipeHandle window_manager_pipe) {
|
| - WindowManagerImpl* wm = new WindowManagerImpl(this, true);
|
| - wm->Bind(window_manager_pipe.Pass());
|
| - // WindowManagerImpl is deleted when the connection has an error, or from our
|
| - // destructor.
|
| -}
|
| -
|
| -} // namespace mojo
|
|
|