bool RunLoop::TimerBase::timerFired(void* data) { RunLoop::TimerBase* timer = static_cast<RunLoop::TimerBase*>(data); if (!timer->m_isRepeating) timer->m_timer = 0; timer->fired(); return timer->m_isRepeating ? ECORE_CALLBACK_RENEW : ECORE_CALLBACK_CANCEL; }
bool RunLoop::TimerBase::timerFired(void* data) { RunLoop::TimerBase* timer = static_cast<RunLoop::TimerBase*>(data); timer->fired(); if (!timer->m_isRepeating) { timer->m_timer = nullptr; return ECORE_CALLBACK_CANCEL; } return ECORE_CALLBACK_RENEW; }
RunLoop::TimerBase::TimerBase(RunLoop& runLoop) : m_runLoop(runLoop) , m_source(adoptGRef(g_source_new(&runLoopSourceFunctions, sizeof(GSource)))) { g_source_set_name(m_source.get(), "[WebKit] RunLoop::Timer work"); g_source_set_callback(m_source.get(), [](gpointer userData) -> gboolean { RunLoop::TimerBase* timer = static_cast<RunLoop::TimerBase*>(userData); timer->fired(); if (timer->m_isRepeating) timer->updateReadyTime(); return G_SOURCE_CONTINUE; }, this, nullptr); g_source_set_priority(m_source.get(), G_PRIORITY_HIGH + 30); g_source_attach(m_source.get(), m_runLoop.m_mainContext.get()); }