From d9c5d89d230b204a90cca4dee4165ba6ebdf00fd Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sun, 21 Jan 2018 20:52:32 +0100 Subject: Only enqueue messages when the engine is remote When the engine is local, messages are emitted in the Gtk thread and applied immediately. This should make the GUI more responsive. --- src/gui/ingen_gui.cpp | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) (limited to 'src/gui/ingen_gui.cpp') diff --git a/src/gui/ingen_gui.cpp b/src/gui/ingen_gui.cpp index 83e41a7e..677296fd 100644 --- a/src/gui/ingen_gui.cpp +++ b/src/gui/ingen_gui.cpp @@ -16,7 +16,8 @@ #include "ingen/Configuration.hpp" #include "ingen/Module.hpp" -#include "ingen/client/ThreadedSigClientInterface.hpp" +#include "ingen/QueuedInterface.hpp" +#include "ingen/client/SigClientInterface.hpp" #include "App.hpp" @@ -24,18 +25,16 @@ namespace Ingen { namespace GUI { struct GUIModule : public Module { - void load(World* world) { - using Client::SigClientInterface; - using Client::ThreadedSigClientInterface; + using SigClientInterface = Client::SigClientInterface; - std::string uri = world->conf().option("connect").ptr(); + void load(World* world) { + URI uri(world->conf().option("connect").ptr()); if (!world->interface()) { - SPtr client(new ThreadedSigClientInterface()); - world->set_interface(world->new_interface(URI(uri), client)); - } else if (!dynamic_ptr_cast( + world->set_interface( + world->new_interface(URI(uri), make_client(world))); + } else if (!dynamic_ptr_cast( world->interface()->respondee())) { - SPtr client(new ThreadedSigClientInterface()); - world->interface()->set_respondee(client); + world->interface()->set_respondee(make_client(world)); } app = GUI::App::create(world); @@ -45,6 +44,11 @@ struct GUIModule : public Module { app->run(); } + SPtr make_client(World* const world) { + SPtr sci(new SigClientInterface()); + return world->engine() ? sci : SPtr(new QueuedInterface(sci)); + } + SPtr app; }; -- cgit v1.2.1