ecore: Make g_main_loop call idle enterers last
authorMike McCormack <mj.mccormack@samsung.com>
Tue, 12 Jul 2011 11:57:03 +0000 (11:57 +0000)
committerMike McCormack <mikem@ring3k.org>
Tue, 12 Jul 2011 11:57:03 +0000 (11:57 +0000)
Signed-off-by: Mike McCormack <mj.mccormack@samsung.com>
SVN revision: 61285

legacy/ecore/src/bin/ecore_test.c
legacy/ecore/src/lib/ecore/ecore_main.c

index 88c9ddc..45a9b24 100644 (file)
@@ -104,8 +104,8 @@ int main(int argc __UNUSED__, char **argv __UNUSED__)
 
    ecore_main_loop_begin();
 
-   /* FIXME?: glib main loop exits on an idle enterer */
-   //assert(called == idle_enterer_str);
+   /* glib main loop exits on an idle enterer */
+   assert(called == idle_enterer_str);
 
    ecore_shutdown();
    return 0;
index 5cf9f7d..2f108e5 100644 (file)
@@ -237,6 +237,7 @@ static GSource *ecore_glib_source;
 static guint ecore_glib_source_id;
 static GMainLoop* ecore_main_loop;
 static gboolean ecore_idling;
+static gboolean _ecore_glib_idle_enterer_called;
 static gboolean ecore_fds_ready;
 #endif
 
@@ -489,11 +490,11 @@ _ecore_main_gsource_prepare(GSource *source __UNUSED__, gint *next_time)
 
    in_main_loop++;
 
-   if (!ecore_idling)
+   if (!ecore_idling && !_ecore_glib_idle_enterer_called)
      {
-         /* when idling, busy loop checking the fds only */
-         _ecore_idle_enterer_call();
-         _ecore_throttle();
+        _ecore_idle_enterer_call();
+        _ecore_throttle();
+        _ecore_glib_idle_enterer_called = FALSE;
      }
 
    while (_ecore_signal_count_get()) _ecore_signal_call();
@@ -668,6 +669,10 @@ _ecore_main_gsource_dispatch(GSource *source __UNUSED__, GSourceFunc callback __
 
         while (_ecore_timer_call(_ecore_time_loop_time));
         _ecore_timer_cleanup();
+
+        _ecore_idle_enterer_call();
+        _ecore_throttle();
+        _ecore_glib_idle_enterer_called = TRUE;
      }
 
    in_main_loop--;