clean up engines - put idle entere handlign in core. same with lists. quyartz
authorraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Thu, 7 Jan 2010 05:29:06 +0000 (05:29 +0000)
committerraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Thu, 7 Jan 2010 05:29:06 +0000 (05:29 +0000)
looks broken to me. sdl looks like it could be much more complete - like
multiple sdl windows/instances.

anyway - allow rendering to be manual.

git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/ecore@44938 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/ecore_evas/Ecore_Evas.h
src/lib/ecore_evas/ecore_evas.c
src/lib/ecore_evas/ecore_evas_buffer.c
src/lib/ecore_evas/ecore_evas_directfb.c
src/lib/ecore_evas/ecore_evas_fb.c
src/lib/ecore_evas/ecore_evas_private.h
src/lib/ecore_evas/ecore_evas_quartz.c
src/lib/ecore_evas/ecore_evas_sdl.c
src/lib/ecore_evas/ecore_evas_win32.c
src/lib/ecore_evas/ecore_evas_wince.c
src/lib/ecore_evas/ecore_evas_x.c

index 5222f09..be48537 100644 (file)
@@ -321,6 +321,10 @@ EAPI void        ecore_evas_sticky_set(Ecore_Evas *ee, int sticky);
 EAPI int         ecore_evas_sticky_get(const Ecore_Evas *ee);
 EAPI void        ecore_evas_ignore_events_set(Ecore_Evas *ee, int ignore);
 EAPI int         ecore_evas_ignore_events_get(const Ecore_Evas *ee);
+EAPI void        ecore_evas_manual_render_set(Ecore_Evas *ee, int manual_render);
+EAPI int         ecore_evas_manual_render_get(const Ecore_Evas *ee);
+EAPI void        ecore_evas_manual_render(Ecore_Evas *ee);
+       
 EAPI Ecore_Window ecore_evas_window_get(const Ecore_Evas *ee);
 
 
index ca292ad..3019550 100644 (file)
@@ -22,6 +22,40 @@ static int _ecore_evas_init_count = 0;
 static Ecore_Fd_Handler *_ecore_evas_async_events_fd = NULL;
 static int _ecore_evas_async_events_fd_handler(void *data, Ecore_Fd_Handler *fd_handler);
 
