enlightenment/src/modules/wizard/page_040.c

127 lines
3.9 KiB
C

/* Extra desktop files setup */
#include "e_wizard.h"
static Ecore_Timer *_next_timer = NULL;
EAPI int
wizard_page_init(E_Wizard_Page *pg __UNUSED__, Eina_Bool *need_xdg_desktops, Eina_Bool *need_xdg_icons __UNUSED__)
{
*need_xdg_desktops = EINA_TRUE;
return 1;
}
/*
EAPI int
wizard_page_shutdown(E_Wizard_Page *pg __UNUSED__)
{
return 1;
}
*/
static Eina_Bool
_next_page(void *data __UNUSED__)
{
_next_timer = NULL;
e_wizard_button_next_enable_set(1);
e_wizard_next();
return ECORE_CALLBACK_CANCEL;
}
EAPI int
wizard_page_show(E_Wizard_Page *pg __UNUSED__)
{
Eina_List *extra_desks, *desks;
Efreet_Desktop *desk, *extra_desk;
char buf[PATH_MAX], *file;
int found, copies = 0;
e_wizard_title_set(_("Adding missing App files"));
e_wizard_button_next_enable_set(0);
e_wizard_page_show(NULL);
snprintf(buf, sizeof(buf), "%s/extra_desktops", e_wizard_dir_get());
extra_desks = ecore_file_ls(buf);
/* advance in 1 sec */
_next_timer = ecore_timer_add(1.0, _next_page, NULL);
EINA_LIST_FREE(extra_desks, file)
{
snprintf(buf, sizeof(buf), "%s/extra_desktops/%s",
e_wizard_dir_get(), file);
extra_desk = efreet_desktop_uncached_new(buf);
if (extra_desk)
{
if (extra_desk->exec)
{
char abuf[4096], dbuf[4096];
found = 0;
if (sscanf(extra_desk->exec, "%4000s", abuf) == 1)
{
if (ecore_file_app_installed(abuf))
{
desks = efreet_util_desktop_name_glob_list("*");
EINA_LIST_FREE(desks, desk)
{
if ((!found) && (desk->exec))
{
if (sscanf(desk->exec, "%4000s", dbuf) == 1)
{
char *p1, *p2;
p1 = strrchr(dbuf, '/');
if (p1) p1++;
else p1 = dbuf;
p2 = strrchr(abuf, '/');
if (p2) p2++;
else p2 = abuf;
if (!strcmp(p1, p2)) found = 1;
}
}
efreet_desktop_free(desk);
}
}
}
if (!found)
{
// copy file
snprintf(abuf, sizeof(abuf),
"%s/applications",
efreet_data_home_get());
ecore_file_mkpath(abuf);
snprintf(abuf, sizeof(abuf),
"%s/applications/%s",
efreet_data_home_get(), file);
ecore_file_cp(buf, abuf);
// trigger cache rebuild
efreet_desktop_free(efreet_desktop_get(abuf));
copies++;
}
}
efreet_desktop_free(extra_desk);
}
free(file);
}
if (copies == 0)
{
if (_next_timer) ecore_timer_del(_next_timer);
_next_timer = NULL;
return 0; /* we didnt copy anything so advance anyway */
}
return 1; /* 1 == show ui, and wait for user, 0 == just continue */
}
EAPI int
wizard_page_hide(E_Wizard_Page *pg __UNUSED__)
{
if (_next_timer) ecore_timer_del(_next_timer);
_next_timer = NULL;
return 1;
}
/*
EAPI int
wizard_page_apply(E_Wizard_Page *pg __UNUSED__)
{
return 1;
}
*/