diff --git a/c++/carla-bridge/Makefile b/c++/carla-bridge/Makefile index 75be705..b8cae42 100644 --- a/c++/carla-bridge/Makefile +++ b/c++/carla-bridge/Makefile @@ -215,8 +215,8 @@ carla_bridge_toolkit-qt4__vst-x11.o: carla_bridge_toolkit-qt4.cpp OBJS_POSIX32 = \ carla_bridge_plugin__posix32.o carla_bridge_osc__posix32.o \ - carla_engine__posix32.o carla_engine_thread__posix32.o carla_engine_jack__posix32.o \ - carla_plugin__posix32.o ladspa__posix32.o dssi__posix32.o lv2__posix32.o vst__posix32.o \ + carla_engine__posix32.o carla_engine_osc__posix32.o carla_engine_thread__posix32.o carla_engine_jack__posix32.o \ + carla_plugin__posix32.o carla_plugin_thread__posix32.o ladspa__posix32.o dssi__posix32.o lv2__posix32.o vst__posix32.o \ ../carla-lilv/carla_lilv_posix32.a ../carla-rtmempool/carla_rtmempool_posix32.a carla-bridge-posix32: $(OBJS_POSIX32) @@ -231,6 +231,9 @@ carla_bridge_osc__posix32.o: carla_bridge_osc.cpp carla_engine__posix32.o: ../carla-engine/carla_engine.cpp $(CXX) $< $(POSIX_BUILD_FLAGS) $(POSIX_32BIT_FLAGS) -c -o $@ +carla_engine_osc__posix32.o: ../carla-engine/carla_engine_osc.cpp + $(CXX) $< $(POSIX_BUILD_FLAGS) $(POSIX_32BIT_FLAGS) -c -o $@ + carla_engine_thread__posix32.o: ../carla-engine/carla_engine_thread.cpp $(CXX) $< $(POSIX_BUILD_FLAGS) $(POSIX_32BIT_FLAGS) -c -o $@ @@ -240,6 +243,9 @@ carla_engine_jack__posix32.o: ../carla-engine/jack.cpp carla_plugin__posix32.o: ../carla-plugin/carla_plugin.cpp $(CXX) $< $(POSIX_BUILD_FLAGS) $(POSIX_32BIT_FLAGS) -c -o $@ +carla_plugin_thread__posix32.o: ../carla-plugin/carla_plugin_thread.cpp + $(CXX) $< $(POSIX_BUILD_FLAGS) $(POSIX_32BIT_FLAGS) -c -o $@ + ladspa__posix32.o: ../carla-plugin/ladspa.cpp $(CXX) $< $(POSIX_BUILD_FLAGS) $(POSIX_32BIT_FLAGS) -c -o $@ @@ -257,8 +263,8 @@ vst__posix32.o: ../carla-plugin/vst.cpp OBJS_POSIX64 = \ carla_bridge_plugin__posix64.o carla_bridge_osc__posix64.o \ - carla_engine__posix64.o carla_engine_thread__posix64.o carla_engine_jack__posix64.o \ - carla_plugin__posix64.o ladspa__posix64.o dssi__posix64.o lv2__posix64.o vst__posix64.o \ + carla_engine__posix64.o carla_engine_osc__posix64.o carla_engine_thread__posix64.o carla_engine_jack__posix64.o \ + carla_plugin__posix64.o carla_plugin_thread__posix64.o ladspa__posix64.o dssi__posix64.o lv2__posix64.o vst__posix64.o \ ../carla-lilv/carla_lilv_posix64.a ../carla-rtmempool/carla_rtmempool_posix64.a carla-bridge-posix64: $(OBJS_POSIX64) @@ -273,6 +279,9 @@ carla_bridge_osc__posix64.o: carla_bridge_osc.cpp carla_engine__posix64.o: ../carla-engine/carla_engine.cpp $(CXX) $< $(POSIX_BUILD_FLAGS) $(POSIX_64BIT_FLAGS) -c -o $@ +carla_engine_osc__posix64.o: ../carla-engine/carla_engine_osc.cpp + $(CXX) $< $(POSIX_BUILD_FLAGS) $(POSIX_64BIT_FLAGS) -c -o $@ + carla_engine_thread__posix64.o: ../carla-engine/carla_engine_thread.cpp $(CXX) $< $(POSIX_BUILD_FLAGS) $(POSIX_64BIT_FLAGS) -c -o $@ @@ -282,6 +291,9 @@ carla_engine_jack__posix64.o: ../carla-engine/jack.cpp carla_plugin__posix64.o: ../carla-plugin/carla_plugin.cpp $(CXX) $< $(POSIX_BUILD_FLAGS) $(POSIX_64BIT_FLAGS) -c -o $@ +carla_plugin_thread__posix64.o: ../carla-plugin/carla_plugin_thread.cpp + $(CXX) $< $(POSIX_BUILD_FLAGS) $(POSIX_64BIT_FLAGS) -c -o $@ + ladspa__posix64.o: ../carla-plugin/ladspa.cpp $(CXX) $< $(POSIX_BUILD_FLAGS) $(POSIX_64BIT_FLAGS) -c -o $@ @@ -299,8 +311,8 @@ vst__posix64.o: ../carla-plugin/vst.cpp OBJS_WIN32 = \ carla_bridge_plugin__win32.o carla_bridge_osc__win32.o \ - carla_engine__win32.o carla_engine_thread__win32.o carla_engine_jack__win32.o \ - carla_plugin__win32.o ladspa__win32.o dssi__win32.o lv2__win32.o vst__win32.o \ + carla_engine__win32.o carla_engine_osc__win32.o carla_engine_thread__win32.o carla_engine_jack__win32.o \ + carla_plugin__win32.o carla_plugin_thread__win32.o ladspa__win32.o dssi__win32.o lv2__win32.o vst__win32.o \ ../carla-lilv/carla_lilv_win32.a ../carla-rtmempool/carla_rtmempool_win32.a carla-bridge-win32.exe: $(OBJS_WIN32) ../carla-jackbridge/libcarla-jackbridge-win32.dll @@ -315,6 +327,9 @@ carla_bridge_osc__win32.o: carla_bridge_osc.cpp carla_engine__win32.o: ../carla-engine/carla_engine.cpp $(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_32BIT_FLAGS) -c -o $@ +carla_engine_osc__win32.o: ../carla-engine/carla_engine_osc.cpp + $(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_32BIT_FLAGS) -c -o $@ + carla_engine_thread__win32.o: ../carla-engine/carla_engine_thread.cpp $(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_32BIT_FLAGS) -c -o $@ @@ -324,6 +339,9 @@ carla_engine_jack__win32.o: ../carla-engine/jack.cpp carla_plugin__win32.o: ../carla-plugin/carla_plugin.cpp $(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_32BIT_FLAGS) -c -o $@ +carla_plugin_thread__win32.o: ../carla-plugin/carla_plugin_thread.cpp + $(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_32BIT_FLAGS) -c -o $@ + ladspa__win32.o: ../carla-plugin/ladspa.cpp $(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_32BIT_FLAGS) -c -o $@ @@ -341,8 +359,8 @@ vst__win32.o: ../carla-plugin/vst.cpp OBJS_WIN64 = \ carla_bridge_plugin__win64.o carla_bridge_osc__win64.o \ - carla_engine__win64.o carla_engine_thread__win64.o carla_engine_jack__win64.o \ - carla_plugin__win64.o ladspa__win64.o dssi__win64.o lv2__win64.o vst__win64.o \ + carla_engine__win64.o carla_engine_osc__win64.o carla_engine_thread__win64.o carla_engine_jack__win64.o \ + carla_plugin__win64.o carla_plugin_thread__win64.o ladspa__win64.o dssi__win64.o lv2__win64.o vst__win64.o \ ../carla-lilv/carla_lilv_win64.a ../carla-rtmempool/carla_rtmempool_win64.a carla-bridge-win64.exe: $(OBJS_WIN64) ../carla-jackbridge/libcarla-jackbridge-win64.dll @@ -357,6 +375,9 @@ carla_bridge_osc__win64.o: carla_bridge_osc.cpp carla_engine__win64.o: ../carla-engine/carla_engine.cpp $(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_64BIT_FLAGS) -c -o $@ +carla_engine_osc__win64.o: ../carla-engine/carla_engine_osc.cpp + $(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_64BIT_FLAGS) -c -o $@ + carla_engine_thread__win64.o: ../carla-engine/carla_engine_thread.cpp $(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_64BIT_FLAGS) -c -o $@ @@ -366,6 +387,9 @@ carla_engine_jack__win64.o: ../carla-engine/jack.cpp carla_plugin__win64.o: ../carla-plugin/carla_plugin.cpp $(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_64BIT_FLAGS) -c -o $@ +carla_plugin_thread__win64.o: ../carla-plugin/carla_plugin_thread.cpp + $(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_64BIT_FLAGS) -c -o $@ + ladspa__win64.o: ../carla-plugin/ladspa.cpp $(CXX) $< $(WIN_BUILD_FLAGS) $(WIN_64BIT_FLAGS) -c -o $@ diff --git a/c++/carla-bridge/carla_bridge_plugin.cpp b/c++/carla-bridge/carla_bridge_plugin.cpp index 776794e..20d09fd 100644 --- a/c++/carla-bridge/carla_bridge_plugin.cpp +++ b/c++/carla-bridge/carla_bridge_plugin.cpp @@ -37,12 +37,17 @@ static int qargc = 0; static char** qargv = nullptr; static bool qCloseNow = false; +static bool qSaveNow = false; -#if defined(Q_OS_UNIX) +#if defined(Q_OS_HAIKU) || defined(Q_OS_UNIX) void closeSignalHandler(int) { qCloseNow = true; } +void saveSignalHandler(int) +{ + qSaveNow = true; +} #elif defined(Q_OS_WIN) BOOL WINAPI closeSignalHandler(DWORD dwCtrlType) { @@ -58,9 +63,10 @@ BOOL WINAPI closeSignalHandler(DWORD dwCtrlType) void initSignalHandler() { -#if defined(Q_OS_UNIX) +#if defined(Q_OS_HAIKU) || defined(Q_OS_UNIX) struct sigaction sint; struct sigaction sterm; + struct sigaction susr1; sint.sa_handler = closeSignalHandler; sint.sa_flags = SA_RESTART; @@ -73,6 +79,12 @@ void initSignalHandler() sterm.sa_restorer = nullptr; sigemptyset(&sterm.sa_mask); sigaction(SIGTERM, &sterm, nullptr); + + susr1.sa_handler = saveSignalHandler; + susr1.sa_flags = SA_RESTART; + susr1.sa_restorer = nullptr; + sigemptyset(&susr1.sa_mask); + sigaction(SIGUSR1, &susr1, nullptr); #elif defined(Q_OS_WIN) SetConsoleCtrlHandler(closeSignalHandler, TRUE); #endif @@ -234,8 +246,9 @@ public: pluginGui = nullptr; m_client = this; - m_hasUI = false; m_doQuit = false; + m_hasUI = false; + m_qt4UI = false; m_needsResize = false; m_nextSize[0] = 0; @@ -334,7 +347,7 @@ public: if (plugin) plugin->showGui(true); - if (pluginGui) + if (pluginGui && m_qt4UI) pluginGui->show(); } @@ -343,7 +356,7 @@ public: qDebug("BridgePluginClient::hide()"); CARLA_ASSERT(pluginGui); - if (pluginGui) + if (pluginGui && m_qt4UI) pluginGui->hide(); if (plugin) @@ -371,6 +384,7 @@ public: return; m_hasUI = true; + m_qt4UI = true; pluginGui->setResizable(resizable); pluginGui->setTitle(plugin->name()); @@ -664,6 +678,12 @@ protected: if (qCloseNow) return quit(); + if (qSaveNow) + { + // TODO + qSaveNow = false; + } + if (event->timerId() == msgTimerGUI) { #if 0 @@ -711,6 +731,7 @@ private: bool m_doQuit; bool m_hasUI; + bool m_qt4UI; bool m_needsResize; int m_nextSize[2]; @@ -802,7 +823,7 @@ int main(int argc, char* argv[]) void* extraStuff = nullptr; #if 1 // TESTING - static const char* const dssiGUI = "/usr/lib/dssi/amsynth_dssi/amsynth_dssi_gtk"; + static const char* const dssiGUI = "/usr/lib/dssi/calf/calf_gtk"; extraStuff = (void*)dssiGUI; #endif diff --git a/c++/carla-engine/carla_engine.cpp b/c++/carla-engine/carla_engine.cpp index 4bf29a3..65d58c8 100644 --- a/c++/carla-engine/carla_engine.cpp +++ b/c++/carla-engine/carla_engine.cpp @@ -1212,9 +1212,9 @@ bool CarlaEngine::isOscBridgeRegistered() const } #endif -bool CarlaEngine::idleOsc() +void CarlaEngine::idleOsc() { - return m_osc.idle(); + m_osc.idle(); } const char* CarlaEngine::getOscServerPathTCP() const diff --git a/c++/carla-engine/carla_engine.hpp b/c++/carla-engine/carla_engine.hpp index 433ea9a..2cb5b93 100644 --- a/c++/carla-engine/carla_engine.hpp +++ b/c++/carla-engine/carla_engine.hpp @@ -769,7 +769,7 @@ public: /*! * Idle OSC. */ - bool idleOsc(); + void idleOsc(); /*! * Get OSC TCP server path. diff --git a/c++/carla-engine/carla_engine_osc.cpp b/c++/carla-engine/carla_engine_osc.cpp index db78192..0adc6fe 100644 --- a/c++/carla-engine/carla_engine_osc.cpp +++ b/c++/carla-engine/carla_engine_osc.cpp @@ -94,23 +94,17 @@ void CarlaEngineOsc::init(const char* const name) } } -bool CarlaEngineOsc::idle() +void CarlaEngineOsc::idle() { - bool msgReceived = false; - if (m_serverTCP) { - while (lo_server_recv_noblock(m_serverTCP, 25) != 0) - msgReceived = true; + while (lo_server_recv_noblock(m_serverTCP, 0) != 0) {} } if (m_serverUDP) { - while (lo_server_recv_noblock(m_serverUDP, 25) != 0) - msgReceived = true; + while (lo_server_recv_noblock(m_serverUDP, 0) != 0) {} } - - return !msgReceived; } void CarlaEngineOsc::close() diff --git a/c++/carla-engine/carla_engine_osc.hpp b/c++/carla-engine/carla_engine_osc.hpp index 12034ee..625713b 100644 --- a/c++/carla-engine/carla_engine_osc.hpp +++ b/c++/carla-engine/carla_engine_osc.hpp @@ -60,7 +60,7 @@ public: ~CarlaEngineOsc(); void init(const char* const name); - bool idle(); + void idle(); void close(); // ------------------------------------------------------------------- diff --git a/c++/carla-engine/carla_engine_thread.cpp b/c++/carla-engine/carla_engine_thread.cpp index 701c1a3..bd07d65 100644 --- a/c++/carla-engine/carla_engine_thread.cpp +++ b/c++/carla-engine/carla_engine_thread.cpp @@ -143,8 +143,8 @@ void CarlaEngineThread::run() } } - if (! engine->idleOsc()) - msleep(50); + engine->idleOsc(); + msleep(oscRegisted ? 40 : 50); } }