From b3ee061a1f1c9478661c4eaba2882fd50eec6a69 Mon Sep 17 00:00:00 2001 From: Flavio Ceolin Date: Tue, 16 Sep 2014 11:51:28 -0300 Subject: module: Fallback to other backend in case of fail --- src/module/e_mod_config.c | 7 +++++++ src/module/e_mod_config.h | 1 + src/module/e_mod_main.c | 22 +++++++++++++++++++++- 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/module/e_mod_config.c b/src/module/e_mod_config.c index 7e54961..6dd33ac 100644 --- a/src/module/e_mod_config.c +++ b/src/module/e_mod_config.c @@ -38,6 +38,13 @@ emix_config_backend_get(void) return _config->backend; } +void +emix_config_backend_set(const char *backend) +{ + eina_stringshare_replace(&_config->backend, backend); + e_config_domain_save("module.emix", cd, _config); +} + Eina_Bool emix_config_notify_get(void) { diff --git a/src/module/e_mod_config.h b/src/module/e_mod_config.h index 9962ea8..4058618 100644 --- a/src/module/e_mod_config.h +++ b/src/module/e_mod_config.h @@ -8,6 +8,7 @@ typedef void (*emix_config_backend_changed)(const char *backend, void *data); void emix_config_init(emix_config_backend_changed cb, const void *userdata); void emix_config_shutdown(void); const char *emix_config_backend_get(void); +void emix_config_backend_set(const char *backend); Eina_Bool emix_config_notify_get(void); E_Config_Dialog* emix_config_popup_new(E_Comp *comp, const char*p); diff --git a/src/module/e_mod_main.c b/src/module/e_mod_main.c index 8ff5238..a74c13c 100644 --- a/src/module/e_mod_main.c +++ b/src/module/e_mod_main.c @@ -745,8 +745,10 @@ _volume_meter_cb(Emix_Sink *sink, double value, void *data EINA_UNUSED) EAPI void * e_modapi_init(E_Module *m) { + Eina_List *l; char buf[4096]; const char *backend; + Eina_Bool backend_loaded = EINA_FALSE; _e_emix_log_domain = eina_log_domain_register("emix_module", EINA_COLOR_RED); @@ -758,7 +760,25 @@ e_modapi_init(E_Module *m) goto err; if (emix_backend_set(backend) == EINA_FALSE) - goto err; + { + WRN("Could not load %s, trying another one ...", backend); + EINA_LIST_FOREACH((Eina_List *)emix_backends_available(), l, + backend) + { + if (emix_backend_set(backend) == EINA_TRUE) + { + DBG("Loaded backend: %s!", backend); + backend_loaded = EINA_TRUE; + emix_config_backend_set(backend); + break; + } + } + } + else + backend_loaded = EINA_TRUE; + + if (backend_loaded == EINA_FALSE) + goto err; emix_volume_meter_callback_set(_volume_meter_cb, NULL); -- cgit v1.2.1