17 #ifndef DISTRHO_EXTERNAL_WINDOW_HPP_INCLUDED
18 #define DISTRHO_EXTERNAL_WINDOW_HPP_INCLUDED
22 #ifndef DISTRHO_OS_WINDOWS
25 # include <sys/wait.h>
29 START_NAMESPACE_DISTRHO
94 DISTRHO_SAFE_ASSERT(!pData.visible);
107 #ifndef DISTRHO_OS_WINDOWS
109 return ext.isRunning();
121 #ifndef DISTRHO_OS_WINDOWS
122 return ext.inUse ? ext.isQuitting : pData.isQuitting;
124 return pData.isQuitting;
155 #if DISTRHO_PLUGIN_HAS_EMBED_UI
161 return pData.parentWindowHandle != 0;
171 return pData.visible;
180 return pData.isStandalone;
207 return pData.scaleFactor;
219 #if DISTRHO_PLUGIN_HAS_EMBED_UI
230 return pData.parentWindowHandle;
240 return pData.transientWinId;
263 pData.isQuitting =
true;
265 #ifndef DISTRHO_OS_WINDOWS
267 terminateAndWaitForExternalProcess();
298 DISTRHO_SAFE_ASSERT_UINT2_RETURN(width > 1 && height > 1, width, height,);
300 if (pData.width == width && pData.height == height)
304 pData.height = height;
315 if (pData.title == title)
340 if (pData.visible == visible)
342 pData.visible = visible;
352 if (pData.transientWinId == winId)
354 pData.transientWinId = winId;
362 bool startExternalProcess(
const char* args[])
364 #ifndef DISTRHO_OS_WINDOWS
367 return ext.start(args);
374 void terminateAndWaitForExternalProcess()
376 #ifndef DISTRHO_OS_WINDOWS
377 ext.isQuitting =
true;
378 ext.terminateAndWait();
394 return; (void)width; (void)height;
414 return; (void)visible;
427 friend class PluginWindow;
430 #ifndef DISTRHO_OS_WINDOWS
431 struct ExternalProcess {
446 const pid_t p = ::waitpid(pid,
nullptr, WNOHANG);
448 if (p == pid || (p == -1 && errno == ECHILD))
450 d_stdout(
"NOTICE: Child process exited while idle");
458 bool start(
const char* args[])
467 execvp(args[0], (
char**)args);
472 d_stderr(
"Could not start external ui");
480 void terminateAndWait()
485 d_stdout(
"Waiting for external process to stop,,,");
487 bool sendTerm =
true;
491 p = ::waitpid(pid,
nullptr, WNOHANG);
499 ::kill(pid, SIGTERM);
506 d_stdout(
"Done! (no such process)");
515 d_stdout(
"Done! (clean wait)");
530 uintptr_t parentWindowHandle;
531 uintptr_t transientWinId;
541 : parentWindowHandle(0),
557 END_NAMESPACE_DISTRHO
559 #endif // DISTRHO_EXTERNAL_WINDOW_HPP_INCLUDED
virtual bool isQuitting() const
Definition: ExternalWindow.hpp:119
virtual void transientParentWindowChanged(uintptr_t winId)
Definition: ExternalWindow.hpp:420
virtual bool isRunning() const
Definition: ExternalWindow.hpp:105
const char * getTitle() const noexcept
Definition: ExternalWindow.hpp:214
ExternalWindow()
Definition: ExternalWindow.hpp:80
virtual uintptr_t getNativeWindowHandle() const noexcept
Definition: ExternalWindow.hpp:140
Definition: String.hpp:30
void hide()
Definition: ExternalWindow.hpp:252
uintptr_t getParentWindowHandle() const noexcept
Definition: ExternalWindow.hpp:228
void show()
Definition: ExternalWindow.hpp:329
void setHeight(uint height)
Definition: ExternalWindow.hpp:286
virtual void titleChanged(const char *title)
Definition: ExternalWindow.hpp:401
Definition: DistrhoUI.hpp:71
Definition: ExternalWindow.hpp:72
void setVisible(bool visible)
Definition: ExternalWindow.hpp:338
void setTitle(const char *title)
Definition: ExternalWindow.hpp:313
virtual ~ExternalWindow()
Definition: ExternalWindow.hpp:92
virtual void visibilityChanged(bool visible)
Definition: ExternalWindow.hpp:411
uint getHeight() const noexcept
Definition: ExternalWindow.hpp:196
void setTransientWindowId(uintptr_t winId)
Definition: ExternalWindow.hpp:350
virtual void close()
Definition: ExternalWindow.hpp:261
bool isEmbed() const noexcept
Definition: ExternalWindow.hpp:159
uint getWidth() const noexcept
Definition: ExternalWindow.hpp:187
virtual void sizeChanged(uint width, uint height)
Definition: ExternalWindow.hpp:391
void setSize(uint width, uint height)
Definition: ExternalWindow.hpp:296
virtual void focus()
Definition: ExternalWindow.hpp:150
double getScaleFactor() const noexcept
Definition: ExternalWindow.hpp:205
uintptr_t getTransientWindowId() const noexcept
Definition: ExternalWindow.hpp:238
bool isStandalone() const noexcept
Definition: ExternalWindow.hpp:178
bool isVisible() const noexcept
Definition: ExternalWindow.hpp:169
void setWidth(uint width)
Definition: ExternalWindow.hpp:276
ExternalWindow(const PrivateData &data)
Definition: ExternalWindow.hpp:86