summaryrefslogtreecommitdiffstats
path: root/src/knotholder.cpp
diff options
context:
space:
mode:
authorbulia byak <buliabyak@gmail.com>2008-07-27 15:46:58 +0000
committerbuliabyak <buliabyak@users.sourceforge.net>2008-07-27 15:46:58 +0000
commitf5723576b2a6d3667d8f5b53c2604624aa999565 (patch)
treeaf9e653115f113b6b8cec4c157f49ecec14ad6f5 /src/knotholder.cpp
parentAdd tracking of skew factor and display in warning message. (diff)
downloadinkscape-f5723576b2a6d3667d8f5b53c2604624aa999565.tar.gz
inkscape-f5723576b2a6d3667d8f5b53c2604624aa999565.zip
fix release mouse crash, add missed disconnects, remove unused callback
(bzr r6430)
Diffstat (limited to 'src/knotholder.cpp')
-rw-r--r--src/knotholder.cpp22
1 files changed, 10 insertions, 12 deletions
diff --git a/src/knotholder.cpp b/src/knotholder.cpp
index f0495a244..f2bbbfbc0 100644
--- a/src/knotholder.cpp
+++ b/src/knotholder.cpp
@@ -161,28 +161,26 @@ KnotHolder::knot_ungrabbed_handler(SPKnot *knot)
this->released(this->item);
} else {
SPObject *object = (SPObject *) this->item;
+
+ // Caution: this call involves a screen update, which may process events, and as a
+ // result the knotholder may be destructed. So, after the updateRepr, we cannot use any
+ // fields of this knotholder (such as this->item), but only values we have saved beforehand
+ // (such as object).
object->updateRepr();
/* do cleanup tasks (e.g., for LPE items write the parameter values
* that were changed by dragging the handle to SVG)
*/
- if (SP_IS_LPE_ITEM(item)) {
- // This writes all parameters to SVG. Is this sufficiently efficient or should we only write
- // the ones that were changed (e.g., via the individual handles' onKnotUngrabbed() method?
- Inkscape::LivePathEffect::Effect *lpe = sp_lpe_item_get_current_lpe(SP_LPE_ITEM(item));
+ if (SP_IS_LPE_ITEM(object)) {
+ // This writes all parameters to SVG. Is this sufficiently efficient or should we only
+ // write the ones that were changed?
+
+ Inkscape::LivePathEffect::Effect *lpe = sp_lpe_item_get_current_lpe(SP_LPE_ITEM(object));
if (lpe) {
LivePathEffectObject *lpeobj = lpe->getLPEObj();
SP_OBJECT(lpeobj)->updateRepr();
}
}
- // this was once used to write individual parameter values to SVG but this is now done globally above;
- // we leave the calls to onKnotUngrabbed, anyway, in case any other cleanup tasks need to be done
- for(std::list<KnotHolderEntity *>::iterator i = this->entity.begin(); i != this->entity.end(); ++i) {
- KnotHolderEntity *e = *i;
- if (e->knot == knot) {
- e->onKnotUngrabbed(); // for most KnotHolderEntitys this does nothing
- }
- }
unsigned int object_verb = SP_VERB_NONE;