+static Ecore_Idle_Enterer *ecore_evas_idle_enterer = NULL;
+static Ecore_Evas *ecore_evases = NULL;
+static int _ecore_evas_fps_debug = 0;
+
+static int
+_ecore_evas_idle_enter(void *data __UNUSED__)
+{
+   Ecore_Evas *ee;
+   double t1 = 0.0;
+   double t2 = 0.0;
+   int rend = 0;
+   
+   if (!ecore_evases) return 1;
+   if (_ecore_evas_fps_debug)
+     {
+        t1 = ecore_time_get();
+     }
+   EINA_INLIST_FOREACH(ecore_evases, ee)
+     {
+        if (!ee->manual_render)
+          {
+             if (ee->engine.func->fn_render)
+               rend |= ee->engine.func->fn_render(ee);
+          }
+     }
+   if (_ecore_evas_fps_debug)
+     {
+        t2 = ecore_time_get();
+        if (rend)
+          _ecore_evas_fps_debug_rendertime_add(t2 - t1);
+     }
+   return 1;
+}
+
 /**
  * Query if a particular renginering engine target has support
  * @param  engine The engine to check support for
@@ -178,6 +212,12 @@ ecore_evas_init(void)
                                                             ECORE_FD_READ,
                                                             _ecore_evas_async_events_fd_handler, NULL,
                                                             NULL, NULL);
+   
+   ecore_evas_idle_enterer = 
+     ecore_idle_enterer_add(_ecore_evas_idle_enter, NULL);
+   if (getenv("ECORE_EVAS_FPS_DEBUG")) _ecore_evas_fps_debug = 1;
+   if (_ecore_evas_fps_debug) _ecore_evas_fps_debug_init();
+   
    return _ecore_evas_init_count;
 
  shutdown_ecore:
@@ -197,6 +237,12 @@ ecore_evas_init(void)
 EAPI int
 ecore_evas_shutdown(void)
 {
+   while (ecore_evases) _ecore_evas_free(ecore_evases);
+
+   if (_ecore_evas_fps_debug) _ecore_evas_fps_debug_shutdown();
+   ecore_idle_enterer_del(ecore_evas_idle_enterer);
+   ecore_evas_idle_enterer = NULL;
+   
    if (--_ecore_evas_init_count != 0)
      return _ecore_evas_init_count;
 
@@ -2284,12 +2330,12 @@ EAPI void
 ecore_evas_withdrawn_set(Ecore_Evas *ee, int withdrawn)
 {
    if (!ECORE_MAGIC_CHECK(ee, ECORE_MAGIC_EVAS))
-   {
-      ECORE_MAGIC_FAIL(ee, ECORE_MAGIC_EVAS,
-         "ecore_evas_withdrawn_set");
-      return;
-   }
-
+     {
+        ECORE_MAGIC_FAIL(ee, ECORE_MAGIC_EVAS,
+                         "ecore_evas_withdrawn_set");
+        return;
+     }
+   
    IFC(ee, fn_withdrawn_set) (ee, withdrawn);
    IFE;
 }
@@ -2304,12 +2350,12 @@ EAPI int
 ecore_evas_withdrawn_get(const Ecore_Evas *ee)
 {
    if (!ECORE_MAGIC_CHECK(ee, ECORE_MAGIC_EVAS))
-   {
-      ECORE_MAGIC_FAIL(ee, ECORE_MAGIC_EVAS,
-         "ecore_evas_withdrawn_get");
-      return 0;
-   } else
-      return ee->prop.withdrawn ? 1:0;
+     {
+        ECORE_MAGIC_FAIL(ee, ECORE_MAGIC_EVAS,
+                         "ecore_evas_withdrawn_get");
+        return 0;
+     } else
+     return ee->prop.withdrawn ? 1:0;
 }
 
 /**
@@ -2323,12 +2369,12 @@ EAPI void
 ecore_evas_sticky_set(Ecore_Evas *ee, int sticky)
 {
    if (!ECORE_MAGIC_CHECK(ee, ECORE_MAGIC_EVAS))
-   {
-      ECORE_MAGIC_FAIL(ee, ECORE_MAGIC_EVAS,
-         "ecore_evas_sticky_set");
-      return;
-   }
-
+     {
+        ECORE_MAGIC_FAIL(ee, ECORE_MAGIC_EVAS,
+                         "ecore_evas_sticky_set");
+        return;
+     }
+   
    IFC(ee, fn_sticky_set) (ee, sticky);
    IFE;
 }
@@ -2344,12 +2390,12 @@ EAPI int
 ecore_evas_sticky_get(const Ecore_Evas *ee)
 {
    if (!ECORE_MAGIC_CHECK(ee, ECORE_MAGIC_EVAS))
-   {
-      ECORE_MAGIC_FAIL(ee, ECORE_MAGIC_EVAS,
-         "ecore_evas_sticky_get");
-      return 0;
-   } else
-      return ee->prop.sticky ? 1:0;
+     {
+        ECORE_MAGIC_FAIL(ee, ECORE_MAGIC_EVAS,
+                         "ecore_evas_sticky_get");
+        return 0;
+     } else
+     return ee->prop.sticky ? 1:0;
 }
 
 /**
@@ -2363,12 +2409,12 @@ EAPI void
 ecore_evas_ignore_events_set(Ecore_Evas *ee, int ignore)
 {
    if (!ECORE_MAGIC_CHECK(ee, ECORE_MAGIC_EVAS))
-   {
-      ECORE_MAGIC_FAIL(ee, ECORE_MAGIC_EVAS,
-         "ecore_evas_ignore_events_set");
-      return;
-   }
-
+     {
+        ECORE_MAGIC_FAIL(ee, ECORE_MAGIC_EVAS,
+                         "ecore_evas_ignore_events_set");
+        return;
+     }
+   
    IFC(ee, fn_ignore_events_set) (ee, ignore);
    IFE;
 }
@@ -2384,12 +2430,49 @@ EAPI int
 ecore_evas_ignore_events_get(const Ecore_Evas *ee)
 {
    if (!ECORE_MAGIC_CHECK(ee, ECORE_MAGIC_EVAS))
-   {
-      ECORE_MAGIC_FAIL(ee, ECORE_MAGIC_EVAS,
-         "ecore_evas_ignore_events_get");
-      return 0;
-   } else
-      return ee->ignore_events ? 1 : 0;
+     {
+        ECORE_MAGIC_FAIL(ee, ECORE_MAGIC_EVAS,
+                         "ecore_evas_ignore_events_get");
+        return 0;
+     }
+   return ee->ignore_events ? 1 : 0;
+}
+
+EAPI void
+ecore_evas_manual_render_set(Ecore_Evas *ee, int manual_render)
+{
+   if (!ECORE_MAGIC_CHECK(ee, ECORE_MAGIC_EVAS))
+     {
+        ECORE_MAGIC_FAIL(ee, ECORE_MAGIC_EVAS,
+                         "ecore_evas_manual_render_set");
+        return;
+     }
+   ee->manual_render = manual_render;
+}
+
+EAPI int
+ecore_evas_manual_render_get(const Ecore_Evas *ee)
+{
+   if (!ECORE_MAGIC_CHECK(ee, ECORE_MAGIC_EVAS))
+     {
+        ECORE_MAGIC_FAIL(ee, ECORE_MAGIC_EVAS,
+                         "ecore_evas_manual_render_get");
+        return 0;
+     }
+   return ee->manual_render ? 1 : 0;
+}
+
+EAPI void
+ecore_evas_manual_render(Ecore_Evas *ee)
+{
+   if (!ECORE_MAGIC_CHECK(ee, ECORE_MAGIC_EVAS))
+     {
+        ECORE_MAGIC_FAIL(ee, ECORE_MAGIC_EVAS,
+                         "ecore_evas_manual_render");
+        return;
+     }
+   if (ee->engine.func->fn_render)
+     ee->engine.func->fn_render(ee);
 }
 
 EAPI Ecore_Window
@@ -2492,6 +2575,14 @@ _ecore_evas_fps_debug_rendertime_add(double t)
 }
 
 void
+_ecore_evas_register(Ecore_Evas *ee)
+{
+   ee->registered = 1;
+   ecore_evases = (Ecore_Evas *)eina_inlist_prepend
+     (EINA_INLIST_GET(ecore_evases), EINA_INLIST_GET(ee));
+}
+
+void
 _ecore_evas_free(Ecore_Evas *ee)
 {
    if (ee->func.fn_pre_free) ee->func.fn_pre_free(ee);
@@ -2518,6 +2609,11 @@ _ecore_evas_free(Ecore_Evas *ee)
    if (ee->engine.idle_flush_timer)
      ecore_timer_del(ee->engine.idle_flush_timer);
    if (ee->engine.func->fn_free) ee->engine.func->fn_free(ee);
+   if (ee->registered)
+     {
+        ecore_evases = (Ecore_Evas *)eina_inlist_remove
+          (EINA_INLIST_GET(ecore_evases), EINA_INLIST_GET(ee));
+     }
    free(ee);
 }
 
index 5261609..33ab5b1 100644 (file)
 #ifdef BUILD_ECORE_EVAS_SOFTWARE_BUFFER
 static int _ecore_evas_init_count = 0;
 
-static int _ecore_evas_fps_debug = 0;
-
-static Ecore_Evas *ecore_evases = NULL;
-
 static int
 _ecore_evas_buffer_init(void)
 {
    _ecore_evas_init_count++;
    if (_ecore_evas_init_count > 1) return _ecore_evas_init_count;
-   if (getenv("ECORE_EVAS_FPS_DEBUG")) _ecore_evas_fps_debug = 1;
-   if (_ecore_evas_fps_debug) _ecore_evas_fps_debug_init();
    return _ecore_evas_init_count;
 }
 
@@ -39,8 +33,6 @@ _ecore_evas_buffer_free(Ecore_Evas *ee)
      }
    else
      {
-       ecore_evases = (Ecore_Evas *) eina_inlist_remove(EINA_INLIST_GET(ecore_evases), EINA_INLIST_GET(ee));
-
        free(ee->engine.buffer.pixels);
      }
    _ecore_evas_buffer_shutdown();
@@ -91,11 +83,6 @@ _ecore_evas_buffer_shutdown(void)
    _ecore_evas_init_count--;
    if (_ecore_evas_init_count == 0)
      {
-       while (ecore_evases)
-         {
-            _ecore_evas_free(ecore_evases);
-         }
-       if (_ecore_evas_fps_debug) _ecore_evas_fps_debug_shutdown();
      }
    if (_ecore_evas_init_count < 0) _ecore_evas_init_count = 0;
    return _ecore_evas_init_count;
@@ -372,7 +359,7 @@ _ecore_evas_buffer_cb_hide(void *data, Evas *e __UNUSED__, Evas_Object *obj __UN
    if (ee->func.fn_hide) ee->func.fn_hide(ee);
 }
 
-static const Ecore_Evas_Engine_Func _ecore_buffer_engine_func =
+static Ecore_Evas_Engine_Func _ecore_buffer_engine_func =
 {
    _ecore_evas_buffer_free,
      NULL,
@@ -418,7 +405,9 @@ static const Ecore_Evas_Engine_Func _ecore_buffer_engine_func =
      NULL,
      NULL,
      NULL,
-     NULL
+     NULL,
+     
+     NULL // render
 };
 #endif
 
@@ -499,7 +488,9 @@ ecore_evas_buffer_new(int w, int h)
 
    evas_event_feed_mouse_in(ee->evas, 0, NULL);
 
-   ecore_evases = (Ecore_Evas *) eina_inlist_prepend(EINA_INLIST_GET(ecore_evases), EINA_INLIST_GET(ee));
+   ee->engine.func->fn_render = _ecore_evas_buffer_render;
+   _ecore_evas_register(ee);
+   
    return ee;
 #else
    return NULL;
@@ -636,6 +627,9 @@ ecore_evas_object_image_new(Ecore_Evas *ee_target)
    evas_key_lock_add(ee->evas, "Scroll_Lock");
 
    ee_target->sub_ecore_evas = eina_list_append(ee_target->sub_ecore_evas, ee);
+   
+   ee->engine.func->fn_render = _ecore_evas_buffer_render;
+   
    return o;
 #else
    return NULL;
index 2ae6e3e..e301d41 100644 (file)
 
 #ifdef BUILD_ECORE_EVAS_DIRECTFB
 static int _ecore_evas_init_count = 0;
-static int _ecore_evas_fps_debug = 0;
 static Ecore_Event_Handler *ecore_evas_event_handlers[13];
 
-static Ecore_Evas *ecore_evases = NULL;
 static Eina_Hash *ecore_evases_hash = NULL;
 
-static Ecore_Idle_Enterer *ecore_evas_directfb_idle_enterer = NULL;
-
 static void
 _ecore_evas_directfb_render(Ecore_Evas *ee)
 {
@@ -51,28 +47,6 @@ _ecore_evas_directfb_render(Ecore_Evas *ee)
    if (ee->func.fn_post_render) ee->func.fn_post_render(ee);
 }
 
-static int
-_ecore_evas_directfb_idle_enter(void *data __UNUSED__)
-{
-   Ecore_Evas *ee;
-   double t1 = 0.0;
-   double t2 = 0.0;
-
-   if (!ecore_evases) return 1;
-   if (_ecore_evas_fps_debug)
-     {
-       t1 = ecore_time_get();
-     }
-   EINA_INLIST_FOREACH(ecore_evases, ee)
-       _ecore_evas_directfb_render(ee);
-   if (_ecore_evas_fps_debug)
-     {
-       t2 = ecore_time_get();
-       _ecore_evas_fps_debug_rendertime_add(t2 - t1);
-     }
-   return 1;
-}
-
 static char *
 _ecore_evas_directfb_winid_str_get(Ecore_X_Window win)
 {
@@ -258,12 +232,8 @@ _ecore_evas_directfb_shutdown(void)
      {
        int i;
 
-       while (ecore_evases) _ecore_evas_free(ecore_evases);
        for (i = 0; i < 8; i++)
          ecore_event_handler_del(ecore_evas_event_handlers[i]);
-       ecore_idle_enterer_del(ecore_evas_directfb_idle_enterer);
-       ecore_evas_directfb_idle_enterer = NULL;
-       if (_ecore_evas_fps_debug) _ecore_evas_fps_debug_shutdown();
      }
    if (_ecore_evas_init_count < 0) _ecore_evas_init_count = 0;
    return _ecore_evas_init_count;
@@ -278,9 +248,6 @@ _ecore_evas_directfb_init(void)
 {
    _ecore_evas_init_count++;
    if (_ecore_evas_init_count > 1) return _ecore_evas_init_count;
-   if (getenv("ECORE_EVAS_FPS_DEBUG")) _ecore_evas_fps_debug = 1;
-   ecore_evas_directfb_idle_enterer = ecore_idle_enterer_add(_ecore_evas_directfb_idle_enter, NULL);
-   if (_ecore_evas_fps_debug) _ecore_evas_fps_debug_init();
 
    ecore_evas_event_handlers[0]  = ecore_event_handler_add(ECORE_DIRECTFB_EVENT_KEY_DOWN, _ecore_evas_directfb_event_key_down, NULL);
    ecore_evas_event_handlers[1]  = ecore_event_handler_add(ECORE_DIRECTFB_EVENT_KEY_UP, _ecore_evas_directfb_event_key_up, NULL);
@@ -307,7 +274,6 @@ _ecore_evas_directfb_free(Ecore_Evas *ee)
 {
    eina_hash_del(ecore_evases_hash, _ecore_evas_directfb_winid_str_get(ee->engine.directfb.window->id), ee);
    ecore_directfb_window_free(ee->engine.directfb.window);
-   ecore_evases = (Ecore_Evas *) eina_inlist_remove(EINA_INLIST_GET(ecore_evases), EINA_INLIST_GET(ee));
    _ecore_evas_directfb_shutdown();
    ecore_directfb_shutdown();
 }
@@ -469,7 +435,7 @@ _ecore_evas_directfb_window_get(const Ecore_Evas *ee)
 #endif
 
 #ifdef BUILD_ECORE_EVAS_DIRECTFB
-static const Ecore_Evas_Engine_Func _ecore_directfb_engine_func =
+static Ecore_Evas_Engine_Func _ecore_directfb_engine_func =
 {
    _ecore_evas_directfb_free,  /* free an ecore_evas */
      NULL,                             /* cb resize */
