Index: trunk/src/mojo/services/view_manager/root_node_manager.cc |
=================================================================== |
--- trunk/src/mojo/services/view_manager/root_node_manager.cc (revision 270932) |
+++ trunk/src/mojo/services/view_manager/root_node_manager.cc (working copy) |
@@ -24,11 +24,10 @@ |
RootNodeManager::ScopedChange::ScopedChange( |
ViewManagerConnection* connection, |
RootNodeManager* root, |
- RootNodeManager::ChangeType change_type, |
- bool is_delete_node) |
+ RootNodeManager::ChangeType change_type) |
: root_(root), |
change_type_(change_type) { |
- root_->PrepareForChange(connection, is_delete_node); |
+ root_->PrepareForChange(connection); |
} |
RootNodeManager::ScopedChange::~ScopedChange() { |
@@ -47,7 +46,6 @@ |
: next_connection_id_(1), |
next_server_change_id_(1), |
change_source_(kNoConnection), |
- is_processing_delete_node_(false), |
root_view_manager_(shell, this), |
root_(this, NodeId(0, kRootId)) { |
} |
@@ -90,74 +88,79 @@ |
return i == connection_map_.end() ? NULL : i->second->GetView(id); |
} |
-void RootNodeManager::ProcessNodeHierarchyChanged(const NodeId& node, |
- const NodeId& new_parent, |
- const NodeId& old_parent) { |
+void RootNodeManager::NotifyNodeHierarchyChanged(const NodeId& node, |
+ const NodeId& new_parent, |
+ const NodeId& old_parent) { |
// TODO(sky): make a macro for this. |
for (ConnectionMap::iterator i = connection_map_.begin(); |
i != connection_map_.end(); ++i) { |
- i->second->ProcessNodeHierarchyChanged( |
- node, new_parent, old_parent, next_server_change_id_, |
- IsChangeSource(i->first)); |
+ if (ShouldNotifyConnection(i->first)) { |
+ i->second->NotifyNodeHierarchyChanged( |
+ node, new_parent, old_parent, next_server_change_id_); |
+ } |
} |
} |
-void RootNodeManager::ProcessNodeViewReplaced(const NodeId& node, |
- const ViewId& new_view_id, |
- const ViewId& old_view_id) { |
+void RootNodeManager::NotifyNodeViewReplaced(const NodeId& node, |
+ const ViewId& new_view_id, |
+ const ViewId& old_view_id) { |
// TODO(sky): make a macro for this. |
for (ConnectionMap::iterator i = connection_map_.begin(); |
i != connection_map_.end(); ++i) { |
- i->second->ProcessNodeViewReplaced(node, new_view_id, old_view_id, |
- IsChangeSource(i->first)); |
+ if (ShouldNotifyConnection(i->first)) |
+ i->second->NotifyNodeViewReplaced(node, new_view_id, old_view_id); |
} |
} |
-void RootNodeManager::ProcessNodeDeleted(const NodeId& node) { |
+void RootNodeManager::NotifyNodeDeleted(const NodeId& node) { |
// TODO(sky): make a macro for this. |
for (ConnectionMap::iterator i = connection_map_.begin(); |
i != connection_map_.end(); ++i) { |
- i->second->ProcessNodeDeleted(node, next_server_change_id_, |
- IsChangeSource(i->first)); |
+ if (ShouldNotifyConnection(i->first)) |
+ i->second->NotifyNodeDeleted(node, next_server_change_id_); |
} |
} |
-void RootNodeManager::ProcessViewDeleted(const ViewId& view) { |
+void RootNodeManager::NotifyViewDeleted(const ViewId& view) { |
// TODO(sky): make a macro for this. |
for (ConnectionMap::iterator i = connection_map_.begin(); |
i != connection_map_.end(); ++i) { |
- i->second->ProcessViewDeleted(view, IsChangeSource(i->first)); |
+ if (ShouldNotifyConnection(i->first)) |
+ i->second->NotifyViewDeleted(view); |
} |
} |
-void RootNodeManager::PrepareForChange(ViewManagerConnection* connection, |
- bool is_delete_node) { |
+void RootNodeManager::PrepareForChange(ViewManagerConnection* connection) { |
// Should only ever have one change in flight. |
DCHECK_EQ(kNoConnection, change_source_); |
change_source_ = connection->id(); |
- is_processing_delete_node_ = is_delete_node; |
} |
void RootNodeManager::FinishChange(ChangeType change_type) { |
// PrepareForChange/FinishChange should be balanced. |
DCHECK_NE(kNoConnection, change_source_); |
change_source_ = 0; |
- is_processing_delete_node_ = false; |
if (change_type == CHANGE_TYPE_ADVANCE_SERVER_CHANGE_ID) |
next_server_change_id_++; |
} |
+bool RootNodeManager::ShouldNotifyConnection( |
+ TransportConnectionId connection_id) const { |
+ // Don't notify the source that originated the change. |
+ return connection_id != change_source_; |
+} |
+ |
void RootNodeManager::OnNodeHierarchyChanged(const NodeId& node, |
const NodeId& new_parent, |
const NodeId& old_parent) { |
if (!root_view_manager_.in_setup()) |
- ProcessNodeHierarchyChanged(node, new_parent, old_parent); |
+ NotifyNodeHierarchyChanged(node, new_parent, old_parent); |
} |
void RootNodeManager::OnNodeViewReplaced(const NodeId& node, |
const ViewId& new_view_id, |
const ViewId& old_view_id) { |
- ProcessNodeViewReplaced(node, new_view_id, old_view_id); |
+ NotifyNodeViewReplaced(node, new_view_id, old_view_id); |
} |
} // namespace service |