From 16c866f220847ae23012318d2c1a5023076ab5fa Mon Sep 17 00:00:00 2001 From: David Robillard Date: Mon, 11 Sep 2006 19:57:59 +0000 Subject: Bug fixes. git-svn-id: http://svn.drobilla.net/lad/ingen@129 a436a847-0d15-0410-975c-d299462d15a1 --- src/libs/client/Store.cpp | 38 ++++++++++++-------------------------- 1 file changed, 12 insertions(+), 26 deletions(-) (limited to 'src/libs/client/Store.cpp') diff --git a/src/libs/client/Store.cpp b/src/libs/client/Store.cpp index 36e815d8..c0bc1a31 100644 --- a/src/libs/client/Store.cpp +++ b/src/libs/client/Store.cpp @@ -153,7 +153,18 @@ Store::remove_object(const Path& path) CountedPtr result = (*i).second; m_objects.erase(i); //cout << "[Store] Removed " << path << endl; + + if (result) + result->destroyed_sig.emit(); + + if (result->path() != "/") { + CountedPtr parent = this->object(result->path().parent()); + if (parent) { + parent->remove_child(result); + } + } return result; + } else { cerr << "[Store] Unable to find object " << path << " to remove." << endl; return CountedPtr(); @@ -200,32 +211,7 @@ Store::add_plugin(CountedPtr pm) void Store::destruction_event(const Path& path) { - // Hopefully the compiler will optimize all these const pointers into one... - - CountedPtr obj_ptr = remove_object(path); - ObjectModel* const object = obj_ptr.get(); - - // FIXME: Why does this need to be specific? Just make a remove_child - // for everything - - // Succeeds for (Plugin) Nodes and Patches - NodeModel* const node = dynamic_cast(object); - if (node) { - cerr << "Node\n"; - PatchModel* const parent = dynamic_cast(object->parent().get()); - if (parent) - parent->remove_node(node->path().name()); - } - - PortModel* const port = dynamic_cast(object); - if (port) { - NodeModel* const parent = dynamic_cast(object->parent().get()); - assert(parent); - parent->remove_port(port->path().name()); - } - - if (object) - object->destroyed_sig.emit(); + remove_object(path); } void -- cgit v1.2.1