@@ -515,7 +481,9 @@ static const Ecore_Evas_Engine_Func _ecore_directfb_engine_func =
      NULL,                             /* withdrawn */
      NULL,                             /* sticky */
      NULL,                              /* ignore events */
-     NULL                               /* alpha */
+     NULL,                              /* alpha */
+     
+     NULL // render
 };
 #endif
 
@@ -572,7 +540,10 @@ ecore_evas_directfb_new(const char *disp_name, int windowed, int x, int y, int w
        einfo->info.surface = window->surface;
        evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo);
      }
-   ecore_evases = (Ecore_Evas *) eina_inlist_prepend(EINA_INLIST_GET(ecore_evases), EINA_INLIST_GET(ee));
+   
+   ee->engine.func->fn_render = _ecore_evas_directfb_render;
+   _ecore_evas_register(ee);
+   
    if (!ecore_evases_hash)
      ecore_evases_hash = eina_hash_string_superfast_new(NULL);
    eina_hash_add(ecore_evases_hash, _ecore_evas_directfb_winid_str_get(ee->engine.directfb.window->id), ee);
index cafc7d6..9758560 100644 (file)
 #ifdef BUILD_ECORE_EVAS_FB
 static int _ecore_evas_init_count = 0;
 
-static int _ecore_evas_fps_debug = 0;
 static char *ecore_evas_default_display = "0";
 static Eina_List *ecore_evas_input_devices = NULL;
-static Ecore_Evas *ecore_evases = NULL;
 static Ecore_Event_Handler *ecore_evas_event_handlers[6] = {NULL, NULL, NULL, NULL, NULL, NULL};
-static Ecore_Idle_Enterer *ecore_evas_idle_enterer = NULL;
 
 static void
 _ecore_evas_mouse_move_process_fb(Ecore_Evas *ee, int x, int y, unsigned int timestamp)
@@ -67,10 +64,12 @@ _ecore_evas_mouse_move_process_fb(Ecore_Evas *ee, int x, int y, unsigned int tim
      evas_event_feed_mouse_move(ee->evas, y, (fbw - ee->w) + ee->w - x - 1, timestamp, NULL);
 }
 
+static Ecore_Evas *fb_ee = NULL;
+
 static Ecore_Evas *
 _ecore_evas_fb_match(void)
 {
-   return ecore_evases;
+   return fb_ee;
 }
 
 static void
@@ -80,8 +79,7 @@ _ecore_evas_fb_lose(void *data __UNUSED__)
    Eina_List *ll;
    Ecore_Fb_Input_Device *dev;
 
-   EINA_INLIST_FOREACH(ecore_evases, ee)
-       ee->visible = 0;
+   if (fb_ee) fb_ee->visible = 0;
 
    EINA_LIST_FOREACH(ecore_evas_input_devices, ll, dev)
      ecore_fb_input_device_listen(dev, 0);
@@ -94,8 +92,10 @@ _ecore_evas_fb_gain(void *data __UNUSED__)
    Eina_List *ll;
    Ecore_Fb_Input_Device *dev;
 
