Index: mojo/services/public/cpp/view_manager/lib/view_manager_synchronizer.cc |
diff --git a/mojo/services/public/cpp/view_manager/lib/view_manager_synchronizer.cc b/mojo/services/public/cpp/view_manager/lib/view_manager_synchronizer.cc |
index 16e232150324f70d0af6387a60ced967d552ad38..3568ae5e80fe44420632efd3499f0ac30c9eaeeb 100644 |
--- a/mojo/services/public/cpp/view_manager/lib/view_manager_synchronizer.cc |
+++ b/mojo/services/public/cpp/view_manager/lib/view_manager_synchronizer.cc |
@@ -477,6 +477,27 @@ class EmbedTransaction : public ViewManagerTransaction { |
DISALLOW_COPY_AND_ASSIGN(EmbedTransaction); |
}; |
+class SetFocusTransaction : public ViewManagerTransaction { |
+ public: |
+ SetFocusTransaction(Id node_id, ViewManagerSynchronizer* synchronizer) |
+ : ViewManagerTransaction(synchronizer), |
+ node_id_(node_id) {} |
+ virtual ~SetFocusTransaction() {} |
+ |
+ private: |
+ // Overridden from ViewManagerTransaction: |
+ virtual void DoCommit() OVERRIDE { |
+ service()->SetFocus(node_id_, ActionCompletedCallback()); |
+ } |
+ virtual void DoActionCompleted(bool success) OVERRIDE { |
+ // TODO(beng): recovery? |
+ } |
+ |
+ const Id node_id_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(SetFocusTransaction); |
+}; |
+ |
ViewManagerSynchronizer::ViewManagerSynchronizer(ViewManagerDelegate* delegate) |
: connected_(false), |
connection_id_(0), |
@@ -585,6 +606,12 @@ void ViewManagerSynchronizer::SetViewContents(Id view_id, |
Sync(); |
} |
+void ViewManagerSynchronizer::SetFocus(Id node_id) { |
+ DCHECK(connected_); |
+ pending_transactions_.push_back(new SetFocusTransaction(node_id, this)); |
+ Sync(); |
+} |
+ |
void ViewManagerSynchronizer::Embed(const String& url, Id node_id) { |
DCHECK(connected_); |
pending_transactions_.push_back(new EmbedTransaction(url, node_id, this)); |