diff options
| author | Thomas Holder <thomas@thomas-holder.de> | 2019-01-13 21:45:55 +0000 |
|---|---|---|
| committer | Thomas Holder <thomas@thomas-holder.de> | 2019-01-14 16:31:24 +0000 |
| commit | d5a52d4fd7eef47bd552f7c58ca4986be34df79f (patch) | |
| tree | 7021c723506b4ca5a4eadc9b5d25d6e669db87aa /src/preferences.cpp | |
| parent | std::unique_ptr<PrefNodeObserver> (diff) | |
| download | inkscape-d5a52d4fd7eef47bd552f7c58ca4986be34df79f.tar.gz inkscape-d5a52d4fd7eef47bd552f7c58ca4986be34df79f.zip | |
std::unique_ptr<_ObserverData>
Diffstat (limited to 'src/preferences.cpp')
| -rw-r--r-- | src/preferences.cpp | 19 |
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); } } |
