fix spinner handling
authorAndreas Monzner <andreas.monzner@multimedia-labs.de>
Wed, 4 Jun 2008 20:43:40 +0000 (20:43 +0000)
committerAndreas Monzner <andreas.monzner@multimedia-labs.de>
Wed, 4 Jun 2008 20:43:40 +0000 (20:43 +0000)
lib/base/ebase.cpp
lib/gdi/grc.cpp

index 6121981194df5b4c9c8258791f3ddfeb1afebf46..62746f4be4ea144618b9ccc1054ea53015e9d103 100644 (file)
@@ -6,6 +6,7 @@
 
 #include <lib/base/eerror.h>
 #include <lib/base/elock.h>
+#include <lib/gdi/grc.h>
 
 eSocketNotifier::eSocketNotifier(eMainloop *context, int fd, int requested, bool startnow): context(*context), fd(fd), state(0), requested(requested)
 {
@@ -201,9 +202,14 @@ int eMainloop::processOneEvent(unsigned int twisted_timeout, PyObject **res, ePy
 
        if (this == eApp)
        {
+               gOpcode op;
+               op.dc = 0;
+               op.opcode = gOpcode::flush;
+               gRC::getInstance()->submit(op);
                Py_BEGIN_ALLOW_THREADS
                ret = ::poll(pfd, fdcount, poll_timeout);
                Py_END_ALLOW_THREADS
+               
        } else
                ret = ::poll(pfd, fdcount, poll_timeout);
 
index a46b218c3d74a4169b38a70c1c6bf6712fb6d7fc..c8af2457e1d67a7911ff1cb6430de257e4b0dbae 100644 (file)
@@ -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
                }
        }