summaryrefslogtreecommitdiffstats
path: root/src/layer-manager.cpp
diff options
context:
space:
mode:
authorMenTaLguY <mental@rydia.net>2006-07-21 21:49:37 +0000
committermental <mental@users.sourceforge.net>2006-07-21 21:49:37 +0000
commit8241ea1543dd759a3de12ade9495cd67bcb87a51 (patch)
treee899c726795ed8d91179e2940486466e84dae5e3 /src/layer-manager.cpp
parentswitch to sigc++ signal for "release" (diff)
downloadinkscape-8241ea1543dd759a3de12ade9495cd67bcb87a51.tar.gz
inkscape-8241ea1543dd759a3de12ade9495cd67bcb87a51.zip
switch to sigc++ signals and manually clean up signal connections (although it may not be strictly necessary to do so here)
(bzr r1453)
Diffstat (limited to 'src/layer-manager.cpp')
-rw-r--r--src/layer-manager.cpp16
1 files changed, 7 insertions, 9 deletions
diff --git a/src/layer-manager.cpp b/src/layer-manager.cpp
index 61b0e15bb..4d92d37c8 100644
--- a/src/layer-manager.cpp
+++ b/src/layer-manager.cpp
@@ -30,9 +30,10 @@ using Inkscape::XML::Node;
class LayerManager::LayerWatcher : public Inkscape::XML::NodeObserver {
public:
- LayerWatcher(LayerManager* mgr, SPObject* obj) :
+ LayerWatcher(LayerManager* mgr, SPObject* obj, sigc::connection c) :
_mgr(mgr),
_obj(obj),
+ _connection(c),
_lockedAttr(g_quark_from_string("sodipodi:insensitive")),
_labelAttr(g_quark_from_string("inkscape:label"))
{}
@@ -51,6 +52,7 @@ public:
LayerManager* _mgr;
SPObject* _obj;
+ sigc::connection _connection;
GQuark _lockedAttr;
GQuark _labelAttr;
};
@@ -146,12 +148,6 @@ void LayerManager::_setDocument(SPDocument *document) {
_rebuild();
}
-
-void LayerManager::_objectModifiedCB( SPObject* obj, guint flags, LayerManager* mgr )
-{
- mgr->_objectModified( obj, flags );
-}
-
void LayerManager::_objectModified( SPObject* obj, guint flags )
{
_details_changed_signal.emit( obj );
@@ -166,6 +162,7 @@ void LayerManager::_rebuild() {
if ( node ) {
node->removeObserver(*one);
}
+ one->_connection.disconnect();
}
}
@@ -185,15 +182,16 @@ void LayerManager::_rebuild() {
// Such may have been the cause of bug 1339397.
// See http://sourceforge.net/tracker/index.php?func=detail&aid=1339397&group_id=93438&atid=604306
+
SPObject const *higher = curr;
while ( higher && (SP_OBJECT_PARENT(higher) != root) ) {
higher = SP_OBJECT_PARENT(higher);
}
Node* node = higher ? SP_OBJECT_REPR(higher) : 0;
if ( node && node->parent() ) {
- g_signal_connect( G_OBJECT(curr), "modified", G_CALLBACK( _objectModifiedCB ), this );
+ sigc::connection connection = curr->connectModified(sigc::mem_fun(*this, &LayerManager::_objectModified));
- LayerWatcher* eye = new LayerWatcher(this, curr);
+ LayerWatcher *eye = new LayerWatcher(this, curr, connection);
_watchers.push_back( eye );
SP_OBJECT_REPR(curr)->addObserver(*eye);