efl/emotion: delay module loading until they are needed.
authorGustavo Sverzut Barbieri <barbieri@gmail.com>
Fri, 11 Jan 2013 17:41:53 +0000 (17:41 +0000)
committerGustavo Sverzut Barbieri <barbieri@gmail.com>
Fri, 11 Jan 2013 17:41:53 +0000 (17:41 +0000)
SVN revision: 82651

src/lib/emotion/emotion_modules.c

index 95ac2b3c91861b4a48e6f6e0037f68840e70765e..95d6a8b30c490c182a8c43d3fe4245336df19e7b 100644 (file)
@@ -25,6 +25,7 @@ typedef struct _Emotion_Engine_Registry_Entry
 
 static Eina_List *_emotion_engine_registry = NULL;
 static Eina_Array *_emotion_modules = NULL;
+static Eina_Bool _emotion_modules_loaded = EINA_FALSE;
 
 static void
 _emotion_engine_registry_entry_free(Emotion_Engine_Registry_Entry *re)
@@ -49,7 +50,7 @@ _emotion_engine_registry_entry_cmp(const void *pa, const void *pb)
 }
 
 static void
-_emotion_modules_load(void)
+_emotion_modules_find(void)
 {
    char buf[PATH_MAX];
    char *path;
@@ -103,12 +104,25 @@ _emotion_modules_load(void)
    _emotion_modules = eina_module_arch_list_get(_emotion_modules, buf, MODULE_ARCH);
 }
 
+static void
+_emotion_modules_load(void)
+{
+   if (_emotion_modules_loaded) return;
+   _emotion_modules_loaded = EINA_TRUE;
+
+   if (_emotion_modules)
+     eina_module_list_load(_emotion_modules);
+
+   if (!_emotion_engine_registry)
+     ERR("Couldn't find any emotion engine.");
+}
+
 Eina_Bool
 emotion_modules_init(void)
 {
    int static_modules = 0;
 
-   _emotion_modules_load();
+   _emotion_modules_find();
 
    /* Init static module */
 #ifdef EMOTION_STATIC_BUILD_XINE
@@ -123,11 +137,6 @@ emotion_modules_init(void)
 
    if ((!_emotion_modules) && (!static_modules))
      WRN("No emotion modules found!");
-   else if (_emotion_modules)
-     eina_module_list_load(_emotion_modules);
-
-   if (!_emotion_engine_registry)
-     ERR("Couldn't find any emotion engine.");
 
    return EINA_TRUE;
 }
@@ -156,6 +165,8 @@ emotion_modules_shutdown(void)
         eina_array_free(_emotion_modules);
         _emotion_modules = NULL;
      }
+
+   _emotion_modules_loaded = EINA_FALSE;
 }
 
 EAPI Eina_Bool
@@ -296,6 +307,8 @@ emotion_engine_instance_new(const char *name, Evas_Object *obj, Emotion_Module_O
    const Emotion_Engine *engine;
    void *data;
 
+   _emotion_modules_load();
+
    if ((!name) && getenv("EMOTION_ENGINE"))
      {
         name = getenv("EMOTION_ENGINE");