Add some e_utils integration, more to come - should help folk use the handy apps

SVN revision: 15139
This commit is contained in:
handyande 2005-06-05 15:02:43 +00:00 committed by handyande
parent bcdb7bcf9a
commit 1c7951c07c
4 changed files with 79 additions and 31 deletions

View File

@ -4277,43 +4277,46 @@ _e_border_menu_show(E_Border *bd, Evas_Coord x, Evas_Coord y, int key)
"widgets/border/default/sendto"),
"widgets/border/default/sendto");
mi = e_menu_item_new(m);
e_menu_item_separator_set(mi, 1);
a = e_app_window_name_class_find(bd->client.icccm.name,
bd->client.icccm.class);
if (a)
if (e_util_app_installed("emblem"))
{
mi = e_menu_item_new(m);
e_menu_item_label_set(mi, _("Edit Icon"));
e_menu_item_callback_set(mi, _e_border_menu_cb_icon_edit, a->path);
e_menu_item_icon_edje_set(mi, a->path, "icon");
}
else if (bd->client.icccm.class) /* icons with no class useless to borders */
{
static char buf[PATH_MAX + 50];
char *name, *homedir;
int i, l;
e_menu_item_separator_set(mi, 1);
buf[0] = '\0';
/* generate a reasonable file name from the window class */
/* FIXME - I think there could be duplicates - how better to do this? */
name = strdup(bd->client.icccm.class);
l = strlen(name);
for (i = 0; i < l; i++)
a = e_app_window_name_class_find(bd->client.icccm.name,
bd->client.icccm.class);
if (a)
{
if (name[i] == ' ') name[i] = '_';
mi = e_menu_item_new(m);
e_menu_item_label_set(mi, _("Edit Icon"));
e_menu_item_callback_set(mi, _e_border_menu_cb_icon_edit, a->path);
e_menu_item_icon_edje_set(mi, a->path, "icon");
}
/* previously this could be null, but it will exist now */
homedir = e_user_homedir_get();
else if (bd->client.icccm.class) /* icons with no class useless to borders */
{
static char buf[PATH_MAX + 50];
char *name, *homedir;
int i, l;
snprintf(buf, sizeof(buf),
"--win-class \"%s\" %s/.e/e/applications/all/%s.eapp",
bd->client.icccm.class, homedir, name);
mi = e_menu_item_new(m);
e_menu_item_label_set(mi, _("Create Icon"));
e_menu_item_callback_set(mi, _e_border_menu_cb_icon_edit, buf);
buf[0] = '\0';
/* generate a reasonable file name from the window class */
/* FIXME - I think there could be duplicates - how better to do this? */
name = strdup(bd->client.icccm.class);
l = strlen(name);
for (i = 0; i < l; i++)
{
if (name[i] == ' ') name[i] = '_';
}
/* previously this could be null, but it will exist now */
homedir = e_user_homedir_get();
snprintf(buf, sizeof(buf),
"--win-class \"%s\" %s/.e/e/applications/all/%s.eapp",
bd->client.icccm.class, homedir, name);
mi = e_menu_item_new(m);
e_menu_item_label_set(mi, _("Create Icon"));
e_menu_item_callback_set(mi, _e_border_menu_cb_icon_edit, buf);
}
}
if (key)

View File

@ -19,6 +19,7 @@ struct _Main_Data
/* local subsystem functions */
static void _e_int_menus_main_del_hook (void *obj);
static void _e_int_menus_main_about (void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_int_menus_main_run (void *data, E_Menu *m, E_Menu_Item*mi);
static void _e_int_menus_main_restart (void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_int_menus_main_exit (void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_int_menus_apps_scan (E_Menu *m);
@ -122,6 +123,13 @@ e_int_menus_main_new(void)
e_menu_item_icon_edje_set(mi, s, "e");
IF_FREE(s);
e_menu_item_callback_set(mi, _e_int_menus_main_about, NULL);
if (e_util_app_installed("exige"))
{
mi = e_menu_item_new(m);
e_menu_item_label_set(mi, _("Run Command"));
e_menu_item_callback_set(mi, _e_int_menus_main_run, NULL);
}
mi = e_menu_item_new(m);
e_menu_item_separator_set(mi, 1);
@ -249,6 +257,15 @@ _e_int_menus_main_about(void *data, E_Menu *m, E_Menu_Item *mi)
);
}
static void
_e_int_menus_main_run(void *data, E_Menu *m, E_Menu_Item *mi)
{
Ecore_Exe *exe;
exe = ecore_exe_run("exige", NULL);
if (exe) ecore_exe_free(exe);
}
static void
_e_int_menus_main_restart(void *data, E_Menu *m, E_Menu_Item *mi)
{

View File

@ -113,3 +113,29 @@ _e_util_wakeup_cb(void *data)
_e_util_dummy_timer = NULL;
return 0;
}
int
e_util_utils_installed(void)
{
return e_util_app_installed("emblem");
}
int
e_util_app_installed(char *app)
{
char *cmd, *tmp;
int ret, len;
if (!app)
return 0;
cmd = "which %s > /dev/null 2>&1";
len = strlen(cmd) + strlen(app) - 1; // -1 is -2 for "%s" and +1 for "\0"
tmp = malloc(len);
snprintf(tmp, len, cmd, app);
ret = system(tmp);
free(tmp);
return (ret == 0);
}

View File

@ -11,6 +11,8 @@ EAPI void e_util_container_fake_mouse_up_all_later(E_Container *con);
EAPI void e_util_wakeup(void);
EAPI void e_util_env_set(const char *var, const char *val);
EAPI E_Zone *e_util_zone_current_get(E_Manager *man);
EAPI int e_util_utils_installed(void);
EAPI int e_util_app_installed(char *app);
#endif
#endif