-   EINA_INLIST_FOREACH(ecore_evases,ee)
+   if (fb_ee) 
      {
+        ee = fb_ee;
+        
        ee->visible = 1;
        if ((ee->rotation == 90) || (ee->rotation == 270))
          evas_damage_rectangle_add(ee->evas, 0, 0, ee->h, ee->w);
@@ -191,53 +191,39 @@ _ecore_evas_event_mouse_wheel(void *data __UNUSED__, int type __UNUSED__, void *
 }
 
 static int
-_ecore_evas_idle_enter(void *data __UNUSED__)
+_ecore_evas_fb_render(Ecore_Evas *ee)
 {
-   Ecore_Evas *ee;
-   double t1 = 0.0;
-   double t2 = 0.0;
-
-   if (!ecore_evases) return 1;
-   if (_ecore_evas_fps_debug)
-     {
-       t1 = ecore_time_get();
-     }
-   EINA_INLIST_FOREACH(ecore_evases, ee)
+   int rend = 0;
+   
+   if (ee->visible)
      {
-       if (ee->visible)
-         {
-            Eina_List *updates;
-
+        Eina_List *updates;
+        
 #ifdef BUILD_ECORE_EVAS_SOFTWARE_BUFFER
-            Eina_List *ll;
-            Ecore_Evas *ee2;
+        Eina_List *ll;
+        Ecore_Evas *ee2;
 #endif
-            if (ee->func.fn_pre_render) ee->func.fn_pre_render(ee);
+        if (ee->func.fn_pre_render) ee->func.fn_pre_render(ee);
 #ifdef BUILD_ECORE_EVAS_SOFTWARE_BUFFER
-            EINA_LIST_FOREACH(ee->sub_ecore_evas, ll, ee2)
-              {
-                 if (ee2->func.fn_pre_render) ee2->func.fn_pre_render(ee2);
-                 _ecore_evas_buffer_render(ee2);
-                 if (ee2->func.fn_post_render) ee2->func.fn_post_render(ee2);
-              }
+        EINA_LIST_FOREACH(ee->sub_ecore_evas, ll, ee2)
+          {
+             if (ee2->func.fn_pre_render) ee2->func.fn_pre_render(ee2);
+             _ecore_evas_buffer_render(ee2);
+             if (ee2->func.fn_post_render) ee2->func.fn_post_render(ee2);
+          }
 #endif
-            updates = evas_render_updates(ee->evas);
-            if (updates)
-              {
-                 evas_render_updates_free(updates);
-                 _ecore_evas_idle_timeout_update(ee);
-              }
-            if (ee->func.fn_post_render) ee->func.fn_post_render(ee);
-         }
-       else
-         evas_norender(ee->evas);
+        updates = evas_render_updates(ee->evas);
+        if (updates)
+          {
+             evas_render_updates_free(updates);
+             _ecore_evas_idle_timeout_update(ee);
+             rend = 1;
+          }
+        if (ee->func.fn_post_render) ee->func.fn_post_render(ee);
      }
-   if (_ecore_evas_fps_debug)
-     {
-       t2 = ecore_time_get();
-       _ecore_evas_fps_debug_rendertime_add(t2 - t1);
-     }
-   return 1;
+   else
+     evas_norender(ee->evas);
+   return rend;
 }
 
 static int
@@ -254,9 +240,6 @@ _ecore_evas_fb_init(int w, int h)
    _ecore_evas_init_count++;
    if (_ecore_evas_init_count > 1) return _ecore_evas_init_count;
 
-   if (getenv("ECORE_EVAS_FPS_DEBUG")) _ecore_evas_fps_debug = 1;
-   ecore_evas_idle_enterer = ecore_idle_enterer_add(_ecore_evas_idle_enter, NULL);
-   if (_ecore_evas_fps_debug) _ecore_evas_fps_debug_init();
    /* register all input devices */
    input_dir = opendir("/dev/input/");
    if (!input_dir) return _ecore_evas_init_count;
@@ -322,7 +305,7 @@ _ecore_evas_fb_init(int w, int h)
 static void
 _ecore_evas_fb_free(Ecore_Evas *ee)
 {
-   ecore_evases = (Ecore_Evas *) eina_inlist_remove(EINA_INLIST_GET(ecore_evases), EINA_INLIST_GET(ee));
+   if (fb_ee == ee) fb_ee = NULL;
    _ecore_evas_fb_shutdown();
    ecore_fb_shutdown();
 }
@@ -521,19 +504,15 @@ _ecore_evas_fb_shutdown(void)
      {
        int i;
 
-       while (ecore_evases) _ecore_evas_free(ecore_evases);
        for (i = 0; i < 5; i++)
          ecore_event_handler_del(ecore_evas_event_handlers[i]);
-       ecore_idle_enterer_del(ecore_evas_idle_enterer);
-       ecore_evas_idle_enterer = NULL;
-       if (_ecore_evas_fps_debug) _ecore_evas_fps_debug_shutdown();
        ecore_fb_ts_shutdown();
      }
    if (_ecore_evas_init_count < 0) _ecore_evas_init_count = 0;
    return _ecore_evas_init_count;
 }
 
-static const Ecore_Evas_Engine_Func _ecore_fb_engine_func =
+static Ecore_Evas_Engine_Func _ecore_fb_engine_func =
 {
    _ecore_evas_fb_free,
      NULL,
@@ -579,7 +558,9 @@ static const Ecore_Evas_Engine_Func _ecore_fb_engine_func =
      NULL,
      NULL,
      NULL,
-     NULL
+     NULL,
+     
+     NULL // render
 };
 #endif
 
@@ -673,7 +654,10 @@ ecore_evas_fb_new(const char *disp_name, int rotation, int w, int h)
 
    evas_event_feed_mouse_in(ee->evas, (unsigned int)((unsigned long long)(ecore_time_get() * 1000.0) & 0xffffffff), NULL);
 
-   ecore_evases = (Ecore_Evas *) eina_inlist_prepend(EINA_INLIST_GET(ecore_evases), EINA_INLIST_GET(ee));
+   ee->engine.func->fn_render = _ecore_evas_buffer_render;
+   _ecore_evas_register(ee);
+   fb_ee = ee;
+   
    return ee;
 }
 #else
index d3c9b38..0bbf36f 100644 (file)
@@ -183,6 +183,8 @@ struct _Ecore_Evas_Engine_Func
    void        (*fn_sticky_set) (Ecore_Evas *ee, int sticky);
    void        (*fn_ignore_events_set) (Ecore_Evas *ee, int ignore);
    void        (*fn_alpha_set) (Ecore_Evas *ee, int alpha);
+
+   int         (*fn_render) (Ecore_Evas *ee);
 };
 
 struct _Ecore_Evas_Engine
@@ -331,6 +333,8 @@ struct _Ecore_Evas
    Eina_List *sub_ecore_evas;
 
    unsigned char ignore_events : 1;
+   unsigned char manual_render : 1;
+   unsigned char registered : 1;
 };
 
 #ifdef BUILD_ECORE_EVAS_X11
@@ -356,6 +360,7 @@ int _ecore_evas_wince_shutdown(void);
 void _ecore_evas_fps_debug_init(void);
 void _ecore_evas_fps_debug_shutdown(void);
 void _ecore_evas_fps_debug_rendertime_add(double t);
