X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/6ae5817707cf77c29ff070e76791cc4816946ec4..8ecfc549ce93bc353d6a64f43a0c25dcd65f860e:/lib/gdi/grc.cpp diff --git a/lib/gdi/grc.cpp b/lib/gdi/grc.cpp index 76c02d2d..c8af2457 100644 --- a/lib/gdi/grc.cpp +++ b/lib/gdi/grc.cpp @@ -119,7 +119,7 @@ void *gRC::thread() break; else if (o.opcode==gOpcode::notify) need_notify = 1; - else + else if(o.dc) { o.dc->exec(&o); // o.dc is a gDC* filled with grabref... so we must release it here @@ -139,24 +139,21 @@ void *gRC::thread() /* when the main thread is non-idle for a too long time without any display output, we want to display a spinner. */ - - struct timeval time; struct timespec timeout; - gettimeofday(&time, NULL); - timeout.tv_sec = time.tv_sec; - timeout.tv_nsec = time.tv_usec * 1000; - + clock_gettime(CLOCK_REALTIME, &timeout); + if (m_spinner_enabled) + { timeout.tv_nsec += 100*1000*1000; - else - timeout.tv_sec += 2; - /* yes, this is required. */ - if (timeout.tv_nsec > 1000*1000*1000) - { - timeout.tv_nsec -= 1000*1000*1000; - timeout.tv_sec++; + if (timeout.tv_nsec > 1000*1000*1000) + { + timeout.tv_nsec -= 1000*1000*1000; + timeout.tv_sec++; + } } + else + timeout.tv_sec += 2; int idle = 1; @@ -165,8 +162,6 @@ void *gRC::thread() if (eApp && !eApp->isIdle()) idle = 0; } - - pthread_mutex_unlock(&mutex); if (!idle) { @@ -176,6 +171,7 @@ void *gRC::thread() } else disableSpinner(); } + pthread_mutex_unlock(&mutex); #endif } } @@ -207,7 +203,8 @@ void gRC::enableSpinner() o.opcode = m_spinner_enabled ? gOpcode::incrementSpinner : gOpcode::enableSpinner; m_spinner_dc->exec(&o); m_spinner_enabled = 1; - + o.opcode = gOpcode::flush; + m_spinner_dc->exec(&o); } void gRC::disableSpinner() @@ -226,6 +223,8 @@ void gRC::disableSpinner() gOpcode o; o.opcode = gOpcode::disableSpinner; m_spinner_dc->exec(&o); + o.opcode = gOpcode::flush; + m_spinner_dc->exec(&o); } static int gPainter_instances; @@ -520,16 +519,6 @@ void gPainter::clippop() m_rc->submit(o); } -void gPainter::flush() -{ - if ( m_dc->islocked() ) - return; - gOpcode o; - o.opcode = gOpcode::flush; - o.dc = m_dc.grabRef(); - m_rc->submit(o); -} - void gPainter::waitVSync() { if ( m_dc->islocked() )