diff options
| author | Ted Gould <ted@gould.cx> | 2008-10-28 04:45:31 +0000 |
|---|---|---|
| committer | Ted Gould <ted@canonical.com> | 2008-10-28 04:45:31 +0000 |
| commit | dc743aafd8b8c2d9c4e081fc937a94a26c055203 (patch) | |
| tree | 98748c7465ac4ce06d1cbc359f767bcf0422cc85 /src/preferences.cpp | |
| parent | From trunk (diff) | |
| download | inkscape-dc743aafd8b8c2d9c4e081fc937a94a26c055203.tar.gz inkscape-dc743aafd8b8c2d9c4e081fc937a94a26c055203.zip | |
Merge from trunk
(bzr r6886)
Diffstat (limited to 'src/preferences.cpp')
| -rw-r--r-- | src/preferences.cpp | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/src/preferences.cpp b/src/preferences.cpp index e999182c7..8b8289849 100644 --- a/src/preferences.cpp +++ b/src/preferences.cpp @@ -437,15 +437,15 @@ void Preferences::addObserver(Observer &o) if (!node) return; // set additional data - _ObserverData *d = new _ObserverData; - d->_node = node; - d->_is_attr = !attr_key.empty(); - o._data = static_cast<void*>(d); + _ObserverData *priv_data = new _ObserverData; + priv_data->_node = node; + priv_data->_is_attr = !attr_key.empty(); + o._data = static_cast<void*>(priv_data); _observer_map[&o] = new PrefNodeObserver(o, attr_key); // if we watch a single pref, we want to receive notifications only for a single node - if (d->_is_attr) { + if (priv_data->_is_attr) { node->addObserver( *(_observer_map[&o]) ); } else { node->addSubtreeObserver( *(_observer_map[&o]) ); @@ -457,10 +457,15 @@ void Preferences::removeObserver(Observer &o) // prevent removing an observer which was not added if ( _observer_map.find(&o) == _observer_map.end() ) return; Inkscape::XML::Node *node = static_cast<_ObserverData*>(o._data)->_node; - delete static_cast<_ObserverData*>(o._data); + _ObserverData *priv_data = static_cast<_ObserverData*>(o._data); o._data = NULL; - node->removeSubtreeObserver( *(_observer_map[&o]) ); + if (priv_data->_is_attr) + node->removeObserver( *(_observer_map[&o]) ); + else + node->removeSubtreeObserver( *(_observer_map[&o]) ); + + delete priv_data; delete _observer_map[&o]; _observer_map.erase(&o); } |
