diff options
Diffstat (limited to 'src/live_effects/parameter')
| -rw-r--r-- | src/live_effects/parameter/item.cpp | 26 | ||||
| -rw-r--r-- | src/live_effects/parameter/originalitem.cpp | 15 | ||||
| -rw-r--r-- | src/live_effects/parameter/originalitem.h | 2 |
3 files changed, 33 insertions, 10 deletions
diff --git a/src/live_effects/parameter/item.cpp b/src/live_effects/parameter/item.cpp index 8caea4e26..0a46ec7ce 100644 --- a/src/live_effects/parameter/item.cpp +++ b/src/live_effects/parameter/item.cpp @@ -135,25 +135,31 @@ ItemParam::addCanvasIndicators(SPLPEItem const*/*lpeitem*/, std::vector<Geom::Pa void -ItemParam::start_listening(SPObject * to) +ItemParam::start_listening(SPObject * to, bool force) { if ( to == NULL ) { return; } - linked_delete_connection = to->connectDelete(sigc::mem_fun(*this, &ItemParam::linked_delete)); - linked_modified_connection = to->connectModified(sigc::mem_fun(*this, &ItemParam::linked_modified)); - if (SP_IS_ITEM(to)) { - linked_transformed_connection = SP_ITEM(to)->connectTransformed(sigc::mem_fun(*this, &ItemParam::linked_transformed)); + if (!linked_delete_connection.connected() || force) { + std::cout << "111111111111111111\n"; + linked_delete_connection = to->connectDelete(sigc::mem_fun(*this, &ItemParam::linked_delete)); + linked_modified_connection = to->connectModified(sigc::mem_fun(*this, &ItemParam::linked_modified)); + if (SP_IS_ITEM(to)) { + linked_transformed_connection = SP_ITEM(to)->connectTransformed(sigc::mem_fun(*this, &ItemParam::linked_transformed)); + } + linked_modified(to, SP_OBJECT_MODIFIED_FLAG); // simulate linked_modified signal, so that path data is updated } - linked_modified(to, SP_OBJECT_MODIFIED_FLAG); // simulate linked_modified signal, so that path data is updated } void ItemParam::quit_listening(void) { - linked_modified_connection.disconnect(); - linked_delete_connection.disconnect(); - linked_transformed_connection.disconnect(); + if (linked_delete_connection.connected()) { + std::cout << "2222222222222222222222\n"; + linked_modified_connection.disconnect(); + linked_delete_connection.disconnect(); + linked_transformed_connection.disconnect(); + } } void @@ -161,7 +167,7 @@ ItemParam::ref_changed(SPObject */*old_ref*/, SPObject *new_ref) { quit_listening(); if ( new_ref ) { - start_listening(new_ref); + start_listening(new_ref, true); } } diff --git a/src/live_effects/parameter/originalitem.cpp b/src/live_effects/parameter/originalitem.cpp index 015fa0bd4..dc7f2d634 100644 --- a/src/live_effects/parameter/originalitem.cpp +++ b/src/live_effects/parameter/originalitem.cpp @@ -84,6 +84,21 @@ OriginalItemParam::param_newWidget() } void +OriginalItemParam::param_start_listening(SPObject * to) +{ + if ( to == NULL ) { + return; + } + start_listening(to, false); +} + +void +OriginalItemParam::param_quit_listening(void) +{ + quit_listening(); +} + +void OriginalItemParam::linked_modified_callback(SPObject *linked_obj, guint /*flags*/) { emit_changed(); diff --git a/src/live_effects/parameter/originalitem.h b/src/live_effects/parameter/originalitem.h index 9c67571e8..5478a1e4b 100644 --- a/src/live_effects/parameter/originalitem.h +++ b/src/live_effects/parameter/originalitem.h @@ -26,6 +26,8 @@ public: bool linksToItem() const { return (href != NULL); } SPItem * getObject() const { return ref.getObject(); } + void param_start_listening(SPObject * to); + void param_quit_listening(void); virtual Gtk::Widget * param_newWidget(); |