+void _ecore_evas_register(Ecore_Evas *ee);
 void _ecore_evas_free(Ecore_Evas *ee);
 void _ecore_evas_idle_timeout_update(Ecore_Evas *ee);
 void _ecore_evas_mouse_move_process(Ecore_Evas *ee, int x, int y, unsigned int timestamp);
index 0b29f75..dcc43eb 100644 (file)
@@ -21,6 +21,8 @@
 #include "Ecore_Quartz.h"
 #include "Evas_Engine_Quartz.h"
 
+// FIXME: this engine has lots of problems. only 1 window at a time, drawRect looks wrong, doesnt handle resizes and more
+
 static int                      _ecore_evas_init_count = 0;
 static Ecore_Evas               *ecore_evases = NULL;
 static Ecore_Event_Handler      *ecore_evas_event_handlers[4] = {
@@ -292,7 +294,7 @@ _ecore_evas_object_cursor_set(Ecore_Evas *ee, Evas_Object *obj, int layer, int h
    evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL, _ecore_evas_object_cursor_del, ee);
 }
 
-static const Ecore_Evas_Engine_Func _ecore_quartz_engine_func =
+static Ecore_Evas_Engine_Func _ecore_quartz_engine_func =
 {
    _ecore_evas_quartz_free,
    NULL,
@@ -336,7 +338,9 @@ static const Ecore_Evas_Engine_Func _ecore_quartz_engine_func =
    NULL,
    NULL,
    NULL,
-   NULL
+   NULL,
+     
+     NULL // render
 };
 #endif
 
index d16fe91..19fedbf 100644 (file)
 #include "ecore_evas_private.h"
 #include "Ecore_Evas.h"
 
+// fixme: 1 sdl window only at a time? seems wrong
+
 #ifdef BUILD_ECORE_EVAS_SOFTWARE_SDL
 
 /* static char *ecore_evas_default_display = "0"; */
 /* static Ecore_List *ecore_evas_input_devices = NULL; */
 
 static int                      _ecore_evas_init_count = 0;
-#ifndef _WIN32
-static int                      _ecore_evas_fps_debug = 0;
-#endif /* _WIN32 */
-static Ecore_Evas               *ecore_evases = NULL;
+
+static Ecore_Evas               *sdl_ee = NULL;
 static Ecore_Event_Handler      *ecore_evas_event_handlers[4] = {
    NULL, NULL, NULL, NULL
 };
-static Ecore_Idle_Enterer       *ecore_evas_idle_enterer = NULL;
-static Ecore_Poller             *ecore_evas_event = NULL;
 
 static const char               *ecore_evas_sdl_default = "EFL SDL";
 
 static Ecore_Evas *
 _ecore_evas_sdl_match(void)
 {
-   return ecore_evases;
+   return sdl_ee;
 }
 
 static int
@@ -99,7 +97,7 @@ _ecore_evas_sdl_event_video_expose(void *data __UNUSED__, int type __UNUSED__, v
    return 0;
 }
 
-static void
+static int
 _ecore_evas_render(Ecore_Evas *ee)
 {
    Eina_List *updates;
@@ -110,63 +108,44 @@ _ecore_evas_render(Ecore_Evas *ee)
        evas_render_updates_free(updates);
        _ecore_evas_idle_timeout_update(ee);
      }
+   return (int)updates;
 }
 
 static int
-_ecore_evas_idle_enter(void *data __UNUSED__)
+ecore_evas_sdl_render(Ecore_Evas *ee)
 {
-   Ecore_Evas  *ee;
-   double       t1 = 0.0;
-   double       t2 = 0.0;
-
-   if (!ecore_evases) return 1;
-#ifndef _WIN32
-   if (_ecore_evas_fps_debug)
-     {
-       t1 = ecore_time_get();
-     }
-#endif /* _WIN32 */
-   EINA_INLIST_FOREACH(ecore_evases, ee)
-     {
+   int rend = 0;
+   
 #ifdef BUILD_ECORE_EVAS_SOFTWARE_BUFFER
-       Eina_List *ll;
-       Ecore_Evas *ee2;
-
-       EINA_LIST_FOREACH(ee->sub_ecore_evas, ll, ee2)
-         {
-            if (ee2->func.fn_pre_render) ee2->func.fn_pre_render(ee2);
-            _ecore_evas_buffer_render(ee2);
-            if (ee2->func.fn_post_render) ee2->func.fn_post_render(ee2);
-         }
-#endif
-
-       if (ee->func.fn_pre_render) ee->func.fn_pre_render(ee);
-
-       if (ee->prop.avoid_damage) _ecore_evas_render(ee);
-       else if ((ee->visible) ||
-                ((ee->should_be_visible) && (ee->prop.fullscreen)) ||
-                ((ee->should_be_visible) && (ee->prop.override)))
-         _ecore_evas_render(ee);
-       else
-         evas_norender(ee->evas);
-
-       if (ee->func.fn_post_render) ee->func.fn_post_render(ee);
-     }
-#ifndef _WIN32
-   if (_ecore_evas_fps_debug)
+   Eina_List *ll;
+   Ecore_Evas *ee2;
+   
+   EINA_LIST_FOREACH(ee->sub_ecore_evas, ll, ee2)
      {
-       t2 = ecore_time_get();
-       _ecore_evas_fps_debug_rendertime_add(t2 - t1);
+        if (ee2->func.fn_pre_render) ee2->func.fn_pre_render(ee2);
+        _ecore_evas_buffer_render(ee2);
+        if (ee2->func.fn_post_render) ee2->func.fn_post_render(ee2);
      }
-#endif /* _WIN32 */
-   return 1;
+#endif
+   
+   if (ee->func.fn_pre_render) ee->func.fn_pre_render(ee);
+   
+   if (ee->prop.avoid_damage) rend = _ecore_evas_render(ee);
+   else if ((ee->visible) ||
+            ((ee->should_be_visible) && (ee->prop.fullscreen)) ||
+            ((ee->should_be_visible) && (ee->prop.override)))
+     rend = _ecore_evas_render(ee);
+   else
+     evas_norender(ee->evas);
+   
+   if (ee->func.fn_post_render) ee->func.fn_post_render(ee);
+   return rend;
 }
 
 static int
 _ecore_evas_sdl_event(void *data __UNUSED__)
 {
    ecore_sdl_feed_events();
-
    return 1;
 }
 
@@ -179,7 +158,10 @@ _ecore_evas_sdl_init(int w __UNUSED__, int h __UNUSED__)
 #ifndef _WIN32
    if (getenv("ECORE_EVAS_FPS_DEBUG")) _ecore_evas_fps_debug = 1;
 #endif /* _WIN32 */
-   ecore_evas_idle_enterer = ecore_idle_enterer_add(_ecore_evas_idle_enter, NULL);
+   // this is pretty bad: poller? and set poll time? pol time is meant to be 
+   // adjustable for things like polling battery state, or amoutn of spare
+   // memory etc.
+   // 
    ecore_evas_event = ecore_poller_add(ECORE_POLLER_CORE, 1, _ecore_evas_sdl_event, NULL);
    ecore_poller_poll_interval_set(ECORE_POLLER_CORE, 0.006);
 #ifndef _WIN32
