2005-02-07 05:51:09 -08:00
|
|
|
/*
|
|
|
|
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
|
|
|
|
*/
|
2004-11-24 19:37:45 -08:00
|
|
|
#include "e.h"
|
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI E_Path *path_data = NULL;
|
|
|
|
EAPI E_Path *path_images = NULL;
|
|
|
|
EAPI E_Path *path_fonts = NULL;
|
|
|
|
EAPI E_Path *path_themes = NULL;
|
|
|
|
EAPI E_Path *path_init = NULL;
|
|
|
|
EAPI E_Path *path_icons = NULL;
|
|
|
|
EAPI E_Path *path_modules = NULL;
|
|
|
|
EAPI E_Path *path_backgrounds = NULL;
|
|
|
|
EAPI E_Path *path_input_methods = NULL;
|
|
|
|
EAPI E_Path *path_messages = NULL;
|
|
|
|
EAPI int restart = 0;
|
|
|
|
EAPI int good = 0;
|
|
|
|
EAPI int evil = 0;
|
|
|
|
EAPI int starting = 1;
|
2005-09-24 21:58:18 -07:00
|
|
|
|
2004-11-24 19:37:45 -08:00
|
|
|
typedef struct _E_Util_Fake_Mouse_Up_Info E_Util_Fake_Mouse_Up_Info;
|
|
|
|
|
|
|
|
struct _E_Util_Fake_Mouse_Up_Info
|
|
|
|
{
|
2006-09-17 20:49:45 -07:00
|
|
|
Evas *evas;
|
2004-11-24 19:37:45 -08:00
|
|
|
int button;
|
|
|
|
};
|
|
|
|
|
|
|
|
/* local subsystem functions */
|
|
|
|
static void _e_util_container_fake_mouse_up_cb(void *data);
|
|
|
|
static int _e_util_wakeup_cb(void *data);
|
|
|
|
|
|
|
|
/* local subsystem globals */
|
|
|
|
static Ecore_Timer *_e_util_dummy_timer = NULL;
|
|
|
|
|
|
|
|
/* externally accessible functions */
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI void
|
2004-11-24 19:37:45 -08:00
|
|
|
e_util_container_fake_mouse_up_later(E_Container *con, int button)
|
|
|
|
{
|
2005-10-19 02:31:35 -07:00
|
|
|
E_OBJECT_CHECK(con);
|
|
|
|
E_OBJECT_TYPE_CHECK(con, E_CONTAINER_TYPE);
|
|
|
|
|
2006-09-17 20:49:45 -07:00
|
|
|
e_util_evas_fake_mouse_up_later(con->bg_evas, button);
|
2004-11-24 19:37:45 -08:00
|
|
|
}
|
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI void
|
2004-11-24 19:37:45 -08:00
|
|
|
e_util_container_fake_mouse_up_all_later(E_Container *con)
|
|
|
|
{
|
2005-10-19 02:31:35 -07:00
|
|
|
E_OBJECT_CHECK(con);
|
|
|
|
E_OBJECT_TYPE_CHECK(con, E_CONTAINER_TYPE);
|
|
|
|
|
2004-11-24 19:37:45 -08:00
|
|
|
e_util_container_fake_mouse_up_later(con, 1);
|
|
|
|
e_util_container_fake_mouse_up_later(con, 2);
|
|
|
|
e_util_container_fake_mouse_up_later(con, 3);
|
|
|
|
}
|
|
|
|
|
2006-09-17 20:49:45 -07:00
|
|
|
EAPI void
|
|
|
|
e_util_evas_fake_mouse_up_later(Evas *e, int button)
|
|
|
|
{
|
|
|
|
E_Util_Fake_Mouse_Up_Info *info;
|
|
|
|
|
|
|
|
info = calloc(1, sizeof(E_Util_Fake_Mouse_Up_Info));
|
|
|
|
if (info)
|
|
|
|
{
|
|
|
|
info->evas = e;
|
|
|
|
info->button = button;
|
|
|
|
ecore_job_add(_e_util_container_fake_mouse_up_cb, info);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI void
|
2004-11-24 19:37:45 -08:00
|
|
|
e_util_wakeup(void)
|
|
|
|
{
|
|
|
|
if (_e_util_dummy_timer) return;
|
|
|
|
_e_util_dummy_timer = ecore_timer_add(0.0, _e_util_wakeup_cb, NULL);
|
|
|
|
}
|
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI void
|
2005-04-14 02:09:22 -07:00
|
|
|
e_util_env_set(const char *var, const char *val)
|
|
|
|
{
|
|
|
|
if (val)
|
|
|
|
{
|
|
|
|
#ifdef HAVE_SETENV
|
|
|
|
setenv(var, val, 1);
|
|
|
|
#else
|
|
|
|
char buf[8192];
|
|
|
|
|
|
|
|
snprintf(buf, sizeof(buf), "%s=%s", var, val);
|
|
|
|
if (getenv(var))
|
|
|
|
putenv(buf);
|
|
|
|
else
|
|
|
|
putenv(strdup(buf));
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
#ifdef HAVE_UNSETENV
|
|
|
|
unsetenv(var);
|
|
|
|
#else
|
|
|
|
if (getenv(var)) putenv(var);
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI E_Zone *
|
2005-04-29 21:21:55 -07:00
|
|
|
e_util_zone_current_get(E_Manager *man)
|
|
|
|
{
|
|
|
|
E_Container *con;
|
|
|
|
|
2005-10-19 02:31:35 -07:00
|
|
|
E_OBJECT_CHECK_RETURN(man, NULL);
|
|
|
|
E_OBJECT_TYPE_CHECK_RETURN(man, E_MANAGER_TYPE, NULL);
|
2005-06-03 12:10:25 -07:00
|
|
|
con = e_container_current_get(man);
|
2005-04-29 21:21:55 -07:00
|
|
|
if (con)
|
|
|
|
{
|
|
|
|
E_Zone *zone;
|
|
|
|
|
|
|
|
zone = e_zone_current_get(con);
|
|
|
|
return zone;
|
|
|
|
}
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI int
|
2005-06-05 08:02:43 -07:00
|
|
|
e_util_utils_installed(void)
|
|
|
|
{
|
2005-06-11 06:32:29 -07:00
|
|
|
return ecore_file_app_installed("emblem");
|
2005-06-05 08:02:43 -07:00
|
|
|
}
|
|
|
|
|
2006-02-01 11:33:10 -08:00
|
|
|
EAPI int
|
|
|
|
e_util_app_installed(char *app)
|
|
|
|
{
|
|
|
|
return ecore_file_app_installed(app);
|
|
|
|
}
|
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI int
|
2005-08-30 21:49:05 -07:00
|
|
|
e_util_glob_match(const char *str, const char *glob)
|
2005-06-30 21:09:30 -07:00
|
|
|
{
|
2006-06-09 05:53:27 -07:00
|
|
|
if (!str || !glob)
|
|
|
|
return 0;
|
2005-06-30 21:09:30 -07:00
|
|
|
if (glob[0] == 0)
|
|
|
|
{
|
|
|
|
if (str[0] == 0) return 1;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
if (!strcmp(glob, "*")) return 1;
|
|
|
|
if (!fnmatch(glob, str, 0)) return 1;
|
|
|
|
return 0;
|
|
|
|
}
|
2005-07-02 06:33:53 -07:00
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI int
|
2005-12-14 07:54:51 -08:00
|
|
|
e_util_glob_case_match(const char *str, const char *glob)
|
|
|
|
{
|
2006-01-07 09:39:28 -08:00
|
|
|
const char *p;
|
|
|
|
char *tstr, *tglob, *tp;
|
2005-12-14 07:54:51 -08:00
|
|
|
|
|
|
|
if (glob[0] == 0)
|
|
|
|
{
|
|
|
|
if (str[0] == 0) return 1;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
if (!strcmp(glob, "*")) return 1;
|
|
|
|
tstr = alloca(strlen(str) + 1);
|
|
|
|
for (tp = tstr, p = str; *p != 0; p++, tp++) *tp = tolower(*p);
|
|
|
|
*tp = 0;
|
|
|
|
tglob = alloca(strlen(glob) + 1);
|
|
|
|
for (tp = tglob, p = glob; *p != 0; p++, tp++) *tp = tolower(*p);
|
|
|
|
*tp = 0;
|
|
|
|
if (!fnmatch(tglob, tstr, 0)) return 1;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI E_Container *
|
2005-07-02 06:33:53 -07:00
|
|
|
e_util_container_number_get(int num)
|
|
|
|
{
|
|
|
|
Evas_List *l;
|
|
|
|
|
|
|
|
for (l = e_manager_list(); l; l = l->next)
|
|
|
|
{
|
|
|
|
E_Manager *man;
|
|
|
|
E_Container *con;
|
|
|
|
|
|
|
|
man = l->data;
|
2005-08-25 06:41:26 -07:00
|
|
|
con = e_container_number_get(man, num);
|
2005-07-02 06:33:53 -07:00
|
|
|
if (con) return con;
|
|
|
|
}
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI E_Zone *
|
2005-07-02 06:33:53 -07:00
|
|
|
e_util_container_zone_number_get(int con_num, int zone_num)
|
|
|
|
{
|
|
|
|
E_Container *con;
|
|
|
|
|
|
|
|
con = e_util_container_number_get(con_num);
|
|
|
|
if (!con) return NULL;
|
|
|
|
return e_container_zone_number_get(con, zone_num);
|
|
|
|
}
|
2005-07-07 02:27:04 -07:00
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI int
|
2006-03-02 04:03:48 -08:00
|
|
|
e_util_head_exec(int head, const char *cmd)
|
2005-07-07 02:27:04 -07:00
|
|
|
{
|
|
|
|
char *penv_display;
|
|
|
|
char *p1, *p2;
|
|
|
|
char buf[4096], buf2[32];
|
|
|
|
int ok = 0;
|
|
|
|
Ecore_Exe *exe;
|
|
|
|
|
|
|
|
penv_display = getenv("DISPLAY");
|
|
|
|
if (penv_display) penv_display = strdup(penv_display);
|
|
|
|
/* set env vars */
|
|
|
|
p1 = strrchr(penv_display, ':');
|
|
|
|
p2 = strrchr(penv_display, '.');
|
|
|
|
if ((p1) && (p2) && (p2 > p1)) /* "blah:x.y" */
|
|
|
|
{
|
2006-04-29 21:31:42 -07:00
|
|
|
/* yes it could overflow... but who will overflow DISPLAY eh? why? to
|
2005-07-07 02:27:04 -07:00
|
|
|
* "exploit" your own applications running as you?
|
|
|
|
*/
|
|
|
|
strcpy(buf, penv_display);
|
|
|
|
buf[p2 - penv_display + 1] = 0;
|
|
|
|
snprintf(buf2, sizeof(buf2), "%i", head);
|
|
|
|
strcat(buf, buf2);
|
|
|
|
}
|
|
|
|
else if (p1) /* "blah:x */
|
|
|
|
{
|
|
|
|
strcpy(buf, penv_display);
|
|
|
|
snprintf(buf2, sizeof(buf2), ".%i", head);
|
|
|
|
strcat(buf, buf2);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
strcpy(buf, penv_display);
|
|
|
|
|
|
|
|
ok = 1;
|
|
|
|
exe = ecore_exe_run(cmd, NULL);
|
|
|
|
if (!exe)
|
|
|
|
{
|
2006-02-12 22:32:26 -08:00
|
|
|
e_util_dialog_show(_("Run Error"),
|
|
|
|
_("Enlightenment was unable to fork a child process:<br>"
|
|
|
|
"<br>"
|
|
|
|
"%s<br>"),
|
|
|
|
cmd);
|
2005-07-07 02:27:04 -07:00
|
|
|
ok = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* reset env vars */
|
|
|
|
if (penv_display)
|
|
|
|
{
|
|
|
|
e_util_env_set("DISPLAY", penv_display);
|
|
|
|
free(penv_display);
|
|
|
|
}
|
|
|
|
return ok;
|
|
|
|
}
|
2005-07-07 21:42:50 -07:00
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI int
|
2006-03-02 04:03:48 -08:00
|
|
|
e_util_strcmp(const char *s1, const char *s2)
|
2005-07-07 21:42:50 -07:00
|
|
|
{
|
|
|
|
if ((s1) && (s2))
|
|
|
|
return strcmp(s1, s2);
|
|
|
|
return 0x7fffffff;
|
|
|
|
}
|
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI int
|
2006-03-02 04:03:48 -08:00
|
|
|
e_util_both_str_empty(const char *s1, const char *s2)
|
2005-07-07 21:42:50 -07:00
|
|
|
{
|
|
|
|
int empty = 0;
|
|
|
|
|
|
|
|
if ((!s1) && (!s2)) return 1;
|
|
|
|
if ((!s1) || ((s1) && (s1[0] == 0))) empty++;
|
|
|
|
if ((!s2) || ((s2) && (s2[0] == 0))) empty++;
|
|
|
|
if (empty == 2) return 1;
|
|
|
|
return 0;
|
|
|
|
}
|
2005-07-08 01:43:27 -07:00
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI int
|
2005-07-08 01:43:27 -07:00
|
|
|
e_util_immortal_check(void)
|
|
|
|
{
|
|
|
|
Evas_List *wins;
|
|
|
|
|
|
|
|
wins = e_border_immortal_windows_get();
|
|
|
|
if (wins)
|
|
|
|
{
|
2006-02-12 22:32:26 -08:00
|
|
|
e_util_dialog_show(_("Cannot exit - immortal windows."),
|
|
|
|
_("Some windows are left still around with the Lifespan lock enabled. This means<br>"
|
|
|
|
"that Enlightenment will not allow itself to exit until these windows have<br>"
|
|
|
|
"been closed or have the lifespan lock removed.<br>"));
|
2005-07-08 01:43:27 -07:00
|
|
|
/* FIXME: should really display a list of these lifespan locked */
|
|
|
|
/* windows in a dialog and let the user disable their locks in */
|
|
|
|
/* this dialog */
|
|
|
|
evas_list_free(wins);
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
2005-07-30 00:46:05 -07:00
|
|
|
|
2006-10-01 11:21:31 -07:00
|
|
|
EAPI int
|
|
|
|
e_util_edje_icon_list_check(const char *list)
|
|
|
|
{
|
|
|
|
char *buf;
|
|
|
|
const char *p;
|
|
|
|
const char *c;
|
|
|
|
|
|
|
|
if ((!list) || (!list[0])) return 0;
|
|
|
|
buf = alloca(strlen(list) + 1);
|
|
|
|
p = list;
|
|
|
|
while (p)
|
|
|
|
{
|
|
|
|
c = strchr(p, ',');
|
|
|
|
if (c)
|
|
|
|
{
|
|
|
|
strncpy(buf, p, c - p);
|
|
|
|
buf[c - p] = 0;
|
|
|
|
if (e_util_edje_icon_check(buf)) return 1;
|
|
|
|
p = c + 1;
|
|
|
|
if (!*p) return 0;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
strcpy(buf, p);
|
|
|
|
if (e_util_edje_icon_check(buf)) return 1;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI int
|
2006-03-02 04:03:48 -08:00
|
|
|
e_util_edje_icon_list_set(Evas_Object *obj, const char *list)
|
2005-07-30 01:12:05 -07:00
|
|
|
{
|
|
|
|
char *buf;
|
2006-03-02 04:03:48 -08:00
|
|
|
const char *p;
|
|
|
|
const char *c;
|
2005-07-30 01:12:05 -07:00
|
|
|
|
2005-07-30 01:22:24 -07:00
|
|
|
if ((!list) || (!list[0])) return 0;
|
2005-12-14 23:12:00 -08:00
|
|
|
buf = alloca(strlen(list) + 1);
|
2005-07-30 01:12:05 -07:00
|
|
|
p = list;
|
|
|
|
while (p)
|
|
|
|
{
|
|
|
|
c = strchr(p, ',');
|
|
|
|
if (c)
|
|
|
|
{
|
|
|
|
strncpy(buf, p, c - p);
|
|
|
|
buf[c - p] = 0;
|
2005-12-14 23:12:00 -08:00
|
|
|
if (e_util_edje_icon_set(obj, buf)) return 1;
|
2005-07-30 01:12:05 -07:00
|
|
|
p = c + 1;
|
2005-12-14 23:12:00 -08:00
|
|
|
if (!*p) return 0;
|
2005-07-30 01:12:05 -07:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
strcpy(buf, p);
|
2005-12-14 23:12:00 -08:00
|
|
|
if (e_util_edje_icon_set(obj, buf)) return 1;
|
2005-10-13 21:18:01 -07:00
|
|
|
return 0;
|
2005-07-30 01:12:05 -07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI int
|
2006-03-02 04:03:48 -08:00
|
|
|
e_util_menu_item_edje_icon_list_set(E_Menu_Item *mi, const char *list)
|
2005-07-30 01:12:05 -07:00
|
|
|
{
|
|
|
|
char *buf;
|
2006-03-02 04:03:48 -08:00
|
|
|
const char *p;
|
|
|
|
char *c;
|
2005-07-30 01:12:05 -07:00
|
|
|
|
2005-07-30 01:22:24 -07:00
|
|
|
if ((!list) || (!list[0])) return 0;
|
2005-12-14 23:12:00 -08:00
|
|
|
buf = alloca(strlen(list) + 1);
|
2005-07-30 01:12:05 -07:00
|
|
|
p = list;
|
|
|
|
while (p)
|
|
|
|
{
|
|
|
|
c = strchr(p, ',');
|
|
|
|
if (c)
|
|
|
|
{
|
|
|
|
strncpy(buf, p, c - p);
|
|
|
|
buf[c - p] = 0;
|
2005-12-14 23:12:00 -08:00
|
|
|
if (e_util_menu_item_edje_icon_set(mi, buf)) return 1;
|
2005-07-30 01:12:05 -07:00
|
|
|
p = c + 1;
|
2005-12-14 23:12:00 -08:00
|
|
|
if (!*p) return 0;
|
2005-07-30 01:12:05 -07:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
strcpy(buf, p);
|
2005-12-14 23:12:00 -08:00
|
|
|
if (e_util_menu_item_edje_icon_set(mi, buf)) return 1;
|
|
|
|
return 0;
|
2005-07-30 01:12:05 -07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2006-10-01 11:21:31 -07:00
|
|
|
EAPI int
|
|
|
|
e_util_edje_icon_check(const char *name)
|
|
|
|
{
|
|
|
|
const char *file;
|
|
|
|
char buf[4096];
|
|
|
|
|
|
|
|
if ((!name) || (!name[0])) return 0;
|
|
|
|
snprintf(buf, sizeof(buf), "e/icons/%s", name);
|
|
|
|
file = e_theme_edje_file_get("base/theme/icons", buf);
|
|
|
|
if (file[0])
|
|
|
|
return 1;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI int
|
2006-03-02 04:03:48 -08:00
|
|
|
e_util_edje_icon_set(Evas_Object *obj, const char *name)
|
2005-07-30 00:46:05 -07:00
|
|
|
{
|
2006-08-21 09:19:24 -07:00
|
|
|
const char *file;
|
2005-07-30 00:46:05 -07:00
|
|
|
char buf[4096];
|
|
|
|
|
2005-07-30 01:12:05 -07:00
|
|
|
if ((!name) || (!name[0])) return 0;
|
2006-08-22 20:39:02 -07:00
|
|
|
snprintf(buf, sizeof(buf), "e/icons/%s", name);
|
2006-08-21 09:19:24 -07:00
|
|
|
file = e_theme_edje_file_get("base/theme/icons", buf);
|
2005-07-30 01:12:05 -07:00
|
|
|
if (file[0])
|
|
|
|
{
|
|
|
|
edje_object_file_set(obj, file, buf);
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
return 0;
|
2005-07-30 00:46:05 -07:00
|
|
|
}
|
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI int
|
2006-03-02 04:03:48 -08:00
|
|
|
e_util_menu_item_edje_icon_set(E_Menu_Item *mi, const char *name)
|
2005-07-30 00:46:05 -07:00
|
|
|
{
|
|
|
|
char *file;
|
|
|
|
char buf[4096];
|
|
|
|
|
2005-07-30 01:12:05 -07:00
|
|
|
if ((!name) || (!name[0])) return 0;
|
2006-08-22 20:39:02 -07:00
|
|
|
snprintf(buf, sizeof(buf), "e/icons/%s", name);
|
2005-07-30 00:46:05 -07:00
|
|
|
file = (char *)e_theme_edje_file_get("base/theme/icons", buf);
|
2005-07-30 01:12:05 -07:00
|
|
|
if (file[0])
|
|
|
|
{
|
|
|
|
e_menu_item_icon_edje_set(mi, file, buf);
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
return 0;
|
2005-07-30 00:46:05 -07:00
|
|
|
}
|
2005-08-22 20:50:02 -07:00
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI E_Container *
|
2005-08-22 20:50:02 -07:00
|
|
|
e_util_container_window_find(Ecore_X_Window win)
|
|
|
|
{
|
|
|
|
Evas_List *l, *ll;
|
|
|
|
|
|
|
|
for (l = e_manager_list(); l; l = l->next)
|
|
|
|
{
|
|
|
|
E_Manager *man;
|
|
|
|
|
|
|
|
man = l->data;
|
|
|
|
for (ll = man->containers; ll; ll = ll->next)
|
|
|
|
{
|
|
|
|
E_Container *con;
|
|
|
|
|
|
|
|
con = ll->data;
|
|
|
|
if ((con->win == win) || (con->bg_win == win) ||
|
|
|
|
(con->event_win == win))
|
|
|
|
return con;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return NULL;
|
|
|
|
}
|
2005-09-21 11:02:04 -07:00
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI E_Border *
|
2005-09-21 11:02:04 -07:00
|
|
|
e_util_desk_border_above(E_Border *bd)
|
|
|
|
{
|
|
|
|
E_Border *above = NULL;
|
|
|
|
Evas_List *l;
|
|
|
|
int pos, i;
|
|
|
|
|
2005-10-19 02:31:35 -07:00
|
|
|
E_OBJECT_CHECK_RETURN(bd, NULL);
|
|
|
|
E_OBJECT_TYPE_CHECK_RETURN(bd, E_BORDER_TYPE, NULL);
|
|
|
|
|
2005-09-21 11:02:04 -07:00
|
|
|
if (bd->layer == 0) pos = 0;
|
|
|
|
else if ((bd->layer > 0) && (bd->layer <= 50)) pos = 1;
|
|
|
|
else if ((bd->layer > 50) && (bd->layer <= 100)) pos = 2;
|
|
|
|
else if ((bd->layer > 100) && (bd->layer <= 150)) pos = 3;
|
|
|
|
else if ((bd->layer > 150) && (bd->layer <= 200)) pos = 4;
|
|
|
|
else pos = 5;
|
|
|
|
|
|
|
|
for (l = evas_list_find_list(bd->zone->container->layers[pos].clients, bd);
|
|
|
|
(l) && (l->next) && (!above);
|
|
|
|
l = l->next)
|
|
|
|
{
|
|
|
|
above = l->next->data;
|
|
|
|
if ((above->desk != bd->desk) && (!above->sticky))
|
|
|
|
above = NULL;
|
|
|
|
}
|
|
|
|
if (!above)
|
|
|
|
{
|
|
|
|
/* Need to check the layers above */
|
|
|
|
for (i = pos + 1; (i < 7) && (!above); i++)
|
|
|
|
{
|
|
|
|
for (l = bd->zone->container->layers[i].clients;
|
|
|
|
(l) && (!above);
|
|
|
|
l = l->next)
|
|
|
|
{
|
|
|
|
above = l->data;
|
|
|
|
if ((above->desk != bd->desk) && (!above->sticky))
|
|
|
|
above = NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return above;
|
|
|
|
}
|
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
EAPI E_Border *
|
2005-09-21 11:02:04 -07:00
|
|
|
e_util_desk_border_below(E_Border *bd)
|
|
|
|
{
|
|
|
|
E_Border *below = NULL;
|
|
|
|
Evas_List *l;
|
|
|
|
int pos, i;
|
|
|
|
|
2005-10-19 02:31:35 -07:00
|
|
|
E_OBJECT_CHECK_RETURN(bd, NULL);
|
|
|
|
E_OBJECT_TYPE_CHECK_RETURN(bd, E_BORDER_TYPE, NULL);
|
|
|
|
|
2005-09-21 11:02:04 -07:00
|
|
|
if (bd->layer == 0) pos = 0;
|
|
|
|
else if ((bd->layer > 0) && (bd->layer <= 50)) pos = 1;
|
|
|
|
else if ((bd->layer > 50) && (bd->layer <= 100)) pos = 2;
|
|
|
|
else if ((bd->layer > 100) && (bd->layer <= 150)) pos = 3;
|
|
|
|
else if ((bd->layer > 150) && (bd->layer <= 200)) pos = 4;
|
|
|
|
else pos = 5;
|
|
|
|
|
|
|
|
for (l = evas_list_find_list(bd->zone->container->layers[pos].clients, bd);
|
|
|
|
(l) && (l->prev) && (!below);
|
|
|
|
l = l->prev)
|
|
|
|
{
|
|
|
|
below = l->prev->data;
|
|
|
|
if ((below->desk != bd->desk) && (!below->sticky))
|
|
|
|
below = NULL;
|
|
|
|
}
|
|
|
|
if (!below)
|
|
|
|
{
|
|
|
|
/* Need to check the layers below */
|
|
|
|
for (i = pos - 1; (i >= 0) && (!below); i--)
|
|
|
|
{
|
|
|
|
if (bd->zone->container->layers[i].clients)
|
|
|
|
{
|
|
|
|
for (l = evas_list_last(bd->zone->container->layers[i].clients);
|
|
|
|
(l) && (!below);
|
|
|
|
l = l->prev)
|
|
|
|
{
|
|
|
|
below = l->data;
|
|
|
|
if ((below->desk != bd->desk) && (!below->sticky))
|
|
|
|
below = NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return below;
|
|
|
|
}
|
2006-01-07 02:39:46 -08:00
|
|
|
|
2006-01-12 15:35:32 -08:00
|
|
|
EAPI int
|
2006-03-02 04:03:48 -08:00
|
|
|
e_util_edje_collection_exists(const char *file, const char *coll)
|
2006-01-12 15:35:32 -08:00
|
|
|
{
|
|
|
|
Evas_List *clist, *l;
|
|
|
|
|
|
|
|
clist = edje_file_collection_list(file);
|
|
|
|
for (l = clist; l; l = l->next)
|
|
|
|
{
|
|
|
|
if (!strcmp(coll, l->data))
|
|
|
|
{
|
|
|
|
edje_file_collection_list_free(clist);
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
edje_file_collection_list_free(clist);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2006-02-12 22:32:26 -08:00
|
|
|
EAPI void
|
2006-03-02 04:03:48 -08:00
|
|
|
e_util_dialog_internal(const char *title, const char *txt)
|
2006-02-12 22:32:26 -08:00
|
|
|
{
|
|
|
|
E_Dialog *dia;
|
|
|
|
|
2006-08-14 08:22:46 -07:00
|
|
|
dia = e_dialog_new(e_container_current_get(e_manager_current_get()), "E", "_error_dialog");
|
2006-02-12 22:32:26 -08:00
|
|
|
if (!dia) return;
|
|
|
|
e_dialog_title_set(dia, title);
|
|
|
|
e_dialog_text_set(dia, txt);
|
|
|
|
e_dialog_icon_set(dia, "enlightenment/error", 64);
|
|
|
|
e_dialog_button_add(dia, _("OK"), NULL, NULL, NULL);
|
|
|
|
e_dialog_button_focus_num(dia, 0);
|
|
|
|
e_win_centered_set(dia->win, 1);
|
|
|
|
e_dialog_show(dia);
|
|
|
|
}
|
|
|
|
|
2006-05-13 08:20:15 -07:00
|
|
|
EAPI const char *
|
|
|
|
e_util_filename_escape(const char *filename)
|
|
|
|
{
|
2006-05-31 09:31:51 -07:00
|
|
|
const char *p;
|
|
|
|
char *q;
|
2006-05-13 08:20:15 -07:00
|
|
|
static char buf[4096];
|
|
|
|
|
|
|
|
p = filename;
|
|
|
|
q = buf;
|
|
|
|
while (*p)
|
|
|
|
{
|
|
|
|
if ((q - buf) > 4090) return NULL;
|
|
|
|
if (
|
|
|
|
(*p == ' ') || (*p == '\t') || (*p == '\n') ||
|
|
|
|
(*p == '\\') || (*p == '\'') || (*p == '\"') ||
|
|
|
|
(*p == ';') || (*p == '!') || (*p == '#') ||
|
|
|
|
(*p == '$') || (*p == '%') || (*p == '&') ||
|
|
|
|
(*p == '*') || (*p == '(') || (*p == ')') ||
|
|
|
|
(*p == '[') || (*p == ']') || (*p == '{') ||
|
|
|
|
(*p == '}') || (*p == '|') || (*p == '<') ||
|
|
|
|
(*p == '>') || (*p == '?')
|
|
|
|
)
|
|
|
|
{
|
|
|
|
*q = '\\';
|
|
|
|
q++;
|
|
|
|
}
|
|
|
|
*q = *p;
|
|
|
|
q++;
|
|
|
|
p++;
|
|
|
|
}
|
2006-05-13 09:05:15 -07:00
|
|
|
*q = 0;
|
2006-05-13 08:20:15 -07:00
|
|
|
return buf;
|
|
|
|
}
|
|
|
|
|
2006-07-18 18:39:43 -07:00
|
|
|
EAPI int
|
2006-07-19 04:59:22 -07:00
|
|
|
e_util_icon_save(Ecore_X_Icon *icon, const char *filename)
|
2006-07-18 18:39:43 -07:00
|
|
|
{
|
|
|
|
Ecore_Evas *ee;
|
|
|
|
Evas *evas;
|
|
|
|
Evas_Object *im;
|
|
|
|
int ret;
|
|
|
|
|
|
|
|
ee = ecore_evas_buffer_new(icon->width, icon->height);
|
|
|
|
if (!ee) return 0;
|
|
|
|
evas = ecore_evas_get(ee);
|
|
|
|
evas_image_cache_set(evas, 0);
|
|
|
|
evas_font_cache_set(evas, 0);
|
|
|
|
|
|
|
|
im = evas_object_image_add(evas);
|
|
|
|
if (!im)
|
|
|
|
{
|
|
|
|
ecore_evas_free(ee);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
evas_object_move(im, 0, 0);
|
|
|
|
evas_object_resize(im, icon->width, icon->height);
|
|
|
|
evas_object_image_size_set(im, icon->width, icon->height);
|
|
|
|
evas_object_image_data_copy_set(im, icon->data);
|
2006-07-19 04:59:22 -07:00
|
|
|
evas_object_image_alpha_set(im, 1);
|
2006-07-18 18:39:43 -07:00
|
|
|
evas_object_show(im);
|
|
|
|
ret = evas_object_image_save(im, filename, NULL, NULL);
|
|
|
|
evas_object_del(im);
|
|
|
|
ecore_evas_free(ee);
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
2006-07-22 14:48:24 -07:00
|
|
|
EAPI char *
|
|
|
|
e_util_shell_env_path_eval(char *path)
|
|
|
|
{
|
|
|
|
/* evaluate things like:
|
|
|
|
* $HOME/bling -> /home/user/bling
|
|
|
|
* $HOME/bin/$HOSTNAME/blah -> /home/user/bin/localhost/blah
|
|
|
|
* etc. etc.
|
|
|
|
*/
|
|
|
|
char buf[4096], *pd, *p, *v1, *v2, *s, *v, *vp;
|
|
|
|
int esc = 0, invar = 0;
|
|
|
|
|
|
|
|
for (p = path, pd = buf; (pd < (buf + sizeof(buf) - 1)); p++)
|
|
|
|
{
|
|
|
|
if (invar)
|
|
|
|
{
|
|
|
|
if (!((isalnum(*p)) || (*p == '_')))
|
|
|
|
{
|
|
|
|
v2 = p;
|
|
|
|
invar = 0;
|
|
|
|
if ((v2 - v1) > 1)
|
|
|
|
{
|
|
|
|
s = alloca(v2 - v1);
|
|
|
|
strncpy(s, v1 + 1, v2 - v1 - 1);
|
|
|
|
s[v2 - v1 - 1] = 0;
|
|
|
|
v = getenv(s);
|
|
|
|
if (v)
|
|
|
|
{
|
|
|
|
vp = v;
|
|
|
|
while ((*vp) && (pd < (buf + sizeof(buf) - 1)))
|
|
|
|
{
|
|
|
|
*pd = *vp;
|
|
|
|
vp++;
|
|
|
|
pd++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (pd < (buf + sizeof(buf) - 1))
|
|
|
|
{
|
|
|
|
*pd = *p;
|
|
|
|
pd++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (esc)
|
|
|
|
{
|
|
|
|
*pd = *p;
|
|
|
|
pd++;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (*p == '\\') esc = 1;
|
|
|
|
else if (*p == '$')
|
|
|
|
{
|
|
|
|
invar = 1;
|
|
|
|
v1 = p;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
*pd = *p;
|
|
|
|
pd++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (*p == 0) break;
|
|
|
|
}
|
|
|
|
*pd = 0;
|
|
|
|
return strdup(buf);
|
|
|
|
}
|
|
|
|
|
2006-01-07 02:39:46 -08:00
|
|
|
/* local subsystem functions */
|
|
|
|
static void
|
|
|
|
_e_util_container_fake_mouse_up_cb(void *data)
|
|
|
|
{
|
|
|
|
E_Util_Fake_Mouse_Up_Info *info;
|
|
|
|
|
|
|
|
info = data;
|
|
|
|
if (info)
|
|
|
|
{
|
2006-09-17 20:49:45 -07:00
|
|
|
evas_event_feed_mouse_up(info->evas, info->button, EVAS_BUTTON_NONE,
|
|
|
|
ecore_x_current_time_get(), NULL);
|
2006-01-07 02:39:46 -08:00
|
|
|
free(info);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static int
|
|
|
|
_e_util_wakeup_cb(void *data)
|
|
|
|
{
|
|
|
|
_e_util_dummy_timer = NULL;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|