Browse Source

NTK fixes

gh-pages
falkTX 10 years ago
parent
commit
1b1b068389
2 changed files with 31 additions and 37 deletions
  1. +22
    -31
      dgl/ntk/NtkApp.hpp
  2. +9
    -6
      dgl/ntk/NtkWindow.hpp

+ 22
- 31
dgl/ntk/NtkApp.hpp View File

@@ -37,30 +37,19 @@
# undef override_defined
#endif

// Is this really needed?
// fails on renoise
struct ScopedDisplayLock {
ScopedDisplayLock()
{
#if 0 //def DISTRHO_OS_LINUX
XLockDisplay(fl_display);
#endif
}

~ScopedDisplayLock()
{
#if 0 //def DISTRHO_OS_LINUX
XUnlockDisplay(fl_display);
#endif
}
};

// -----------------------------------------------------------------------

namespace DISTRHO_NAMESPACE {
class UI;
class UI;
}

struct FlScopedLock {
FlScopedLock() { Fl::lock(); }
~FlScopedLock() { Fl::unlock(); }
};

// -----------------------------------------------------------------------

START_NAMESPACE_DGL

class NtkWindow;
@@ -232,7 +221,7 @@ private:
if (fWindows.size() == 0 && ! isThreadRunning())
startThread();

const d_MutexLocker sl(fWindowMutex);
const d_MutexLocker cml(fWindowMutex);
fWindows.push_back(window);
}

@@ -241,7 +230,7 @@ private:
{
DISTRHO_SAFE_ASSERT_RETURN(window != nullptr,);

const d_MutexLocker sl(fWindowMutex);
const d_MutexLocker cml(fWindowMutex);
fWindows.remove(window);

if (fWindows.size() == 0)
@@ -266,22 +255,24 @@ private:

for (; ! shouldThreadExit();)
{
if (fDoNextUI)
{
const ScopedDisplayLock csdl;
fNextUI.run();
fDoNextUI = false;
}
const FlScopedLock csl;

const ScopedDisplayLock csdl;
Fl::check();
Fl::flush();
if (fDoNextUI)
{
fNextUI.run();
fDoNextUI = false;
}

Fl::check();
Fl::flush();
}

d_msleep(20);
}

const d_MutexLocker sl(fWindowMutex);
const ScopedDisplayLock csdl;
const FlScopedLock csl;
const d_MutexLocker cml(fWindowMutex);

for (std::list<Fl_Double_Window*>::reverse_iterator rit = fWindows.rbegin(), rite = fWindows.rend(); rit != rite; ++rit)
{


+ 9
- 6
dgl/ntk/NtkWindow.hpp View File

@@ -166,20 +166,20 @@ public:
{
DISTRHO_SAFE_ASSERT_RETURN(callback != nullptr,);

if (fIdleCallbacks.size() == 0)
Fl::add_idle(_idleHandler, this);

fIdleCallbacks.push_back(callback);

if (fIdleCallbacks.size() == 1)
Fl::add_timeout(0.030, _idleHandler, this);
}

void removeIdleCallback(IdleCallback* const callback)
{
DISTRHO_SAFE_ASSERT_RETURN(callback != nullptr,);

fIdleCallbacks.remove(callback);
if (fIdleCallbacks.size() == 1)
Fl::remove_timeout(_idleHandler, this);

if (fIdleCallbacks.size() == 0)
Fl::remove_idle(_idleHandler, this);
fIdleCallbacks.remove(callback);
}

private:
@@ -203,6 +203,9 @@ private:
IdleCallback* const idleCallback(*it);
idleCallback->idleCallback();
}

if (fIdleCallbacks.size() > 0 && ! self->getApp().isQuiting())
Fl::repeat_timeout(0.030, _idleHandler, self);
}

DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(NtkWindow)


Loading…
Cancel
Save