| @@ -37,17 +37,19 @@ | |||
| # undef override_defined | |||
| #endif | |||
| // Is this really needed? | |||
| // fails on renoise | |||
| struct ScopedDisplayLock { | |||
| ScopedDisplayLock() | |||
| { | |||
| #ifdef DISTRHO_OS_LINUX | |||
| #if 0 //def DISTRHO_OS_LINUX | |||
| XLockDisplay(fl_display); | |||
| #endif | |||
| } | |||
| ~ScopedDisplayLock() | |||
| { | |||
| #ifdef DISTRHO_OS_LINUX | |||
| #if 0 //def DISTRHO_OS_LINUX | |||
| XUnlockDisplay(fl_display); | |||
| #endif | |||
| } | |||
| @@ -86,7 +88,7 @@ public: | |||
| fWindowMutex(), | |||
| fNextUI(), | |||
| fDoNextUI(false), | |||
| fInitialized(false) | |||
| fThreadInitialized(false) | |||
| { | |||
| #ifdef DISTRHO_OS_LINUX | |||
| //XInitThreads(); | |||
| @@ -94,7 +96,7 @@ public: | |||
| startThread(); | |||
| for (; ! fInitialized;) | |||
| for (; ! fThreadInitialized;) | |||
| d_msleep(10); | |||
| } | |||
| @@ -158,8 +160,16 @@ public: | |||
| fNextUI.func = (NextUI::UiFunc)func; | |||
| fDoNextUI = true; | |||
| for (; fDoNextUI;) | |||
| d_msleep(10); | |||
| if (isThreadRunning() && ! shouldThreadExit()) | |||
| { | |||
| for (; fDoNextUI;) | |||
| d_msleep(10); | |||
| } | |||
| else | |||
| { | |||
| fNextUI.run(); | |||
| fDoNextUI = false; | |||
| } | |||
| return fNextUI.ui; | |||
| } | |||
| @@ -176,7 +186,7 @@ public: | |||
| fNextUI.ui = ui; | |||
| fDoNextUI = true; | |||
| if (isThreadRunning()) | |||
| if (isThreadRunning() && ! shouldThreadExit()) | |||
| { | |||
| for (; fDoNextUI;) | |||
| d_msleep(10); | |||
| @@ -212,7 +222,7 @@ private: | |||
| d_Mutex fWindowMutex; | |||
| NextUI fNextUI; | |||
| volatile bool fDoNextUI; | |||
| volatile bool fInitialized; | |||
| volatile bool fThreadInitialized; | |||
| /** @internal used by NtkWindow. */ | |||
| void addWindow(Fl_Double_Window* const window) | |||
| @@ -252,7 +262,7 @@ private: | |||
| #endif | |||
| } | |||
| fInitialized = true; | |||
| fThreadInitialized = true; | |||
| for (; ! shouldThreadExit();) | |||
| { | |||