diff --git a/src/modules/conf_theme/e_int_config_theme.c b/src/modules/conf_theme/e_int_config_theme.c
index d75071503..730c614a8 100644
--- a/src/modules/conf_theme/e_int_config_theme.c
+++ b/src/modules/conf_theme/e_int_config_theme.c
@@ -28,6 +28,7 @@ struct _E_Config_Dialog_Data
/* Dialog */
Evas_Object *win_import;
+ Ecore_Job *theme_check;
};
static void
@@ -567,12 +568,25 @@ _fill_data(E_Config_Dialog_Data *cfdata)
}
static void
-_open_test_cb(void *file)
+_open_test_cb(void *data)
{
- if (!edje_file_group_exists(eet_file_get(file), "e/desktop/background"))
- e_util_dialog_show(_("Theme File Error"),
- _("%s is probably not an E theme!"),
- eet_file_get(file));
+ E_Config_Dialog_Data *cfdata = data;
+ Eina_List *l, *fails = NULL;
+ Eet_File *file;
+ Eina_Strbuf *buf;
+
+ cfdata->theme_check = NULL;
+ EINA_LIST_FOREACH(cfdata->themes, l, file)
+ if (!edje_file_group_exists(eet_file_get(file), "e/desktop/background"))
+ fails = eina_list_append(fails, file);
+ if (!fails) return;
+ buf = eina_strbuf_new();
+ EINA_LIST_FREE(fails, file)
+ eina_strbuf_append_printf(buf, "%s", eet_file_get(file));
+ e_util_dialog_show(_("Theme File Error"),
+ _("The listed files are probably not E themes:%s"),
+ eina_strbuf_string_get(buf));
+ eina_strbuf_free(buf);
}
static void
@@ -581,7 +595,8 @@ _open_done_cb(void *data, Eio_File *handler, Eet_File *file)
E_Config_Dialog_Data *cfdata = data;
cfdata->themes = eina_list_append(cfdata->themes, file);
cfdata->theme_init = eina_list_remove(cfdata->theme_init, handler);
- ecore_job_add(_open_test_cb, file);
+ if (!cfdata->theme_init)
+ cfdata->theme_check = ecore_job_add(_open_test_cb, cfdata);
}
static void
@@ -652,6 +667,7 @@ _free_data(E_Config_Dialog *cfd EINA_UNUSED, E_Config_Dialog_Data *cfdata)
eio_file_cancel(ls);
EINA_LIST_FREE(cfdata->themes, ef)
eet_close(ef);
+ E_FREE_FUNC(cfdata->theme_check, ecore_job_del);
if (cfdata->eio[0] || cfdata->eio[1] || cfdata->themes || cfdata->theme_init)
cfdata->free = EINA_TRUE;
else