diff options
author | David Robillard <d@drobilla.net> | 2018-01-21 20:52:32 +0100 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2018-01-22 00:20:19 +0100 |
commit | d9c5d89d230b204a90cca4dee4165ba6ebdf00fd (patch) | |
tree | bfef33474927a6c22f723fcc849d8df801f618e9 /src/gui/ingen_gui.cpp | |
parent | 7150b9bc10511e17abdd6e528fd1317522f64eae (diff) | |
download | ingen-d9c5d89d230b204a90cca4dee4165ba6ebdf00fd.tar.gz ingen-d9c5d89d230b204a90cca4dee4165ba6ebdf00fd.tar.bz2 ingen-d9c5d89d230b204a90cca4dee4165ba6ebdf00fd.zip |
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.
Diffstat (limited to 'src/gui/ingen_gui.cpp')
-rw-r--r-- | src/gui/ingen_gui.cpp | 24 |
1 files changed, 14 insertions, 10 deletions
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<char>(); + void load(World* world) { + URI uri(world->conf().option("connect").ptr<char>()); if (!world->interface()) { - SPtr<SigClientInterface> client(new ThreadedSigClientInterface()); - world->set_interface(world->new_interface(URI(uri), client)); - } else if (!dynamic_ptr_cast<Client::SigClientInterface>( + world->set_interface( + world->new_interface(URI(uri), make_client(world))); + } else if (!dynamic_ptr_cast<SigClientInterface>( world->interface()->respondee())) { - SPtr<SigClientInterface> 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<Interface> make_client(World* const world) { + SPtr<SigClientInterface> sci(new SigClientInterface()); + return world->engine() ? sci : SPtr<Interface>(new QueuedInterface(sci)); + } + SPtr<GUI::App> app; }; |