@@ -204,13 +186,9 @@ _ecore_evas_sdl_shutdown(void)
      {
        int i;
 
-        while (ecore_evases) _ecore_evas_free(ecore_evases);
-
         for (i = 0; i < sizeof (ecore_evas_event_handlers) / sizeof (Ecore_Event_Handler*); i++)
          ecore_event_handler_del(ecore_evas_event_handlers[i]);
        ecore_event_evas_shutdown();
-       ecore_idle_enterer_del(ecore_evas_idle_enterer);
-       ecore_evas_idle_enterer = NULL;
         ecore_poller_del(ecore_evas_event);
         ecore_evas_event = NULL;
 #ifndef _WIN32
@@ -224,7 +202,8 @@ _ecore_evas_sdl_shutdown(void)
 static void
 _ecore_evas_sdl_free(Ecore_Evas *ee)
 {
-   ecore_evases = (Ecore_Evas *) eina_inlist_remove(EINA_INLIST_GET(ecore_evases), EINA_INLIST_GET(ee));
+   if (sdl_ee == ee) sdl_ee = NULL;
+   
    ecore_event_window_unregister(0);
    _ecore_evas_sdl_shutdown();
    ecore_sdl_shutdown();
@@ -300,7 +279,7 @@ _ecore_evas_object_cursor_set(Ecore_Evas *ee, Evas_Object *obj, int layer, int h
    evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL, _ecore_evas_object_cursor_del, ee);
 }
 
-static const Ecore_Evas_Engine_Func _ecore_sdl_engine_func =
+static Ecore_Evas_Engine_Func _ecore_sdl_engine_func =
 {
    _ecore_evas_sdl_free,
    NULL,
@@ -346,7 +325,9 @@ static const Ecore_Evas_Engine_Func _ecore_sdl_engine_func =
    NULL,
    NULL,
    NULL,
-   NULL
+   NULL,
+     
+     NULL // render
 };
 
 static Ecore_Evas*
@@ -423,7 +404,11 @@ _ecore_evas_internal_sdl_new(int rmethod, const char* name, int w, int h, int fu
 
    SDL_ShowCursor(SDL_DISABLE);
 
-   ecore_evases = (Ecore_Evas *) eina_inlist_prepend(EINA_INLIST_GET(ecore_evases), EINA_INLIST_GET(ee));
+   ee->engine.func->fn_render = _ecore_evas_sdl_render;
+   _ecore_evas_register(ee);
+   
+   sdl_ee = ee;
+   
    return ee;
 }
 #endif
index bbf7db9..0fb92e1 100644 (file)
 #define ECORE_EVAS_EVENT_COUNT 8
 
 static int _ecore_evas_init_count = 0;
-static int _ecore_evas_fps_debug  = 0;
 
 static Ecore_Event_Handler *ecore_evas_event_handlers[ECORE_EVAS_EVENT_COUNT];
-static Ecore_Idle_Enterer  *ecore_evas_idle_enterer = NULL;
-static Ecore_Evas          *ecore_evases = NULL;
 
 static int _ecore_evas_win32_event_mouse_in(void *data __UNUSED__, int type __UNUSED__, void *event);
 
@@ -50,10 +47,11 @@ static int _ecore_evas_win32_event_window_delete_request(void *data __UNUSED__,
 
 /* Private functions */
 
-static void
+static int
 _ecore_evas_win32_render(Ecore_Evas *ee)
 {
-   Eina_List *updates;
+   int rend = 0;
+   Eina_List *updates = NULL;
 #ifdef BUILD_ECORE_EVAS_SOFTWARE_BUFFER
    Eina_List *ll;
    Ecore_Evas *ee2;
@@ -88,31 +86,9 @@ _ecore_evas_win32_render(Ecore_Evas *ee)
      }
    else
      evas_norender(ee->evas);
+   if (updates) rend = 1;
    if (ee->func.fn_post_render) ee->func.fn_post_render(ee);
-}
-
-static int
-_ecore_evas_win32_idle_enter(void *data __UNUSED__)
-{
-   Ecore_Evas *ee;
-   double       t1 = 0.0;
-   double       t2 = 0.0;
-
-   if (!ecore_evases) return 1;
-   if (_ecore_evas_fps_debug)
-     {
-        t1 = ecore_time_get();
-     }
-   EINA_INLIST_FOREACH(ecore_evases, ee)
-        _ecore_evas_win32_render(ee);
-
-   /*    ecore_x_flush(); */
-   if (_ecore_evas_fps_debug)
-     {
-        t2 = ecore_time_get();
-/*        _ecore_evas_fps_debug_rendertime_add(t2 - t1); */
-     }
-   return 1;
+   return rend;
 }
 
 static int
@@ -121,12 +97,7 @@ _ecore_evas_win32_init(void)
    _ecore_evas_init_count++;
    if (_ecore_evas_init_count > 1)
      return _ecore_evas_init_count;
-
-   if (getenv("ECORE_EVAS_FPS_DEBUG"))
-     _ecore_evas_fps_debug = 1;
-
-   ecore_evas_idle_enterer = ecore_idle_enterer_add(_ecore_evas_win32_idle_enter, NULL);
-
+   
    ecore_evas_event_handlers[0]  = ecore_event_handler_add(ECORE_WIN32_EVENT_MOUSE_IN, _ecore_evas_win32_event_mouse_in, NULL);
    ecore_evas_event_handlers[1]  = ecore_event_handler_add(ECORE_WIN32_EVENT_MOUSE_OUT, _ecore_evas_win32_event_mouse_out, NULL);
    ecore_evas_event_handlers[2]  = ecore_event_handler_add(ECORE_WIN32_EVENT_WINDOW_DAMAGE, _ecore_evas_win32_event_window_damage, NULL);
@@ -148,11 +119,8 @@ _ecore_evas_win32_shutdown(void)
      {
         int i;
 
-        while (ecore_evases) _ecore_evas_free(ecore_evases);
         for (i = 0; i < ECORE_EVAS_EVENT_COUNT; i++)
           ecore_event_handler_del(ecore_evas_event_handlers[i]);
-        ecore_idle_enterer_del(ecore_evas_idle_enterer);
-        ecore_evas_idle_enterer = NULL;
         ecore_event_evas_shutdown();
      }
 
@@ -401,7 +369,6 @@ _ecore_evas_win32_free(Ecore_Evas *ee)
 
    ecore_win32_window_free((struct _Ecore_Win32_Window *)ee->prop.window);
    ecore_event_window_unregister(ee->prop.window);
-   ecore_evases = (Ecore_Evas *) eina_inlist_remove(EINA_INLIST_GET(ecore_evases), EINA_INLIST_GET(ee));
    _ecore_evas_win32_shutdown();
    ecore_win32_shutdown();
 }
@@ -835,7 +802,7 @@ _ecore_evas_win32_fullscreen_set(Ecore_Evas *ee, int on)
 }
 
 
-static const Ecore_Evas_Engine_Func _ecore_win32_engine_func =
+static Ecore_Evas_Engine_Func _ecore_win32_engine_func =
 {
    _ecore_evas_win32_free,
      NULL,
@@ -881,7 +848,9 @@ static const Ecore_Evas_Engine_Func _ecore_win32_engine_func =
      NULL, /* _ecore_evas_x_withdrawn_set */
      NULL, /* _ecore_evas_x_sticky_set */
      NULL, /* _ecore_evas_x_ignore_events_set */
-     NULL  /* _ecore_evas_x_alpha_set */
+     NULL,  /* _ecore_evas_x_alpha_set */
+     
+     NULL // render
 };
 
 #endif /* BUILD_ECORE_EVAS_WIN32 */
