diff --git a/source/backend/engine/CarlaEngineNative.cpp b/source/backend/engine/CarlaEngineNative.cpp index ba12689e2..8ac9f610d 100644 --- a/source/backend/engine/CarlaEngineNative.cpp +++ b/source/backend/engine/CarlaEngineNative.cpp @@ -64,6 +64,7 @@ class CarlaEngineNativeUI : public CarlaExternalUI public: CarlaEngineNativeUI(CarlaEngine* const engine) : fEngine(engine), + fIsReady(false), leakDetector_CarlaEngineNativeUI() { carla_debug("CarlaEngineNativeUI::CarlaEngineNativeUI(%p)", engine); @@ -74,6 +75,11 @@ public: carla_debug("CarlaEngineNativeUI::~CarlaEngineNativeUI()"); } + bool isReady() const noexcept + { + return fIsReady; + } + protected: bool msgReceived(const char* const msg) noexcept override { @@ -531,6 +537,10 @@ protected: if (CarlaPlugin* const plugin = fEngine->getPlugin(pluginId)) plugin->showCustomUI(yesNo); } + else if (std::strcmp(msg, "ready") == 0) + { + fIsReady = true; + } else { carla_stderr("CarlaEngineNativeUI::msgReceived : %s", msg); @@ -550,6 +560,7 @@ protected: private: CarlaEngine* const fEngine; + bool fIsReady; CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaEngineNativeUI) }; @@ -1484,6 +1495,16 @@ protected: if (kIsPatchbay) patchbayRefresh(false); + + if (std::getenv("CARLA_PLUGIN_EMBED_WINID") != nullptr) + { + carla_stdout("Using Carla plugin embedded, waiting for it to be ready..."); + + for (; fUiServer.isPipeRunning() && ! fUiServer.isReady();) + fUiServer.idlePipe(); + + carla_stdout("Done!"); + } } else { diff --git a/source/native-plugins/resources/carla-plugin b/source/native-plugins/resources/carla-plugin index f017ad403..16a89d187 100755 --- a/source/native-plugins/resources/carla-plugin +++ b/source/native-plugins/resources/carla-plugin @@ -423,6 +423,8 @@ if LINUX and not config_UseQt5: self.embedInto(winId) self.show() + gui.send(["ready"]) + def addShortcutActions(self, actions): for action in actions: if not action.shortcut().isEmpty():