Index: mojo/services/view_manager/public/cpp/lib/view_manager_client_impl.cc |
diff --git a/mojo/services/view_manager/public/cpp/lib/view_manager_client_impl.cc b/mojo/services/view_manager/public/cpp/lib/view_manager_client_impl.cc |
index 3ebb4c7e7a2be6b8337ec5988370e087e62c9b73..a51e23475ce66b1ec1e0c336e9dc129979d898fc 100644 |
--- a/mojo/services/view_manager/public/cpp/lib/view_manager_client_impl.cc |
+++ b/mojo/services/view_manager/public/cpp/lib/view_manager_client_impl.cc |
@@ -100,6 +100,7 @@ ViewManagerClientImpl::ViewManagerClientImpl(ViewManagerDelegate* delegate, |
next_id_(1), |
delegate_(delegate), |
root_(nullptr), |
+ capture_view_(nullptr), |
focused_view_(nullptr), |
activated_view_(nullptr), |
binding_(this, handle.Pass()), |
@@ -381,7 +382,21 @@ void ViewManagerClientImpl::OnViewInputEvent( |
// ViewManagerClientImpl, WindowManagerClient implementation: |
void ViewManagerClientImpl::OnCaptureChanged(Id old_capture_view_id, |
- Id new_capture_view_id) {} |
+ Id new_capture_view_id) { |
+ View* gained_capture = GetViewById(new_capture_view_id); |
+ View* lost_capture = GetViewById(old_capture_view_id); |
+ if (lost_capture) { |
+ FOR_EACH_OBSERVER(ViewObserver, |
+ *ViewPrivate(lost_capture).observers(), |
+ OnViewFocusChanged(gained_capture, lost_capture)); |
+ } |
+ capture_view_ = gained_capture; |
+ if (gained_capture) { |
+ FOR_EACH_OBSERVER(ViewObserver, |
+ *ViewPrivate(gained_capture).observers(), |
+ OnViewFocusChanged(gained_capture, lost_capture)); |
+ } |
+} |
void ViewManagerClientImpl::OnFocusChanged(Id old_focused_view_id, |
Id new_focused_view_id) { |