@@ -1108,9 +1077,10 @@ _ecore_evas_win32_new_internal(int (*_ecore_evas_engine_init)(Ecore_Evas *ee),
         return NULL;
      }
 
-   ecore_evases = (Ecore_Evas *) eina_inlist_prepend(EINA_INLIST_GET(ecore_evases), EINA_INLIST_GET(ee));
+   ee->engine.func->fn_render = _ecore_evas_win32_render;
+   _ecore_evas_register(ee);
    ecore_event_window_register(ee->prop.window, ee, ee->evas, _ecore_evas_mouse_move_process);
-
+   
    return ee;
 }
 
index 0245e1d..7e558f5 100644 (file)
 #define ECORE_EVAS_EVENT_COUNT 7
 
 static int _ecore_evas_init_count = 0;
-static int _ecore_evas_fps_debug  = 0;
 
 static Ecore_Event_Handler *ecore_evas_event_handlers[ECORE_EVAS_EVENT_COUNT];
-static Ecore_Idle_Enterer  *ecore_evas_idle_enterer = NULL;
-static Ecore_Evas          *ecore_evases = NULL;
 
 static int _ecore_evas_wince_event_mouse_in(void *data __UNUSED__, int type __UNUSED__, void *event);
 
@@ -48,9 +45,10 @@ static int _ecore_evas_wince_event_window_delete_request(void *data __UNUSED__,
 
 /* Private functions */
 
-static void
+static int
 _ecore_evas_wince_render(Ecore_Evas *ee)
 {
+   int rend = 0;
    Eina_List *updates = NULL;
 #ifdef BUILD_ECORE_EVAS_SOFTWARE_BUFFER
    Eina_List *ll;
@@ -86,30 +84,9 @@ _ecore_evas_wince_render(Ecore_Evas *ee)
      }
    else
      evas_norender(ee->evas);
+   if (updates) rend = 1;
    if (ee->func.fn_post_render) ee->func.fn_post_render(ee);
-}
-
-static int
-_ecore_evas_wince_idle_enter(void *data __UNUSED__)
-{
-   Ecore_Evas *ee;
-   double       t1 = 0.0;
-   double       t2 = 0.0;
-
-   if (!ecore_evases) return 1;
-   if (_ecore_evas_fps_debug)
-     {
-       t1 = ecore_time_get();
-     }
-   EINA_INLIST_FOREACH(ecore_evases, ee)
-       _ecore_evas_wince_render(ee);
-
-   if (_ecore_evas_fps_debug)
-     {
-       t2 = ecore_time_get();
-       _ecore_evas_fps_debug_rendertime_add(t2 - t1);
-     }
-   return 1;
+   return rend;
 }
 
 static int
@@ -118,12 +95,7 @@ _ecore_evas_wince_init(void)
    _ecore_evas_init_count++;
    if (_ecore_evas_init_count > 1)
      return _ecore_evas_init_count;
-
-   if (getenv("ECORE_EVAS_FPS_DEBUG"))
-     _ecore_evas_fps_debug = 1;
-
-   ecore_evas_idle_enterer = ecore_idle_enterer_add(_ecore_evas_wince_idle_enter, NULL);
-
+   
    ecore_evas_event_handlers[0]  = ecore_event_handler_add(ECORE_WINCE_EVENT_MOUSE_IN, _ecore_evas_wince_event_mouse_in, NULL);
    ecore_evas_event_handlers[1]  = ecore_event_handler_add(ECORE_WINCE_EVENT_MOUSE_OUT, _ecore_evas_wince_event_mouse_out, NULL);
    ecore_evas_event_handlers[2]  = ecore_event_handler_add(ECORE_WINCE_EVENT_WINDOW_DAMAGE, _ecore_evas_wince_event_window_damage, NULL);
@@ -132,8 +104,6 @@ _ecore_evas_wince_init(void)
    ecore_evas_event_handlers[5]  = ecore_event_handler_add(ECORE_WINCE_EVENT_WINDOW_HIDE, _ecore_evas_wince_event_window_hide, NULL);
    ecore_evas_event_handlers[6]  = ecore_event_handler_add(ECORE_WINCE_EVENT_WINDOW_DELETE_REQUEST, _ecore_evas_wince_event_window_delete_request, NULL);
 
-   if (_ecore_evas_fps_debug) _ecore_evas_fps_debug_init();
-
    ecore_event_evas_init();
    return _ecore_evas_init_count;
 }
@@ -146,12 +116,8 @@ _ecore_evas_wince_shutdown(void)
      {
        int i;
 
-       while (ecore_evases) _ecore_evas_free(ecore_evases);
        for (i = 0; i < ECORE_EVAS_EVENT_COUNT; i++)
          ecore_event_handler_del(ecore_evas_event_handlers[i]);
-       ecore_idle_enterer_del(ecore_evas_idle_enterer);
-       ecore_evas_idle_enterer = NULL;
-       if (_ecore_evas_fps_debug) _ecore_evas_fps_debug_shutdown();
         ecore_event_evas_shutdown();
      }
 
@@ -708,7 +674,7 @@ _ecore_evas_wince_fullscreen_set(Ecore_Evas *ee, int on)
      }
 }
 
-static const Ecore_Evas_Engine_Func _ecore_wince_engine_func =
+static Ecore_Evas_Engine_Func _ecore_wince_engine_func =
 {
    _ecore_evas_wince_free,
    NULL,
@@ -754,7 +720,9 @@ static const Ecore_Evas_Engine_Func _ecore_wince_engine_func =
    NULL, /* _ecore_evas_x_withdrawn_set */
    NULL, /* _ecore_evas_x_sticky_set */
    NULL, /* _ecore_evas_x_ignore_events_set */
-   NULL  /* _ecore_evas_x_alpha_set */
+   NULL,  /* _ecore_evas_x_alpha_set */
+     
+     NULL // render
 };
 
 /* API */
@@ -848,7 +816,8 @@ ecore_evas_software_wince_new_internal(int                 backend,
         ecore_wince_window_resume_set((Ecore_WinCE_Window *)ee->prop.window, einfo->func.resume);
      }
 
-   ecore_evases = (Ecore_Evas *) eina_inlist_prepend(EINA_INLIST_GET(ecore_evases), EINA_INLIST_GET(ee));
+   ee->engine.func->fn_render = _ecore_evas_wince_render;
+   _ecore_evas_register(ee);
    ecore_event_window_register(ee->prop.window, ee, ee->evas, (Ecore_Event_Mouse_Move_Cb)_ecore_evas_mouse_move_process);
 
    return ee;
index 35d02e2..3c7af16 100644 (file)
 #ifdef BUILD_ECORE_EVAS_X11
 static int _ecore_evas_init_count = 0;
 
-static int _ecore_evas_fps_debug = 0;
-
-static Ecore_Evas *ecore_evases = NULL;
 static Ecore_Event_Handler *ecore_evas_event_handlers[12];
-static Ecore_Idle_Enterer *ecore_evas_idle_enterer = NULL;
 
 #ifdef HAVE_ECORE_X_XCB
 static xcb_visualtype_t *
