summaryrefslogtreecommitdiffstats
path: root/src/gui/App.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/App.cpp')
-rw-r--r--src/gui/App.cpp29
1 files changed, 19 insertions, 10 deletions
diff --git a/src/gui/App.cpp b/src/gui/App.cpp
index a8128d8d..de587a7d 100644
--- a/src/gui/App.cpp
+++ b/src/gui/App.cpp
@@ -28,6 +28,7 @@
#include "ingen/EngineBase.hpp"
#include "ingen/Interface.hpp"
#include "ingen/Log.hpp"
+#include "ingen/QueuedInterface.hpp"
#include "ingen/StreamWriter.hpp"
#include "ingen/World.hpp"
#include "ingen/client/ClientStore.hpp"
@@ -157,7 +158,7 @@ App::run()
}
void
-App::attach(SPtr<SigClientInterface> client)
+App::attach(SPtr<Ingen::Interface> client)
{
assert(!_client);
assert(!_store);
@@ -168,7 +169,7 @@ App::attach(SPtr<SigClientInterface> client)
}
_client = client;
- _store = SPtr<ClientStore>(new ClientStore(_world->uris(), _world->log(), client));
+ _store = SPtr<ClientStore>(new ClientStore(_world->uris(), _world->log(), sig_client()));
_loader = SPtr<ThreadedLoader>(new ThreadedLoader(*this, _world->interface()));
if (!_world->store()) {
_world->set_store(_store);
@@ -181,12 +182,12 @@ App::attach(SPtr<SigClientInterface> client)
stderr,
ColorContext::Color::CYAN));
- client->signal_message().connect(
+ sig_client()->signal_message().connect(
sigc::mem_fun(*_dumper.get(), &StreamWriter::message));
}
_graph_tree_window->init(*this, *_store);
- _client->signal_message().connect(sigc::mem_fun(this, &App::message));
+ sig_client()->signal_message().connect(sigc::mem_fun(this, &App::message));
}
void
@@ -212,6 +213,16 @@ App::request_plugins_if_necessary()
}
}
+SPtr<SigClientInterface>
+App::sig_client()
+{
+ SPtr<QueuedInterface> qi = dynamic_ptr_cast<QueuedInterface>(_client);
+ if (qi) {
+ return dynamic_ptr_cast<SigClientInterface>(qi->sink());
+ }
+ return dynamic_ptr_cast<SigClientInterface>(_client);
+}
+
SPtr<Serialiser>
App::serialiser()
{
@@ -264,7 +275,7 @@ App::set_property(const URI& subject,
went as planned here and fire the signal ourselves as if the server
feedback came back immediately. */
if (key != uris().ingen_activity) {
- _client->signal_message().emit(SetProperty{0, subject, key, value, ctx});
+ sig_client()->signal_message().emit(SetProperty{0, subject, key, value, ctx});
}
}
@@ -365,8 +376,6 @@ App::activity_port_destroyed(Port* port)
if (i != _activity_ports.end()) {
_activity_ports.erase(i);
}
-
- return;
}
bool
@@ -412,16 +421,16 @@ App::gtk_main_iteration()
_messages_window->flush();
}
+ _enable_signal = false;
if (_world->engine()) {
if (!_world->engine()->main_iteration()) {
Gtk::Main::quit();
return false;
}
} else {
- _enable_signal = false;
- _client->emit_signals();
- _enable_signal = true;
+ dynamic_ptr_cast<QueuedInterface>(_client)->emit();
}
+ _enable_signal = true;
return true;
}