| Index: mojo/services/public/cpp/view_manager/lib/view_tree_node.cc
|
| diff --git a/mojo/services/public/cpp/view_manager/lib/view_tree_node.cc b/mojo/services/public/cpp/view_manager/lib/view_tree_node.cc
|
| index d695ed4a45acb52a6f91fad8035a904892664a91..8ba0fd365f8688a8e01077363454d6c3b731f037 100644
|
| --- a/mojo/services/public/cpp/view_manager/lib/view_tree_node.cc
|
| +++ b/mojo/services/public/cpp/view_manager/lib/view_tree_node.cc
|
| @@ -118,6 +118,8 @@ ViewTreeNode::~ViewTreeNode() {
|
| if (parent_)
|
| parent_->RemoveChild(this);
|
|
|
| + if (manager_)
|
| + ViewManagerPrivate(manager_).synchronizer()->DestroyViewTreeNode(id_);
|
| }
|
|
|
| void ViewTreeNode::AddObserver(ViewTreeNodeObserver* observer) {
|
| @@ -129,19 +131,15 @@ void ViewTreeNode::RemoveObserver(ViewTreeNodeObserver* observer) {
|
| }
|
|
|
| void ViewTreeNode::AddChild(ViewTreeNode* child) {
|
| - ScopedTreeNotifier notifier(child, child->parent(), this);
|
| - if (child->parent())
|
| - RemoveChildImpl(child, &child->parent_->children_);
|
| - children_.push_back(child);
|
| - child->parent_ = this;
|
| - ViewManagerPrivate(manager_).synchronizer()->AddChild(child->id(), id_);
|
| + LocalAddChild(child);
|
| + if (manager_)
|
| + ViewManagerPrivate(manager_).synchronizer()->AddChild(child->id(), id_);
|
| }
|
|
|
| void ViewTreeNode::RemoveChild(ViewTreeNode* child) {
|
| - DCHECK_EQ(this, child->parent());
|
| - ScopedTreeNotifier(child, this, NULL);
|
| - RemoveChildImpl(child, &children_);
|
| - ViewManagerPrivate(manager_).synchronizer()->RemoveChild(child->id(), id_);
|
| + LocalRemoveChild(child);
|
| + if (manager_)
|
| + ViewManagerPrivate(manager_).synchronizer()->RemoveChild(child->id(), id_);
|
| }
|
|
|
| bool ViewTreeNode::Contains(ViewTreeNode* child) const {
|
| @@ -152,6 +150,23 @@ bool ViewTreeNode::Contains(ViewTreeNode* child) const {
|
| return false;
|
| }
|
|
|
| +////////////////////////////////////////////////////////////////////////////////
|
| +// ViewTreeNode, private:
|
| +
|
| +void ViewTreeNode::LocalAddChild(ViewTreeNode* child) {
|
| + ScopedTreeNotifier notifier(child, child->parent(), this);
|
| + if (child->parent())
|
| + RemoveChildImpl(child, &child->parent_->children_);
|
| + children_.push_back(child);
|
| + child->parent_ = this;
|
| +}
|
| +
|
| +void ViewTreeNode::LocalRemoveChild(ViewTreeNode* child) {
|
| + DCHECK_EQ(this, child->parent());
|
| + ScopedTreeNotifier(child, this, NULL);
|
| + RemoveChildImpl(child, &children_);
|
| +}
|
| +
|
| } // namespace view_manager
|
| } // namespace services
|
| } // namespace mojo
|
|
|