diff options
| author | bulia byak <buliabyak@gmail.com> | 2006-08-03 04:03:23 +0000 |
|---|---|---|
| committer | buliabyak <buliabyak@users.sourceforge.net> | 2006-08-03 04:03:23 +0000 |
| commit | 8db1ff8571079c96534c31f5eb0ee480c7e3b202 (patch) | |
| tree | a50c90f78541a8fed20251ce00f66a1171985a72 /src/nodepath.cpp | |
| parent | * packaging/macosx/osx-dmg.sh: Fix one of the commands that was using (diff) | |
| download | inkscape-8db1ff8571079c96534c31f5eb0ee480c7e3b202.tar.gz inkscape-8db1ff8571079c96534c31f5eb0ee480c7e3b202.zip | |
disconnect signals from knots when destroying node - fixes a crash with interruptible redraw
(bzr r1547)
Diffstat (limited to 'src/nodepath.cpp')
| -rw-r--r-- | src/nodepath.cpp | 33 |
1 files changed, 27 insertions, 6 deletions
diff --git a/src/nodepath.cpp b/src/nodepath.cpp index 7caaf8c49..d4aada20c 100644 --- a/src/nodepath.cpp +++ b/src/nodepath.cpp @@ -479,10 +479,6 @@ static void update_repr_internal(Inkscape::NodePath::Path *np) */ void sp_nodepath_update_repr(Inkscape::NodePath::Path *np, const gchar *annotation) { - update_repr_internal(np); - sp_document_done(sp_desktop_document(np->desktop), SP_VERB_CONTEXT_NODE, - annotation); - if (np->livarot_path) { delete np->livarot_path; np->livarot_path = NULL; @@ -493,6 +489,10 @@ void sp_nodepath_update_repr(Inkscape::NodePath::Path *np, const gchar *annotati if (np->livarot_path) np->livarot_path->ConvertWithBackData(0.01); } + + update_repr_internal(np); + sp_document_done(sp_desktop_document(np->desktop), SP_VERB_CONTEXT_NODE, + annotation); } /** @@ -3966,11 +3966,32 @@ static void sp_nodepath_node_destroy(Inkscape::NodePath::Node *node) node->subpath->nodes = g_list_remove(node->subpath->nodes, node); + g_signal_handlers_disconnect_by_func(G_OBJECT(node->knot), (gpointer) G_CALLBACK(node_event), node); + g_signal_handlers_disconnect_by_func(G_OBJECT(node->knot), (gpointer) G_CALLBACK(node_clicked), node); + g_signal_handlers_disconnect_by_func(G_OBJECT(node->knot), (gpointer) G_CALLBACK(node_grabbed), node); + g_signal_handlers_disconnect_by_func(G_OBJECT(node->knot), (gpointer) G_CALLBACK(node_ungrabbed), node); + g_signal_handlers_disconnect_by_func(G_OBJECT(node->knot), (gpointer) G_CALLBACK(node_request), node); g_object_unref(G_OBJECT(node->knot)); - if (node->p.knot) + + if (node->p.knot) { + g_signal_handlers_disconnect_by_func(G_OBJECT(node->p.knot), (gpointer) G_CALLBACK(node_handle_clicked), node); + g_signal_handlers_disconnect_by_func(G_OBJECT(node->p.knot), (gpointer) G_CALLBACK(node_handle_grabbed), node); + g_signal_handlers_disconnect_by_func(G_OBJECT(node->p.knot), (gpointer) G_CALLBACK(node_handle_ungrabbed), node); + g_signal_handlers_disconnect_by_func(G_OBJECT(node->p.knot), (gpointer) G_CALLBACK(node_handle_request), node); + g_signal_handlers_disconnect_by_func(G_OBJECT(node->p.knot), (gpointer) G_CALLBACK(node_handle_moved), node); + g_signal_handlers_disconnect_by_func(G_OBJECT(node->p.knot), (gpointer) G_CALLBACK(node_handle_event), node); g_object_unref(G_OBJECT(node->p.knot)); - if (node->n.knot) + } + + if (node->n.knot) { + g_signal_handlers_disconnect_by_func(G_OBJECT(node->n.knot), (gpointer) G_CALLBACK(node_handle_clicked), node); + g_signal_handlers_disconnect_by_func(G_OBJECT(node->n.knot), (gpointer) G_CALLBACK(node_handle_grabbed), node); + g_signal_handlers_disconnect_by_func(G_OBJECT(node->n.knot), (gpointer) G_CALLBACK(node_handle_ungrabbed), node); + g_signal_handlers_disconnect_by_func(G_OBJECT(node->n.knot), (gpointer) G_CALLBACK(node_handle_request), node); + g_signal_handlers_disconnect_by_func(G_OBJECT(node->n.knot), (gpointer) G_CALLBACK(node_handle_moved), node); + g_signal_handlers_disconnect_by_func(G_OBJECT(node->n.knot), (gpointer) G_CALLBACK(node_handle_event), node); g_object_unref(G_OBJECT(node->n.knot)); + } if (node->p.line) gtk_object_destroy(GTK_OBJECT(node->p.line)); |
