summaryrefslogtreecommitdiffstats
path: root/src/xml/subtree.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/xml/subtree.cpp')
-rw-r--r--src/xml/subtree.cpp56
1 files changed, 12 insertions, 44 deletions
diff --git a/src/xml/subtree.cpp b/src/xml/subtree.cpp
index f19bf055a..c608efd64 100644
--- a/src/xml/subtree.cpp
+++ b/src/xml/subtree.cpp
@@ -19,29 +19,27 @@
namespace Inkscape {
namespace XML {
-namespace {
-
-void recursively(void (Node::*m)(NodeObserver &observer),
- Node &node, NodeObserver &observer)
-{
- (node.*m)(observer);
- for ( NodeSiblingIterator iter = node.firstChild() ; iter ; ++iter ) {
- recursively(m, *iter, observer);
- }
+Subtree::Subtree(Node &root) : _root(root) {
+ _root.addSubtreeObserver(_observers);
}
+Subtree::~Subtree() {
+ _root.removeSubtreeObserver(_observers);
}
-Subtree::Subtree(Node &root) : _root(root) {
- recursively(&Node::addObserver, _root, *this);
+namespace {
+
+void synthesize_events_recursive(Node &node, NodeObserver &observer) {
+ node.synthesizeEvents(observer);
+ for ( NodeSiblingIterator iter = node.firstChild() ; iter ; ++iter ) {
+ synthesize_events_recursive(*iter, observer);
+ }
}
-Subtree::~Subtree() {
- recursively(&Node::removeObserver, _root, *this);
}
void Subtree::synthesizeEvents(NodeObserver &observer) {
- recursively(&Node::synthesizeEvents, _root, *this);
+ synthesize_events_recursive(_root, observer);
}
void Subtree::addObserver(NodeObserver &observer) {
@@ -52,36 +50,6 @@ void Subtree::removeObserver(NodeObserver &observer) {
_observers.remove(observer);
}
-void Subtree::notifyChildAdded(Node &node, Node &child, Node *prev) {
- recursively(&Node::addObserver, child, *this);
- _observers.notifyChildAdded(node, child, prev);
-}
-
-void Subtree::notifyChildRemoved(Node &node, Node &child, Node *prev) {
- recursively(&Node::removeObserver, child, *this);
- _observers.notifyChildRemoved(node, child, prev);
-}
-
-void Subtree::notifyChildOrderChanged(Node &node, Node &child,
- Node *old_prev, Node *new_prev)
-{
- _observers.notifyChildOrderChanged(node, child, old_prev, new_prev);
-}
-
-void Subtree::notifyContentChanged(Node &node,
- Util::ptr_shared<char> old_content,
- Util::ptr_shared<char> new_content)
-{
- _observers.notifyContentChanged(node, old_content, new_content);
-}
-
-void Subtree::notifyAttributeChanged(Node &node, GQuark name,
- Util::ptr_shared<char> old_value,
- Util::ptr_shared<char> new_value)
-{
- _observers.notifyAttributeChanged(node, name, old_value, new_value);
-}
-
}
}