diff options
| author | bulia byak <buliabyak@gmail.com> | 2007-07-02 19:04:27 +0000 |
|---|---|---|
| committer | buliabyak <buliabyak@users.sourceforge.net> | 2007-07-02 19:04:27 +0000 |
| commit | b6ca5f0a3ca205d9eb09b897d20b954ce03fa2da (patch) | |
| tree | baaeda47f210ef42dc447e222256566cf7793e8e | |
| parent | was trying to have my cake and eat it too, memory-management-wise ... for (diff) | |
| download | inkscape-b6ca5f0a3ca205d9eb09b897d20b954ce03fa2da.tar.gz inkscape-b6ca5f0a3ca205d9eb09b897d20b954ce03fa2da.zip | |
fix wrong modified signal handling: connecting was sigc but disconnecting was old g_signal
(bzr r3160)
| -rw-r--r-- | src/sp-filter.cpp | 14 | ||||
| -rw-r--r-- | src/sp-filter.h | 1 |
2 files changed, 9 insertions, 6 deletions
diff --git a/src/sp-filter.cpp b/src/sp-filter.cpp index 11aa30e0b..aae143e8d 100644 --- a/src/sp-filter.cpp +++ b/src/sp-filter.cpp @@ -111,6 +111,8 @@ sp_filter_init(SPFilter *filter) filter->_renderer = NULL; filter->_image_name = map<gchar *, int, ltstr>(); + + new (&filter->modified_connection) sigc::connection(); } /** @@ -156,14 +158,14 @@ sp_filter_release(SPObject *object) //release href if (filter->href) { - if (filter->href->getObject()) { - sp_signal_disconnect_by_data(filter->href->getObject(), filter); - } + filter->modified_connection.disconnect(); filter->href->detach(); delete filter->href; filter->href = NULL; } + filter->modified_connection.~connection(); + if (((SPObjectClass *) filter_parent_class)->release) ((SPObjectClass *) filter_parent_class)->release(object); } @@ -352,13 +354,13 @@ static void filter_ref_changed(SPObject *old_ref, SPObject *ref, SPFilter *filter) { if (old_ref) { - sp_signal_disconnect_by_data(old_ref, filter); + filter->modified_connection.disconnect(); } if ( SP_IS_FILTER(ref) && ref != filter ) { - ref->connectModified(sigc::bind(sigc::ptr_fun(&filter_ref_modified), filter)); - //g_signal_connect(G_OBJECT(ref), "modified", G_CALLBACK(filter_ref_modified), filter); + filter->modified_connection = + ref->connectModified(sigc::bind(sigc::ptr_fun(&filter_ref_modified), filter)); } filter_ref_modified(ref, 0, filter); diff --git a/src/sp-filter.h b/src/sp-filter.h index c6edc6c65..9c4e7aaf6 100644 --- a/src/sp-filter.h +++ b/src/sp-filter.h @@ -56,6 +56,7 @@ struct SPFilter : public SPObject { NumberOptNumber filterRes; /** HREF attribute */ SPFilterReference *href; + sigc::connection modified_connection; NR::Filter *_renderer; |
