| 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 "services/window_manager/window_manager_app.h" | 5 #include "services/window_manager/window_manager_app.h" |
| 6 | 6 |
| 7 #include "base/message_loop/message_loop.h" | 7 #include "base/message_loop/message_loop.h" |
| 8 #include "base/stl_util.h" | 8 #include "base/stl_util.h" |
| 9 #include "mojo/converters/geometry/geometry_type_converters.h" | 9 #include "mojo/converters/geometry/geometry_type_converters.h" |
| 10 #include "mojo/converters/input_events/input_events_type_converters.h" | 10 #include "mojo/converters/input_events/input_events_type_converters.h" |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 80 connections_.insert(connection); | 80 connections_.insert(connection); |
| 81 } | 81 } |
| 82 | 82 |
| 83 void WindowManagerApp::RemoveConnection(WindowManagerImpl* connection) { | 83 void WindowManagerApp::RemoveConnection(WindowManagerImpl* connection) { |
| 84 DCHECK(connections_.find(connection) != connections_.end()); | 84 DCHECK(connections_.find(connection) != connections_.end()); |
| 85 connections_.erase(connection); | 85 connections_.erase(connection); |
| 86 } | 86 } |
| 87 | 87 |
| 88 bool WindowManagerApp::SetCapture(Id view_id) { | 88 bool WindowManagerApp::SetCapture(Id view_id) { |
| 89 View* view = view_manager()->GetViewById(view_id); | 89 View* view = view_manager()->GetViewById(view_id); |
| 90 if (!view) | 90 return view && SetCaptureImpl(view); |
| 91 return false; | |
| 92 capture_controller_->SetCapture(view); | |
| 93 return capture_controller_->GetCapture() == view; | |
| 94 } | 91 } |
| 95 | 92 |
| 96 bool WindowManagerApp::FocusWindow(Id view_id) { | 93 bool WindowManagerApp::FocusWindow(Id view_id) { |
| 97 View* view = view_manager()->GetViewById(view_id); | 94 View* view = view_manager()->GetViewById(view_id); |
| 98 if (!view) | 95 return view && FocusWindowImpl(view); |
| 99 return false; | |
| 100 focus_controller_->FocusView(view); | |
| 101 return focus_controller_->GetFocusedView() == view; | |
| 102 } | 96 } |
| 103 | 97 |
| 104 bool WindowManagerApp::ActivateWindow(Id view_id) { | 98 bool WindowManagerApp::ActivateWindow(Id view_id) { |
| 105 View* view = view_manager()->GetViewById(view_id); | 99 View* view = view_manager()->GetViewById(view_id); |
| 106 if (!view) | 100 return view && ActivateWindowImpl(view); |
| 107 return false; | |
| 108 focus_controller_->ActivateView(view); | |
| 109 return focus_controller_->GetActiveView() == view; | |
| 110 } | 101 } |
| 111 | 102 |
| 112 bool WindowManagerApp::IsReady() const { | 103 bool WindowManagerApp::IsReady() const { |
| 113 return root_; | 104 return root_; |
| 114 } | 105 } |
| 115 | 106 |
| 116 void WindowManagerApp::InitFocus(scoped_ptr<FocusRules> rules) { | 107 void WindowManagerApp::InitFocus(scoped_ptr<FocusRules> rules) { |
| 117 DCHECK(root_); | 108 DCHECK(root_); |
| 118 | 109 |
| 119 focus_controller_.reset(new FocusController(rules.Pass())); | 110 focus_controller_.reset(new FocusController(rules.Pass())); |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 184 void WindowManagerApp::OnViewManagerDisconnected( | 175 void WindowManagerApp::OnViewManagerDisconnected( |
| 185 mojo::ViewManager* view_manager) { | 176 mojo::ViewManager* view_manager) { |
| 186 if (wrapped_view_manager_delegate_) | 177 if (wrapped_view_manager_delegate_) |
| 187 wrapped_view_manager_delegate_->OnViewManagerDisconnected(view_manager); | 178 wrapped_view_manager_delegate_->OnViewManagerDisconnected(view_manager); |
| 188 | 179 |
| 189 base::MessageLoop* message_loop = base::MessageLoop::current(); | 180 base::MessageLoop* message_loop = base::MessageLoop::current(); |
| 190 if (message_loop && message_loop->is_running()) | 181 if (message_loop && message_loop->is_running()) |
| 191 message_loop->Quit(); | 182 message_loop->Quit(); |
| 192 } | 183 } |
| 193 | 184 |
| 185 bool WindowManagerApp::OnPerformAction(mojo::View* view, |
| 186 const std::string& action) { |
| 187 if (!view) |
| 188 return false; |
| 189 if (action == "capture") |
| 190 return SetCaptureImpl(view); |
| 191 if (action == "focus") |
| 192 return FocusWindowImpl(view); |
| 193 else if (action == "activate") |
| 194 return ActivateWindowImpl(view); |
| 195 return false; |
| 196 } |
| 197 |
| 194 //////////////////////////////////////////////////////////////////////////////// | 198 //////////////////////////////////////////////////////////////////////////////// |
| 195 // WindowManagerApp, ViewObserver implementation: | 199 // WindowManagerApp, ViewObserver implementation: |
| 196 | 200 |
| 197 void WindowManagerApp::OnTreeChanged( | 201 void WindowManagerApp::OnTreeChanged( |
| 198 const ViewObserver::TreeChangeParams& params) { | 202 const ViewObserver::TreeChangeParams& params) { |
| 199 if (params.receiver != root_) | 203 if (params.receiver != root_) |
| 200 return; | 204 return; |
| 201 DCHECK(params.old_parent || params.new_parent); | 205 DCHECK(params.old_parent || params.new_parent); |
| 202 if (!params.target) | 206 if (!params.target) |
| 203 return; | 207 return; |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 271 it != connections_.end(); ++it) { | 275 it != connections_.end(); ++it) { |
| 272 (*it)->NotifyCaptureChanged(GetIdForView(gained_capture)); | 276 (*it)->NotifyCaptureChanged(GetIdForView(gained_capture)); |
| 273 } | 277 } |
| 274 if (gained_capture) | 278 if (gained_capture) |
| 275 gained_capture->MoveToFront(); | 279 gained_capture->MoveToFront(); |
| 276 } | 280 } |
| 277 | 281 |
| 278 //////////////////////////////////////////////////////////////////////////////// | 282 //////////////////////////////////////////////////////////////////////////////// |
| 279 // WindowManagerApp, private: | 283 // WindowManagerApp, private: |
| 280 | 284 |
| 285 bool WindowManagerApp::SetCaptureImpl(View* view) { |
| 286 CHECK(view); |
| 287 capture_controller_->SetCapture(view); |
| 288 return capture_controller_->GetCapture() == view; |
| 289 } |
| 290 |
| 291 bool WindowManagerApp::FocusWindowImpl(View* view) { |
| 292 CHECK(view); |
| 293 focus_controller_->FocusView(view); |
| 294 return focus_controller_->GetFocusedView() == view; |
| 295 } |
| 296 |
| 297 bool WindowManagerApp::ActivateWindowImpl(View* view) { |
| 298 CHECK(view); |
| 299 focus_controller_->ActivateView(view); |
| 300 return focus_controller_->GetActiveView() == view; |
| 301 } |
| 302 |
| 281 void WindowManagerApp::RegisterSubtree(View* view) { | 303 void WindowManagerApp::RegisterSubtree(View* view) { |
| 282 view->AddObserver(this); | 304 view->AddObserver(this); |
| 283 DCHECK(registered_view_id_set_.find(view->id()) == | 305 DCHECK(registered_view_id_set_.find(view->id()) == |
| 284 registered_view_id_set_.end()); | 306 registered_view_id_set_.end()); |
| 285 // All events pass through the root during dispatch, so we only need a handler | 307 // All events pass through the root during dispatch, so we only need a handler |
| 286 // installed there. | 308 // installed there. |
| 287 if (view == root_) { | 309 if (view == root_) { |
| 288 ViewTarget* target = ViewTarget::TargetFromView(view); | 310 ViewTarget* target = ViewTarget::TargetFromView(view); |
| 289 target->SetEventTargeter(scoped_ptr<ViewTargeter>(new ViewTargeter())); | 311 target->SetEventTargeter(scoped_ptr<ViewTargeter>(new ViewTargeter())); |
| 290 target->AddPreTargetHandler(this); | 312 target->AddPreTargetHandler(this); |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 377 void WindowManagerApp::SetViewManagerClient( | 399 void WindowManagerApp::SetViewManagerClient( |
| 378 mojo::ScopedMessagePipeHandle view_manager_client_request) { | 400 mojo::ScopedMessagePipeHandle view_manager_client_request) { |
| 379 view_manager_client_.reset( | 401 view_manager_client_.reset( |
| 380 mojo::ViewManagerClientFactory::WeakBindViewManagerToPipe( | 402 mojo::ViewManagerClientFactory::WeakBindViewManagerToPipe( |
| 381 mojo::MakeRequest<mojo::ViewManagerClient>( | 403 mojo::MakeRequest<mojo::ViewManagerClient>( |
| 382 view_manager_client_request.Pass()), | 404 view_manager_client_request.Pass()), |
| 383 view_manager_service_.Pass(), shell_, this)); | 405 view_manager_service_.Pass(), shell_, this)); |
| 384 } | 406 } |
| 385 | 407 |
| 386 } // namespace window_manager | 408 } // namespace window_manager |
| OLD | NEW |