2009-11-20 08:12:16 -08:00
|
|
|
/* Menu chooser */
|
2008-10-25 08:18:48 -07:00
|
|
|
#include "e.h"
|
|
|
|
#include "e_mod_main.h"
|
|
|
|
|
2009-03-11 08:13:42 -07:00
|
|
|
static const char *xdg_sel = NULL;
|
2008-10-25 08:18:48 -07:00
|
|
|
static Eina_List *menus = NULL;
|
|
|
|
|
2009-02-10 03:56:56 -08:00
|
|
|
static void
|
|
|
|
check_menu_dir(const char *dir)
|
|
|
|
{
|
|
|
|
char buf[PATH_MAX], *file;
|
* estickies,
* etk,
* PROTO/exalt,
* E-MODULES-EXTRA/diskio,
* E-MODULES-EXTRA/drawer,
* E-MODULES-EXTRA/penguins,
* E-MODULES-EXTRA/slideshow,
* E-MODULES-EXTRA/mail,
* E-MODULES-EXTRA/forecasts,
* E-MODULES-EXTRA/iiirk,
* E-MODULES-EXTRA/places,
* e,
* ewl,
* ecore,
* elitaire,
* entrance,
* e_dbus,
* efreet: Here we go, move from Ecore_List to Eina_List.
NOTE: This patch is huge, I did test it a lot, and I hope nothing is
broken. But if you think something change after this commit, please
contact me ASAP.
SVN revision: 39200
2009-02-25 03:03:47 -08:00
|
|
|
Eina_List *files;
|
2009-11-25 10:55:15 -08:00
|
|
|
|
2009-02-10 03:56:56 -08:00
|
|
|
snprintf(buf, sizeof(buf), "%s/menus", dir);
|
|
|
|
files = ecore_file_ls(buf);
|
* estickies,
* etk,
* PROTO/exalt,
* E-MODULES-EXTRA/diskio,
* E-MODULES-EXTRA/drawer,
* E-MODULES-EXTRA/penguins,
* E-MODULES-EXTRA/slideshow,
* E-MODULES-EXTRA/mail,
* E-MODULES-EXTRA/forecasts,
* E-MODULES-EXTRA/iiirk,
* E-MODULES-EXTRA/places,
* e,
* ewl,
* ecore,
* elitaire,
* entrance,
* e_dbus,
* efreet: Here we go, move from Ecore_List to Eina_List.
NOTE: This patch is huge, I did test it a lot, and I hope nothing is
broken. But if you think something change after this commit, please
contact me ASAP.
SVN revision: 39200
2009-02-25 03:03:47 -08:00
|
|
|
EINA_LIST_FREE(files, file)
|
2009-11-25 10:55:15 -08:00
|
|
|
{
|
|
|
|
if (e_util_glob_match(file, "*.menu"))
|
2009-02-10 03:56:56 -08:00
|
|
|
{
|
2009-11-25 10:55:15 -08:00
|
|
|
snprintf(buf, sizeof(buf), "%s/menus/%s", dir, file);
|
|
|
|
menus = eina_list_append(menus, strdup(buf));
|
|
|
|
}
|
* estickies,
* etk,
* PROTO/exalt,
* E-MODULES-EXTRA/diskio,
* E-MODULES-EXTRA/drawer,
* E-MODULES-EXTRA/penguins,
* E-MODULES-EXTRA/slideshow,
* E-MODULES-EXTRA/mail,
* E-MODULES-EXTRA/forecasts,
* E-MODULES-EXTRA/iiirk,
* E-MODULES-EXTRA/places,
* e,
* ewl,
* ecore,
* elitaire,
* entrance,
* e_dbus,
* efreet: Here we go, move from Ecore_List to Eina_List.
NOTE: This patch is huge, I did test it a lot, and I hope nothing is
broken. But if you think something change after this commit, please
contact me ASAP.
SVN revision: 39200
2009-02-25 03:03:47 -08:00
|
|
|
free(file);
|
2009-02-10 03:56:56 -08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2008-10-25 08:18:48 -07:00
|
|
|
EAPI int
|
2010-08-19 09:52:09 -07:00
|
|
|
wizard_page_init(E_Wizard_Page *pg __UNUSED__)
|
2008-10-25 08:18:48 -07:00
|
|
|
{
|
2009-02-10 03:56:56 -08:00
|
|
|
char buf[PATH_MAX];
|
2008-10-25 08:18:48 -07:00
|
|
|
const char *dirs[] =
|
|
|
|
{
|
|
|
|
"/etc/xdg",
|
|
|
|
"/usr/etc/xdg",
|
|
|
|
"/usr/local/etc/xdg",
|
|
|
|
"/usr/opt/etc/xdg",
|
|
|
|
"/usr/opt/xdg",
|
2009-02-10 03:56:56 -08:00
|
|
|
"/usr/local/opt/etc/xdg",
|
|
|
|
"/usr/local/opt/xdg",
|
|
|
|
"/opt/etc/xdg",
|
|
|
|
"/opt/xdg",
|
2008-10-25 08:18:48 -07:00
|
|
|
// FIXME: add more "known locations"
|
|
|
|
NULL
|
|
|
|
};
|
2009-02-10 03:56:56 -08:00
|
|
|
int i, newdir;
|
2008-10-25 08:18:48 -07:00
|
|
|
|
2011-05-11 20:02:55 -07:00
|
|
|
e_user_homedir_concat(buf, sizeof(buf), ".config");
|
|
|
|
check_menu_dir(buf);
|
|
|
|
|
|
|
|
for (i = 0; dirs[i]; i++) check_menu_dir(dirs[i]);
|
|
|
|
|
2009-02-10 03:56:56 -08:00
|
|
|
newdir = 1;
|
|
|
|
snprintf(buf, sizeof(buf), "%s/etc/xdg", e_prefix_get());
|
2008-10-25 08:18:48 -07:00
|
|
|
for (i = 0; dirs[i]; i++)
|
|
|
|
{
|
2009-02-10 03:56:56 -08:00
|
|
|
if (!strcmp(dirs[i], buf))
|
|
|
|
{
|
|
|
|
newdir = 0;
|
|
|
|
break;
|
|
|
|
}
|
2008-10-25 08:18:48 -07:00
|
|
|
}
|
2009-02-10 03:56:56 -08:00
|
|
|
if (newdir) check_menu_dir(buf);
|
2008-10-25 08:18:48 -07:00
|
|
|
return 1;
|
|
|
|
}
|
2009-11-25 10:55:15 -08:00
|
|
|
|
2008-10-25 08:18:48 -07:00
|
|
|
EAPI int
|
2010-08-19 09:52:09 -07:00
|
|
|
wizard_page_shutdown(E_Wizard_Page *pg __UNUSED__)
|
2008-10-25 08:18:48 -07:00
|
|
|
{
|
|
|
|
// FIXME: free menus
|
|
|
|
return 1;
|
|
|
|
}
|
2009-11-25 10:55:15 -08:00
|
|
|
|
2008-10-25 08:18:48 -07:00
|
|
|
EAPI int
|
|
|
|
wizard_page_show(E_Wizard_Page *pg)
|
|
|
|
{
|
|
|
|
Evas_Object *o, *of, *ob;
|
2009-02-25 09:05:46 -08:00
|
|
|
char *file;
|
2009-11-25 10:55:15 -08:00
|
|
|
int sel = -1, i = 0;
|
|
|
|
|
2008-10-25 08:18:48 -07:00
|
|
|
o = e_widget_list_add(pg->evas, 1, 0);
|
|
|
|
e_wizard_title_set(_("Menus"));
|
2009-11-25 10:55:15 -08:00
|
|
|
|
2008-10-25 19:42:00 -07:00
|
|
|
if (!menus)
|
2008-10-25 08:18:48 -07:00
|
|
|
{
|
2008-10-25 19:42:00 -07:00
|
|
|
of = e_widget_framelist_add(pg->evas, _("Error"), 0);
|
2009-11-25 10:55:15 -08:00
|
|
|
|
2008-10-25 19:42:00 -07:00
|
|
|
ob = e_widget_textblock_add(pg->evas);
|
2009-09-01 06:34:42 -07:00
|
|
|
e_widget_size_min_set(ob, 140 * e_scale, 140 * e_scale);
|
2008-10-25 19:42:00 -07:00
|
|
|
e_widget_textblock_markup_set
|
|
|
|
(ob,
|
|
|
|
_("No menu files were<br>"
|
|
|
|
"found on your system.<br>"
|
|
|
|
"Please see the<br>"
|
|
|
|
"documentation on<br>"
|
|
|
|
"www.enlightenment.org<br>"
|
|
|
|
"for more details on<br>"
|
|
|
|
"how to get your<br>"
|
|
|
|
"application menus<br>"
|
2009-11-25 10:55:15 -08:00
|
|
|
"working."));
|
2008-10-25 19:42:00 -07:00
|
|
|
e_widget_framelist_object_append(of, ob);
|
|
|
|
e_widget_list_object_append(o, of, 1, 1, 0.5);
|
|
|
|
evas_object_show(ob);
|
|
|
|
evas_object_show(of);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
of = e_widget_framelist_add(pg->evas, _("Select application menu"), 0);
|
2009-11-25 10:55:15 -08:00
|
|
|
|
2008-10-25 19:42:00 -07:00
|
|
|
ob = e_widget_ilist_add(pg->evas, 32 * e_scale, 32 * e_scale, &xdg_sel);
|
2009-09-01 06:34:42 -07:00
|
|
|
e_widget_size_min_set(ob, 140 * e_scale, 140 * e_scale);
|
2009-11-25 10:55:15 -08:00
|
|
|
|
2008-10-25 19:42:00 -07:00
|
|
|
e_widget_ilist_freeze(ob);
|
2009-02-25 09:05:46 -08:00
|
|
|
|
|
|
|
EINA_LIST_FREE(menus, file)
|
2008-10-25 08:18:48 -07:00
|
|
|
{
|
2011-05-11 20:29:23 -07:00
|
|
|
char buf[PATH_MAX], buf2[PATH_MAX], *p, *p2, *tlabel, *tdesc;
|
2008-10-25 19:42:00 -07:00
|
|
|
const char *label;
|
2009-02-25 09:05:46 -08:00
|
|
|
|
2008-10-25 19:42:00 -07:00
|
|
|
label = file;
|
|
|
|
tlabel = NULL;
|
|
|
|
tdesc = NULL;
|
2011-05-11 20:02:55 -07:00
|
|
|
e_user_homedir_concat(buf, sizeof(buf),
|
|
|
|
".config/menus/applications.menu");
|
2011-05-12 22:26:56 -07:00
|
|
|
snprintf(buf2, sizeof(buf2),
|
|
|
|
"%s/etc/xdg/menus/enlightenment.menu",
|
2011-05-11 20:29:23 -07:00
|
|
|
e_prefix_get());
|
2011-05-11 20:02:55 -07:00
|
|
|
if (!strcmp("/etc/xdg/menus/applications.menu", file))
|
2008-10-25 19:42:00 -07:00
|
|
|
{
|
|
|
|
label = _("System Default");
|
|
|
|
sel = i;
|
|
|
|
}
|
2011-05-11 20:29:23 -07:00
|
|
|
else if (!strcmp(buf2, file))
|
|
|
|
{
|
|
|
|
label = _("Enlightenment Default");
|
|
|
|
sel = i;
|
|
|
|
}
|
2011-05-11 20:02:55 -07:00
|
|
|
else if (!strcmp(buf, file))
|
|
|
|
{
|
|
|
|
label = _("Personal Default");
|
|
|
|
}
|
|
|
|
else
|
2008-10-25 08:18:48 -07:00
|
|
|
{
|
2008-10-25 19:42:00 -07:00
|
|
|
p = strrchr(file, '/');
|
|
|
|
if (p)
|
2008-10-25 08:18:48 -07:00
|
|
|
{
|
2008-10-25 19:42:00 -07:00
|
|
|
p++;
|
|
|
|
p2 = strchr(p, '-');
|
|
|
|
if (!p2) p2 = strrchr(p, '.');
|
|
|
|
if (p2)
|
2008-10-25 08:18:48 -07:00
|
|
|
{
|
2008-10-25 19:42:00 -07:00
|
|
|
tlabel = malloc(p2 - p + 1);
|
|
|
|
if (tlabel)
|
2008-10-25 08:18:48 -07:00
|
|
|
{
|
2010-01-30 14:11:11 -08:00
|
|
|
eina_strlcpy(tlabel, p, p2 - p + 1);
|
2008-10-25 19:42:00 -07:00
|
|
|
tlabel[0] = toupper(tlabel[0]);
|
|
|
|
if (*p2 == '-')
|
2008-10-25 08:18:48 -07:00
|
|
|
{
|
2008-10-25 19:42:00 -07:00
|
|
|
p2++;
|
|
|
|
p = strrchr(p2, '.');
|
|
|
|
if (p)
|
2008-10-25 08:18:48 -07:00
|
|
|
{
|
2008-10-25 19:42:00 -07:00
|
|
|
tdesc = malloc(p - p2 + 1);
|
|
|
|
if (tdesc)
|
|
|
|
{
|
2010-01-30 14:11:11 -08:00
|
|
|
eina_strlcpy(tdesc, p2, p - p2 + 1);
|
2008-10-25 19:42:00 -07:00
|
|
|
tdesc[0] = toupper(tdesc[0]);
|
|
|
|
snprintf(buf, sizeof(buf), "%s (%s)", tlabel, tdesc);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
snprintf(buf, sizeof(buf), "%s", tlabel);
|
2008-10-25 08:18:48 -07:00
|
|
|
}
|
|
|
|
else
|
|
|
|
snprintf(buf, sizeof(buf), "%s", tlabel);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
snprintf(buf, sizeof(buf), "%s", tlabel);
|
2008-10-25 19:42:00 -07:00
|
|
|
label = buf;
|
2008-10-25 08:18:48 -07:00
|
|
|
}
|
|
|
|
}
|
2008-10-25 19:42:00 -07:00
|
|
|
else
|
|
|
|
label = p;
|
2008-10-25 08:18:48 -07:00
|
|
|
}
|
|
|
|
}
|
2008-10-25 19:42:00 -07:00
|
|
|
e_widget_ilist_append(ob, NULL, label, NULL, NULL, file);
|
|
|
|
if (tlabel) free(tlabel);
|
|
|
|
if (tdesc) free(tdesc);
|
|
|
|
free(file);
|
2009-02-25 09:05:46 -08:00
|
|
|
i++;
|
2008-10-25 08:18:48 -07:00
|
|
|
}
|
2008-10-25 19:42:00 -07:00
|
|
|
e_widget_ilist_go(ob);
|
|
|
|
e_widget_ilist_thaw(ob);
|
2009-11-25 10:55:15 -08:00
|
|
|
|
2008-10-25 19:42:00 -07:00
|
|
|
if (sel >= 0) e_widget_ilist_selected_set(ob, sel);
|
2009-11-25 10:55:15 -08:00
|
|
|
|
2008-10-25 19:42:00 -07:00
|
|
|
e_widget_framelist_object_append(of, ob);
|
|
|
|
e_widget_list_object_append(o, of, 1, 1, 0.5);
|
|
|
|
evas_object_show(ob);
|
|
|
|
evas_object_show(of);
|
|
|
|
}
|
2008-10-25 08:18:48 -07:00
|
|
|
|
|
|
|
e_wizard_page_show(o);
|
|
|
|
pg->data = of;
|
|
|
|
return 1; /* 1 == show ui, and wait for user, 0 == just continue */
|
|
|
|
}
|
2009-11-25 10:55:15 -08:00
|
|
|
|
2008-10-25 08:18:48 -07:00
|
|
|
EAPI int
|
|
|
|
wizard_page_hide(E_Wizard_Page *pg)
|
|
|
|
{
|
|
|
|
evas_object_del(pg->data);
|
|
|
|
return 1;
|
|
|
|
}
|
2009-11-25 10:55:15 -08:00
|
|
|
|
2008-10-25 08:18:48 -07:00
|
|
|
EAPI int
|
2010-08-19 09:52:09 -07:00
|
|
|
wizard_page_apply(E_Wizard_Page *pg __UNUSED__)
|
2008-10-25 08:18:48 -07:00
|
|
|
{
|
2008-10-25 19:39:29 -07:00
|
|
|
if ((xdg_sel) && (!strcmp("/etc/xdg/menus/applications.menu", xdg_sel)))
|
2009-03-11 08:13:42 -07:00
|
|
|
{
|
|
|
|
eina_stringshare_del(xdg_sel);
|
|
|
|
xdg_sel = NULL;
|
|
|
|
}
|
|
|
|
e_config->default_system_menu = eina_stringshare_ref(xdg_sel);
|
2008-10-25 08:18:48 -07:00
|
|
|
efreet_menu_file_set(e_config->default_system_menu);
|
|
|
|
return 1;
|
|
|
|
}
|