diff options
Diffstat (limited to 'src/gui/MachinaCanvas.cpp')
-rw-r--r-- | src/gui/MachinaCanvas.cpp | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/src/gui/MachinaCanvas.cpp b/src/gui/MachinaCanvas.cpp index efb677f..2869c22 100644 --- a/src/gui/MachinaCanvas.cpp +++ b/src/gui/MachinaCanvas.cpp @@ -62,7 +62,7 @@ MachinaCanvas::node_clicked(WeakPtr<NodeView> item, GdkEventButton* event) if (last) { if (node != last) { - if (get_connection(last, node)) + if (get_connection(last.get(), node.get())) action_disconnect(last, node); else action_connect(last, node); @@ -112,7 +112,7 @@ MachinaCanvas::on_new_object(SharedPtr<Client::ClientObject> object) WeakPtr<NodeView>(view))); object->set_view(view); - add_item(view); + add_item(view.get()); } else if (type == "machina:Edge") { SharedPtr<Machina::Client::ClientObject> tail = _app->client_model()->find( @@ -126,11 +126,11 @@ MachinaCanvas::on_new_object(SharedPtr<Client::ClientObject> object) SharedPtr<EdgeView> view( new EdgeView(*this, tail_view, head_view, object)); - tail_view->add_connection(view); - head_view->add_connection(view); + tail_view->add_connection(view.get()); + head_view->add_connection(view.get()); object->set_view(view); - add_connection(view); + add_connection(view.get()); } else { Raul::error << "Unknown object type " << type << std::endl; @@ -142,14 +142,11 @@ MachinaCanvas::on_erase_object(SharedPtr<Client::ClientObject> object) { const Raul::Atom& type = object->get(URIs::instance().rdf_type); if (type == "machina:Node") { - SharedPtr<NodeView> view = PtrCast<NodeView>(object->view()); - if (view) { - remove_item(view); - } + // Destruction of the view will remove from the canvas } else if (type == "machina:Edge") { SharedPtr<EdgeView> view = PtrCast<EdgeView>(object->view()); if (view) { - remove_connection(view->source().lock(), view->dest().lock()); + remove_connection(view->source(), view->dest()); } } else { Raul::error << "Unknown object type " << type << std::endl; |