@@ -998,37 +994,10 @@ _ecore_evas_x_layer_update(Ecore_Evas *ee)
 }
 
 static int
-_ecore_evas_x_idle_enter(void *data __UNUSED__)
-{
-   Ecore_Evas *ee;
-   double t1 = 0.0;
-   double t2 = 0.0;
-   int rend = 0;
-
-   if (!ecore_evases) return 1;
-   if (_ecore_evas_fps_debug)
-     {
-       t1 = ecore_time_get();
-     }
-   EINA_INLIST_FOREACH(ecore_evases, ee)
-       rend |= _ecore_evas_x_render(ee);
-   ecore_x_flush();
-   if (_ecore_evas_fps_debug)
-     {
-       t2 = ecore_time_get();
-       if (rend)
-          _ecore_evas_fps_debug_rendertime_add(t2 - t1);
-     }
-   return 1;
-}
-
-static int
 _ecore_evas_x_init(void)
 {
    _ecore_evas_init_count++;
    if (_ecore_evas_init_count > 1) return _ecore_evas_init_count;
-   if (getenv("ECORE_EVAS_FPS_DEBUG")) _ecore_evas_fps_debug = 1;
-   ecore_evas_idle_enterer = ecore_idle_enterer_add(_ecore_evas_x_idle_enter, NULL);
    ecore_evas_event_handlers[0]  = ecore_event_handler_add(ECORE_X_EVENT_MOUSE_IN, _ecore_evas_x_event_mouse_in, NULL);
    ecore_evas_event_handlers[1]  = ecore_event_handler_add(ECORE_X_EVENT_MOUSE_OUT, _ecore_evas_x_event_mouse_out, NULL);
    ecore_evas_event_handlers[2]  = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_FOCUS_IN, _ecore_evas_x_event_window_focus_in, NULL);
@@ -1042,7 +1011,6 @@ _ecore_evas_x_init(void)
    ecore_evas_event_handlers[10] = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_PROPERTY, _ecore_evas_x_event_property_change, NULL);
    ecore_evas_event_handlers[11] = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_VISIBILITY_CHANGE, _ecore_evas_x_event_visibility_change, NULL);
    ecore_event_evas_init();
-   if (_ecore_evas_fps_debug) _ecore_evas_fps_debug_init();
    return _ecore_evas_init_count;
 }
 
@@ -1058,7 +1026,7 @@ _ecore_evas_x_free(Ecore_Evas *ee)
    ee->engine.x.mask = 0;
    ee->engine.x.gc = 0;
    ee->engine.x.damages = NULL;
-       ecore_event_window_unregister(ee->prop.window);
+   ecore_event_window_unregister(ee->prop.window);
    while (ee->engine.x.win_extra)
      {
        Ecore_X_Window *winp;
@@ -1068,7 +1036,6 @@ _ecore_evas_x_free(Ecore_Evas *ee)
        ecore_event_window_unregister(*winp);
        free(winp);
      }
-   ecore_evases = (Ecore_Evas *) eina_inlist_remove(EINA_INLIST_GET(ecore_evases), EINA_INLIST_GET(ee));
    _ecore_evas_x_shutdown();
    ecore_x_shutdown();
 }
@@ -2179,19 +2146,15 @@ _ecore_evas_x_shutdown(void)
      {
        unsigned int i;
 
-       while (ecore_evases) _ecore_evas_free(ecore_evases);
        for (i = 0; i < sizeof(ecore_evas_event_handlers) / sizeof(Ecore_Event_Handler*); i++)
          ecore_event_handler_del(ecore_evas_event_handlers[i]);
-       ecore_idle_enterer_del(ecore_evas_idle_enterer);
-       ecore_evas_idle_enterer = NULL;
-       if (_ecore_evas_fps_debug) _ecore_evas_fps_debug_shutdown();
        ecore_event_evas_shutdown();
      }
    if (_ecore_evas_init_count < 0) _ecore_evas_init_count = 0;
    return _ecore_evas_init_count;
 }
 
-static const Ecore_Evas_Engine_Func _ecore_x_engine_func =
+static Ecore_Evas_Engine_Func _ecore_x_engine_func =
 {
    _ecore_evas_x_free,
      NULL,
@@ -2237,7 +2200,9 @@ static const Ecore_Evas_Engine_Func _ecore_x_engine_func =
      _ecore_evas_x_withdrawn_set,
      _ecore_evas_x_sticky_set,
      _ecore_evas_x_ignore_events_set,
-     _ecore_evas_x_alpha_set
+     _ecore_evas_x_alpha_set,
+     
+     NULL // render
 };
 #endif /* BUILD_ECORE_EVAS_X11 */
 
@@ -2485,7 +2450,8 @@ ecore_evas_software_x11_new(const char *disp_name, Ecore_X_Window parent,
                            0 /* window_group */,
                            0 /* is_urgent */);
 
-   ecore_evases = (Ecore_Evas *) eina_inlist_prepend(EINA_INLIST_GET(ecore_evases), EINA_INLIST_GET(ee));
+   ee->engine.func->fn_render = _ecore_evas_x_render;
+   _ecore_evas_register(ee);
    ecore_event_window_register(ee->prop.window, ee, ee->evas, (Ecore_Event_Mouse_Move_Cb) _ecore_evas_mouse_move_process);
    return ee;
 }
@@ -2674,7 +2640,8 @@ ecore_evas_gl_x11_new(const char *disp_name, Ecore_X_Window parent,
                            0 /* window_group */,
                            0 /* is_urgent */);
    
-   ecore_evases = (Ecore_Evas *) eina_inlist_prepend(EINA_INLIST_GET(ecore_evases), EINA_INLIST_GET(ee));
+   ee->engine.func->fn_render = _ecore_evas_x_render;
+   _ecore_evas_register(ee);
    ecore_event_window_register(ee->prop.window, ee, ee->evas, (Ecore_Event_Mouse_Move_Cb) _ecore_evas_mouse_move_process);
 # endif /* HAVE_ECORE_X_XCB */
 
@@ -2922,7 +2889,8 @@ ecore_evas_xrender_x11_new(const char *disp_name, Ecore_X_Window parent,
                            0 /* window_group */,
                            0 /* is_urgent */);
    
-   ecore_evases = (Ecore_Evas *) eina_inlist_prepend(EINA_INLIST_GET(ecore_evases), EINA_INLIST_GET(ee));
+   ee->engine.func->fn_render = _ecore_evas_x_render;
+   _ecore_evas_register(ee);
    ecore_event_window_register(ee->prop.window, ee, ee->evas, (Ecore_Event_Mouse_Move_Cb) _ecore_evas_mouse_move_process);
    return ee;
 }
@@ -3134,7 +3102,8 @@ ecore_evas_software_x11_16_new(const char *disp_name, Ecore_X_Window parent,
                            0 /* window_group */,
                            0 /* is_urgent */);
    
-   ecore_evases = (Ecore_Evas *) eina_inlist_prepend(EINA_INLIST_GET(ecore_evases), EINA_INLIST_GET(ee));
+   ee->engine.func->fn_render = _ecore_evas_x_render;
+   _ecore_evas_register(ee);
    ecore_event_window_register(ee->prop.window, ee, ee->evas, (Ecore_Event_Mouse_Move_Cb) _ecore_evas_mouse_move_process);
    return ee;
 }