summaryrefslogtreecommitdiffstats
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
parentstd::unique_ptr<PrefNodeObserver> (diff)
downloadinkscape-d5a52d4fd7eef47bd552f7c58ca4986be34df79f.tar.gz
inkscape-d5a52d4fd7eef47bd552f7c58ca4986be34df79f.zip
std::unique_ptr<_ObserverData>
-rw-r--r--src/preferences.cpp19
-rw-r--r--src/preferences.h4
2 files changed, 9 insertions, 14 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);
}
}
diff --git a/src/preferences.h b/src/preferences.h
index 8a548d4cd..8781023f2 100644
--- a/src/preferences.h
+++ b/src/preferences.h
@@ -111,7 +111,7 @@ public:
Glib::ustring const observed_path; ///< Path which the observer watches
private:
- _ObserverData *_data; ///< additional data used by the implementation while the observer is active
+ std::unique_ptr<_ObserverData> _data; ///< additional data used by the implementation while the observer is active
};
@@ -610,7 +610,7 @@ private:
// privilege escalation methods for PrefNodeObserver
static Entry const _create_pref_value(Glib::ustring const &, void const *ptr);
- static _ObserverData *_get_pref_observer_data(Observer &o) { return o._data; }
+ static _ObserverData *_get_pref_observer_data(Observer &o) { return o._data.get(); }
static Preferences *_instance;