summaryrefslogtreecommitdiffstats
path: root/src/preferences.cpp
diff options
context:
space:
mode:
authorThomas Holder <thomas@thomas-holder.de>2019-01-13 21:45:55 +0000
committerThomas Holder <thomas@thomas-holder.de>2019-01-14 16:31:24 +0000
commitd5a52d4fd7eef47bd552f7c58ca4986be34df79f (patch)
tree7021c723506b4ca5a4eadc9b5d25d6e669db87aa /src/preferences.cpp
parentstd::unique_ptr<PrefNodeObserver> (diff)
downloadinkscape-d5a52d4fd7eef47bd552f7c58ca4986be34df79f.tar.gz
inkscape-d5a52d4fd7eef47bd552f7c58ca4986be34df79f.zip
std::unique_ptr<_ObserverData>
Diffstat (limited to 'src/preferences.cpp')
-rw-r--r--src/preferences.cpp19
1 files changed, 7 insertions, 12 deletions
diff --git a/src/preferences.cpp b/src/preferences.cpp
index 8d0c8da73..84a56e0f8 100644
--- a/src/preferences.cpp
+++ b/src/preferences.cpp
@@ -675,10 +675,7 @@ void Preferences::addObserver(Observer &o)
node = _findObserverNode(o.observed_path, node_key, attr_key, true);
if (node) {
// set additional data
- if (o._data) {
- delete o._data;
- }
- o._data = new _ObserverData(node, !attr_key.empty());
+ o._data.reset(new _ObserverData(node, !attr_key.empty()));
_observer_map[&o].reset(new PrefNodeObserver(o, attr_key));
@@ -695,20 +692,18 @@ void Preferences::addObserver(Observer &o)
void Preferences::removeObserver(Observer &o)
{
// prevent removing an observer which was not added
- if ( _observer_map.find(&o) != _observer_map.end() ) {
+ auto it = _observer_map.find(&o);
+ if (it != _observer_map.end()) {
Inkscape::XML::Node *node = o._data->_node;
- _ObserverData *priv_data = o._data;
- o._data = nullptr;
+ _ObserverData *priv_data = o._data.get();
if (priv_data->_is_attr) {
- node->removeObserver( *(_observer_map[&o]) );
+ node->removeObserver(*it->second);
} else {
- node->removeSubtreeObserver( *(_observer_map[&o]) );
+ node->removeSubtreeObserver(*it->second);
}
- delete priv_data;
- priv_data = nullptr;
- _observer_map.erase(&o);
+ _observer_map.erase(it);
}
}