diff --git a/rtgui/guiutils.cc b/rtgui/guiutils.cc index 01e95132b..977c07f42 100644 --- a/rtgui/guiutils.cc +++ b/rtgui/guiutils.cc @@ -43,20 +43,25 @@ IdleRegister::~IdleRegister() destroy(); } + +namespace { + +struct DataWrapper { + IdleRegister* const self; + GSourceFunc function; + gpointer data; +}; + +} // namespace + void IdleRegister::add(GSourceFunc function, gpointer data, gint priority) { - struct DataWrapper { - IdleRegister* const self; - GSourceFunc function; - gpointer data; - }; - const auto dispatch = [](gpointer data) -> gboolean { DataWrapper* const data_wrapper = static_cast(data); if (!data_wrapper->function(data_wrapper->data)) { data_wrapper->self->mutex.lock(); - g_source_remove(data_wrapper->self->ids[data_wrapper]); + //g_source_remove(data_wrapper->self->ids[data_wrapper]); data_wrapper->self->ids.erase(data_wrapper); data_wrapper->self->mutex.unlock(); @@ -83,6 +88,8 @@ void IdleRegister::destroy() mutex.lock(); for (const auto id : ids) { g_source_remove(id.second); + DataWrapper *w = static_cast(id.first); + delete w; } mutex.unlock(); }