theme config -> advanced now uses eio

SVN revision: 74388
This commit is contained in:
Mike Blumenkrantz 2012-07-25 11:58:30 +00:00
parent 55294aab4a
commit 64e08bee54
1 changed files with 63 additions and 55 deletions

View File

@ -23,6 +23,8 @@ struct _E_Config_Dialog_Data
Evas_Object *o_system; Evas_Object *o_system;
int fmdir; int fmdir;
const char *theme; const char *theme;
Eio_File *eio[2];
Eina_Bool free : 1;
/* Advanced */ /* Advanced */
Evas_Object *o_categories_ilist; Evas_Object *o_categories_ilist;
@ -366,8 +368,12 @@ _free_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
eina_stringshare_del(t->category); eina_stringshare_del(t->category);
free(t); free(t);
} }
if (cfdata->eio[0]) eio_file_cancel(cfdata->eio[0]);
E_FREE(cfdata); if (cfdata->eio[1]) eio_file_cancel(cfdata->eio[1]);
if (cfdata->eio[0] || cfdata->eio[1])
cfdata->free = EINA_TRUE;
else
E_FREE(cfdata);
} }
static Evas_Object * static Evas_Object *
@ -703,66 +709,67 @@ _theme_file_used(Eina_List *tlist, const char *filename)
return 0; return 0;
} }
static void static Eina_Bool
_ilist_files_add(E_Config_Dialog_Data *cfdata, _ilist_files_filter_cb(void *data __UNUSED__, Eio_File *handler __UNUSED__, const char *file)
const char *header, const char *dir,
int *count_cb)
{ {
Eina_Iterator *it; return eina_str_has_extension(file, ".edj");
const char *file; }
Eina_List *themefiles = NULL;
int count = 0;
Evas_Object *o;
const char *theme;
Evas *evas;
o = cfdata->o_files_ilist; static void
e_widget_ilist_header_append(o, NULL, header); _ilist_files_main_cb(void *data, Eio_File *handler, const char *file)
evas = evas_object_evas_get(o); {
Evas_Object *ic = NULL;
E_Config_Dialog_Data *cfdata = data;
char *themename;
it = eina_file_ls(dir); if (_theme_file_used(cfdata->theme_list, file))
if (it)
{ {
EINA_ITERATOR_FOREACH(it, file) ic = e_icon_add(evas_object_evas_get(cfdata->o_files_ilist));
if (strstr(file, ".edj")) e_util_icon_theme_set(ic, "preferences-desktop-theme");
{
themefiles = eina_list_append(themefiles, file);
}
else
{
eina_stringshare_del(file);
}
eina_iterator_free(it);
} }
themename = strdupa(strrchr(file, '/') + 1);
themename[strlen(themename) - 4] = '\0';
e_widget_ilist_append(cfdata->o_files_ilist, ic, themename, NULL, NULL, NULL);
if (handler == cfdata->eio[0])
cfdata->personal_file_count++;
}
if (themefiles) static void
_ilist_files_done_cb(void *data, Eio_File *handler)
{
E_Config_Dialog_Data *cfdata = data;
if (handler == cfdata->eio[0])
{ {
char *themename; e_widget_ilist_header_prepend(cfdata->o_files_ilist, NULL, _("Personal"));
cfdata->eio[0] = NULL;
themefiles = eina_list_sort(themefiles, -1, _cb_sort); if (!cfdata->eio[1])
count = eina_list_count(themefiles); e_widget_ilist_header_append_relative(cfdata->o_files_ilist, NULL, _("System"), cfdata->personal_file_count);
EINA_LIST_FREE(themefiles, theme)
{
Evas_Object *ic = NULL;
if (_theme_file_used(cfdata->theme_list, theme))
{
ic = e_icon_add(evas);
e_util_icon_theme_set(ic, "preferences-desktop-theme");
}
themename = strdupa(strrchr(theme, '/') + 1);
themename[strlen(themename) - 4] = '\0';
e_widget_ilist_append(o, ic, themename, NULL, NULL, NULL);
eina_stringshare_del(theme);
}
} }
else
{
if (!cfdata->eio[0])
e_widget_ilist_header_append_relative(cfdata->o_files_ilist, NULL, _("System"), cfdata->personal_file_count);
cfdata->eio[1] = NULL;
}
if ((!cfdata->eio[0]) && (!cfdata->eio[1]) && cfdata->free) free(cfdata);
}
if (count_cb) static void
*count_cb = count; _ilist_files_error_cb(void *data, Eio_File *handler, int error __UNUSED__)
{
E_Config_Dialog_Data *cfdata = data;
//oh well
if (handler == cfdata->eio[0])
cfdata->eio[0] = NULL;
else
cfdata->eio[1] = NULL;
if ((!cfdata->eio[0]) && (!cfdata->eio[1]) && cfdata->free) free(cfdata);
}
static Eio_File *
_ilist_files_add(E_Config_Dialog_Data *cfdata, const char *dir)
{
return eio_file_ls(dir, _ilist_files_filter_cb, _ilist_files_main_cb, _ilist_files_done_cb, _ilist_files_error_cb, cfdata);
} }
static void static void
@ -779,14 +786,15 @@ _fill_files_ilist(E_Config_Dialog_Data *cfdata)
edje_freeze(); edje_freeze();
e_widget_ilist_freeze(o); e_widget_ilist_freeze(o);
e_widget_ilist_clear(o); e_widget_ilist_clear(o);
cfdata->personal_file_count = 0;
/* Grab the "Personal" themes. */ /* Grab the "Personal" themes. */
e_user_dir_concat_static(theme_dir, "themes"); e_user_dir_concat_static(theme_dir, "themes");
_ilist_files_add(cfdata, _("Personal"), theme_dir, &cfdata->personal_file_count); cfdata->eio[0] = _ilist_files_add(cfdata, theme_dir);
/* Grab the "System" themes. */ /* Grab the "System" themes. */
e_prefix_data_concat_static(theme_dir, "data/themes"); e_prefix_data_concat_static(theme_dir, "data/themes");
_ilist_files_add(cfdata, _("System"), theme_dir, NULL); cfdata->eio[1] = _ilist_files_add(cfdata, theme_dir);
e_widget_ilist_go(o); e_widget_ilist_go(o);
e_widget_ilist_thaw(o); e_widget_ilist_thaw(o);