Chromium Code Reviews| Index: mojo/services/view_manager/view_manager_connection.cc |
| diff --git a/mojo/services/view_manager/view_manager_connection.cc b/mojo/services/view_manager/view_manager_connection.cc |
| index 8d4d0a6438ec31f1a7336fed2ddfdb1d7ab66464..ada5e84b17288773cb3029dde7fe70c3d2f71052 100644 |
| --- a/mojo/services/view_manager/view_manager_connection.cc |
| +++ b/mojo/services/view_manager/view_manager_connection.cc |
| @@ -170,6 +170,23 @@ void ViewManagerConnection::ProcessNodeHierarchyChanged( |
| NodesToINodes(to_send)); |
| } |
| +void ViewManagerConnection::ProcessNodeReorder(const Node* node, |
| + const Node* relative_node, |
| + OrderDirection direction, |
| + Id server_change_id, |
| + bool originated_change) { |
| + if (originated_change || |
| + !known_nodes_.count(NodeIdToTransportId(node->id())) || |
| + !known_nodes_.count(NodeIdToTransportId(relative_node->id()))) { |
| + return; |
| + } |
| + |
| + client()->OnNodeReordered(NodeIdToTransportId(node->id()), |
| + NodeIdToTransportId(relative_node->id()), |
| + direction, |
| + server_change_id); |
| +} |
| + |
| void ViewManagerConnection::ProcessNodeViewReplaced( |
| const Node* node, |
| const View* new_view, |
| @@ -267,6 +284,12 @@ bool ViewManagerConnection::CanAddNode(const Node* parent, |
| return (IsNodeDescendantOfRoots(child) || child->id().connection_id == id_); |
| } |
| +bool ViewManagerConnection::CanReorderNode(const Node* node, |
| + const Node* relatve_node) const { |
|
sky
2014/06/11 19:36:44
relative_node.
|
| + return node->id().connection_id == id_ && |
|
sky
2014/06/11 19:36:44
You should also check: both nodes are non-null, an
|
| + node->GetParent() == relatve_node->GetParent(); |
| +} |
| + |
| bool ViewManagerConnection::CanDeleteNode(const NodeId& node_id) const { |
| return node_id.connection_id == id_; |
| } |
| @@ -553,6 +576,27 @@ void ViewManagerConnection::RemoveNodeFromParent( |
| callback.Run(success); |
| } |
| +void ViewManagerConnection::ReorderNode(Id node_id, |
| + Id relative_node_id, |
| + OrderDirection direction, |
| + Id server_change_id, |
| + const Callback<void(bool)>& callback) { |
| + bool success = false; |
| + if (server_change_id == root_node_manager_->next_server_change_id()) { |
| + Node* node = GetNode(NodeIdFromTransportId(node_id)); |
| + Node* relative_node = GetNode(NodeIdFromTransportId(relative_node_id)); |
| + if (CanReorderNode(node, relative_node)) { |
| + success = true; |
| + RootNodeManager::ScopedChange change( |
| + this, root_node_manager_, |
| + RootNodeManager::CHANGE_TYPE_ADVANCE_SERVER_CHANGE_ID, false); |
| + node->GetParent()->Reorder(node, relative_node, direction); |
| + root_node_manager_->ProcessNodeReorder(node, relative_node, direction); |
| + } |
| + } |
| + callback.Run(success); |
| +} |
| + |
| void ViewManagerConnection::GetNodeTree( |
| Id node_id, |
| const Callback<void(Array<INodePtr>)>& callback) { |