summaryrefslogtreecommitdiffstats
path: root/src/libs/client/Store.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2006-09-11 19:57:59 +0000
committerDavid Robillard <d@drobilla.net>2006-09-11 19:57:59 +0000
commit16c866f220847ae23012318d2c1a5023076ab5fa (patch)
tree1cd383ecbe4d3b800423b9860691d89eba2e8a52 /src/libs/client/Store.cpp
parentb15864870d34a1188eda93ad215734275037278e (diff)
downloadingen-16c866f220847ae23012318d2c1a5023076ab5fa.tar.gz
ingen-16c866f220847ae23012318d2c1a5023076ab5fa.tar.bz2
ingen-16c866f220847ae23012318d2c1a5023076ab5fa.zip
Bug fixes.
git-svn-id: http://svn.drobilla.net/lad/ingen@129 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/libs/client/Store.cpp')
-rw-r--r--src/libs/client/Store.cpp38
1 files changed, 12 insertions, 26 deletions
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<ObjectModel> result = (*i).second;
m_objects.erase(i);
//cout << "[Store] Removed " << path << endl;
+
+ if (result)
+ result->destroyed_sig.emit();
+
+ if (result->path() != "/") {
+ CountedPtr<ObjectModel> 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<ObjectModel>();
@@ -200,32 +211,7 @@ Store::add_plugin(CountedPtr<PluginModel> pm)
void
Store::destruction_event(const Path& path)
{
- // Hopefully the compiler will optimize all these const pointers into one...
-
- CountedPtr<ObjectModel> 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<NodeModel*>(object);
- if (node) {
- cerr << "Node\n";
- PatchModel* const parent = dynamic_cast<PatchModel* const>(object->parent().get());
- if (parent)
- parent->remove_node(node->path().name());
- }
-
- PortModel* const port = dynamic_cast<PortModel*>(object);
- if (port) {
- NodeModel* const parent = dynamic_cast<NodeModel* const>(object->parent().get());
- assert(parent);
- parent->remove_port(port->path().name());
- }
-
- if (object)
- object->destroyed_sig.emit();
+ remove_object(path);
}
void