forked from enlightenment/enlightenment
e17 can build apps menu (right mosue click on desktop) from
"/usr/share/gnome/apps" dir now (/usr/share/pixmaps is hardcoded to pixmap dir... need to figre this right... but it can be done...) :) qworks quite ok.. :) SVN revision: 4424
This commit is contained in:
parent
49685ab578
commit
e59150b4a8
|
@ -21,7 +21,7 @@ ipc.c \
|
|||
keys.c \
|
||||
main.c \
|
||||
menu.c \
|
||||
menudb.c \
|
||||
menubuild.c \
|
||||
pack.c \
|
||||
resist.c \
|
||||
shelf.c \
|
||||
|
|
5
src/e.h
5
src/e.h
|
@ -774,6 +774,7 @@ void *e_memdup(void *data, int size);
|
|||
int e_glob_matches(char *str, char *glob);
|
||||
int e_file_can_exec(struct stat *st);
|
||||
char *e_file_link(char *link);
|
||||
Evas_List e_file_list_dir(char *dir);
|
||||
|
||||
void e_exec_set_args(int argc, char **argv);
|
||||
void e_exec_restart(void);
|
||||
|
@ -959,11 +960,9 @@ void e_menu_item_set_scale_icon(E_Menu_Item *mi, int scale);
|
|||
void e_menu_set_padding_icon(E_Menu *m, int pad);
|
||||
void e_menu_set_padding_state(E_Menu *m, int pad);
|
||||
|
||||
void e_build_menu_unbuild(E_Build_Menu *bm);
|
||||
E_Menu *e_build_menu_build_number(E_Build_Menu *bm, E_DB_File *db, int num);
|
||||
void e_build_menu_build(E_Build_Menu *bm);
|
||||
void e_build_menu_free(E_Build_Menu *bm);
|
||||
E_Build_Menu *e_build_menu_new_from_db(char *file);
|
||||
E_Build_Menu *e_build_menu_new_from_gnome_apps(char *dir);
|
||||
|
||||
void e_fs_add_event_handler(void (*func) (EfsdEvent *ev));
|
||||
void e_fs_init(void);
|
||||
|
|
|
@ -0,0 +1,406 @@
|
|||
#include "e.h"
|
||||
|
||||
Evas_List build_menus = NULL;
|
||||
|
||||
static void e_build_menu_cb_exec(E_Menu *m, E_Menu_Item *mi, void *data);
|
||||
|
||||
static void e_build_menu_unbuild(E_Build_Menu *bm);
|
||||
|
||||
static void e_build_menu_db_poll(int val, void *data);
|
||||
static E_Menu *e_build_menu_db_build_number(E_Build_Menu *bm, E_DB_File *db, int num);
|
||||
static void e_build_menu_db_build(E_Build_Menu *bm);
|
||||
|
||||
static void e_build_menu_gnome_apps_poll(int val, void *data);
|
||||
static void e_build_menu_gnome_apps_build(E_Build_Menu *bm);
|
||||
|
||||
static void
|
||||
e_build_menu_cb_exec(E_Menu *m, E_Menu_Item *mi, void *data)
|
||||
{
|
||||
char *exe;
|
||||
|
||||
exe = data;
|
||||
e_exec_run(exe);
|
||||
return;
|
||||
UN(m);
|
||||
UN(mi);
|
||||
}
|
||||
|
||||
static void
|
||||
e_build_menu_unbuild(E_Build_Menu *bm)
|
||||
{
|
||||
Evas_List l;
|
||||
|
||||
bm->menu = NULL;
|
||||
if (bm->menus)
|
||||
{
|
||||
for (l = bm->menus; l; l = l->next)
|
||||
{
|
||||
E_Menu *m;
|
||||
|
||||
m = l->data;
|
||||
e_menu_hide(m);
|
||||
e_menu_update_shows(m);
|
||||
e_menu_update_hides(m);
|
||||
e_menu_update_finish(m);
|
||||
OBJ_DO_FREE(m);
|
||||
}
|
||||
bm->menus = evas_list_free(bm->menus);
|
||||
}
|
||||
if (bm->commands)
|
||||
{
|
||||
for (l = bm->commands; l; l = l->next)
|
||||
{
|
||||
IF_FREE(l->data);
|
||||
}
|
||||
bm->commands = evas_list_free(bm->commands);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* BUILDING from DB's */
|
||||
|
||||
|
||||
static void
|
||||
e_build_menu_db_poll(int val, void *data)
|
||||
{
|
||||
time_t mod;
|
||||
E_Build_Menu *bm;
|
||||
|
||||
bm = data;
|
||||
mod = e_file_modified_time(bm->file);
|
||||
if (mod <= bm->mod_time)
|
||||
{
|
||||
e_add_event_timer(bm->file, 1.0, e_build_menu_db_poll, 0, data);
|
||||
return;
|
||||
}
|
||||
bm->mod_time = mod;
|
||||
|
||||
e_build_menu_unbuild(bm);
|
||||
e_build_menu_db_build(bm);
|
||||
if (!bm->menu) bm->mod_time = 0;
|
||||
|
||||
e_add_event_timer(bm->file, 1.0, e_build_menu_db_poll, 0, data);
|
||||
return;
|
||||
UN(val);
|
||||
}
|
||||
|
||||
static void
|
||||
e_build_menu_gnome_apps_poll(int val, void *data)
|
||||
{
|
||||
time_t mod;
|
||||
E_Build_Menu *bm;
|
||||
|
||||
bm = data;
|
||||
mod = e_file_modified_time(bm->file);
|
||||
if (mod <= bm->mod_time)
|
||||
{
|
||||
e_add_event_timer(bm->file, 1.0, e_build_menu_gnome_apps_poll, 0, data);
|
||||
return;
|
||||
}
|
||||
bm->mod_time = mod;
|
||||
|
||||
e_build_menu_unbuild(bm);
|
||||
e_build_menu_gnome_apps_build(bm);
|
||||
if (!bm->menu) bm->mod_time = 0;
|
||||
|
||||
e_add_event_timer(bm->file, 1.0, e_build_menu_gnome_apps_poll, 0, data);
|
||||
return;
|
||||
UN(val);
|
||||
}
|
||||
|
||||
static E_Menu *
|
||||
e_build_menu_db_build_number(E_Build_Menu *bm, E_DB_File *db, int num)
|
||||
{
|
||||
E_Menu *menu;
|
||||
char buf[4096];
|
||||
int num2, i2;
|
||||
|
||||
sprintf(buf, "/menu/%i/count", num);
|
||||
if (!e_db_int_get(db, buf, &num2)) return NULL;
|
||||
menu = e_menu_new();
|
||||
e_menu_set_padding_icon(menu, 2);
|
||||
e_menu_set_padding_state(menu, 2);
|
||||
for (i2 = 0; i2 < num2; i2++)
|
||||
{
|
||||
E_Menu_Item *menuitem;
|
||||
char *text, *icon, *exe;
|
||||
int ok, sub, sep;
|
||||
|
||||
sprintf(buf, "/menu/%i/%i/text", num, i2);
|
||||
text = e_db_str_get(db, buf);
|
||||
sprintf(buf, "/menu/%i/%i/icon", num, i2);
|
||||
icon = e_db_str_get(db, buf);
|
||||
sprintf(buf, "/menu/%i/%i/command", num, i2);
|
||||
exe = e_db_str_get(db, buf);
|
||||
sprintf(buf, "/menu/%i/%i/submenu", num, i2);
|
||||
ok = e_db_int_get(db, buf, &sub);
|
||||
sep = 0;
|
||||
sprintf(buf, "/menu/%i/%i/separator", num, i2);
|
||||
e_db_int_get(db, buf, &sep);
|
||||
menuitem = e_menu_item_new(text);
|
||||
e_menu_item_set_icon(menuitem, icon);
|
||||
if ((icon) && (text)) e_menu_item_set_scale_icon(menuitem, 1);
|
||||
IF_FREE(text);
|
||||
IF_FREE(icon);
|
||||
if (sep) e_menu_item_set_separator(menuitem, 1);
|
||||
else
|
||||
{
|
||||
if (ok)
|
||||
{
|
||||
E_Menu *menu2;
|
||||
|
||||
menu2 = e_build_menu_db_build_number(bm, db, sub);
|
||||
e_menu_item_set_submenu(menuitem, menu2);
|
||||
}
|
||||
}
|
||||
if (exe)
|
||||
{
|
||||
e_menu_item_set_callback(menuitem, e_build_menu_cb_exec, exe);
|
||||
bm->commands = evas_list_prepend(bm->commands, exe);
|
||||
}
|
||||
e_menu_add_item(menu, menuitem);
|
||||
}
|
||||
bm->menus = evas_list_prepend(bm->menus, menu);
|
||||
return menu;
|
||||
}
|
||||
|
||||
static void
|
||||
e_build_menu_db_build(E_Build_Menu *bm)
|
||||
{
|
||||
E_DB_File *db;
|
||||
int num;
|
||||
|
||||
e_db_flush();
|
||||
db = e_db_open_read(bm->file);
|
||||
if (!db) return;
|
||||
|
||||
if (!e_db_int_get(db, "/menu/count", &num)) goto error;
|
||||
if (num > 0) bm->menu = e_build_menu_db_build_number(bm, db, 0);
|
||||
error:
|
||||
e_db_close(db);
|
||||
}
|
||||
|
||||
|
||||
/* BUILD from GNOME APPS directory structure */
|
||||
|
||||
|
||||
static E_Menu *
|
||||
e_build_menu_gnome_apps_build_dir(E_Build_Menu *bm, char *dir)
|
||||
{
|
||||
E_Menu *menu = NULL;
|
||||
Evas_List l, entries = NULL;
|
||||
|
||||
menu = e_menu_new();
|
||||
e_menu_set_padding_icon(menu, 2);
|
||||
e_menu_set_padding_state(menu, 2);
|
||||
/* build the order of things to scan ...*/
|
||||
{
|
||||
FILE *f;
|
||||
char buf[4096];
|
||||
Evas_List dirlist = NULL;
|
||||
|
||||
/* read .order file */
|
||||
sprintf(buf, "%s/.order", dir);
|
||||
f = fopen(buf, "rb");
|
||||
if (f)
|
||||
{
|
||||
while (fgets(buf, 4096, f))
|
||||
{
|
||||
int buf_len;
|
||||
|
||||
buf_len = strlen(buf);
|
||||
if (buf_len > 0)
|
||||
{
|
||||
if (buf[buf_len - 1] == '\n')
|
||||
buf[buf_len - 1] = 0;
|
||||
entries = evas_list_append(entries, strdup(buf));
|
||||
}
|
||||
}
|
||||
fclose(f);
|
||||
}
|
||||
/* read dir listing in alphabetical order and use that to suppliment */
|
||||
dirlist = e_file_list_dir(dir);
|
||||
for (l = dirlist; l; l = l->next)
|
||||
{
|
||||
char *s;
|
||||
|
||||
s = l->data;
|
||||
/* if it isnt a "dot" file or dir */
|
||||
if (s[0] != '.')
|
||||
{
|
||||
Evas_List ll;
|
||||
int have_it;
|
||||
|
||||
have_it = 0;
|
||||
for (ll = entries; ll; ll = ll->next)
|
||||
{
|
||||
if (!strcmp(ll->data, s))
|
||||
{
|
||||
have_it = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!have_it)
|
||||
entries = evas_list_append(entries, strdup(s));
|
||||
}
|
||||
free(s);
|
||||
}
|
||||
if (dirlist) evas_list_free(dirlist);
|
||||
}
|
||||
/* now go thru list... */
|
||||
for (l = entries; l; l = l->next)
|
||||
{
|
||||
char *s;
|
||||
char buf[4096];
|
||||
E_Menu_Item *menuitem;
|
||||
char *icon, *name, *exe;
|
||||
E_Menu *sub;
|
||||
FILE *f;
|
||||
|
||||
f = NULL;
|
||||
icon = NULL;
|
||||
exe = NULL;
|
||||
name = NULL;
|
||||
sub = NULL;
|
||||
s = l->data;
|
||||
sprintf(buf, "%s/%s", dir, s);
|
||||
/* if its a subdir... */
|
||||
if (e_file_is_dir(buf))
|
||||
{
|
||||
sub = e_build_menu_gnome_apps_build_dir(bm, buf);
|
||||
sprintf(buf, "%s/%s/.directory", dir, s);
|
||||
|
||||
f = fopen(buf, "rb");
|
||||
}
|
||||
/* regular file */
|
||||
else
|
||||
{
|
||||
sprintf(buf, "%s/%s", dir, s);
|
||||
|
||||
f = fopen(buf, "rb");
|
||||
}
|
||||
if (f)
|
||||
{
|
||||
while (fgets(buf, 4096, f))
|
||||
{
|
||||
int buf_len;
|
||||
|
||||
buf_len = strlen(buf);
|
||||
if (buf_len > 0)
|
||||
{
|
||||
if (buf[buf_len - 1] == '\n')
|
||||
buf[buf_len - 1] = 0;
|
||||
/* look for Name= */
|
||||
if ((!name) &&
|
||||
(((e_glob_matches(buf, "Name[en]=*")) ||
|
||||
(e_glob_matches(buf, "Name=*")))))
|
||||
{
|
||||
char *eq;
|
||||
|
||||
eq = strchr(buf, '=');
|
||||
if (eq)
|
||||
name = strdup(eq + 1);
|
||||
}
|
||||
/* look for Icon= */
|
||||
else if ((!icon) &&
|
||||
((e_glob_matches(buf, "Icon=*"))))
|
||||
{
|
||||
char *eq;
|
||||
|
||||
eq = strchr(buf, '=');
|
||||
if (eq)
|
||||
{
|
||||
char buf2[4096];
|
||||
|
||||
sprintf(buf2, "/usr/share/pixmaps/%s", eq +1);
|
||||
icon = strdup(buf2);
|
||||
}
|
||||
}
|
||||
/* look for Icon= */
|
||||
else if ((!exe) &&
|
||||
((e_glob_matches(buf, "Exec=*"))))
|
||||
{
|
||||
char *eq;
|
||||
|
||||
eq = strchr(buf, '=');
|
||||
if (eq)
|
||||
exe = strdup(eq + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
fclose(f);
|
||||
}
|
||||
|
||||
if (!name) name = strdup(s);
|
||||
menuitem = e_menu_item_new(name);
|
||||
if (icon) e_menu_item_set_icon(menuitem, icon);
|
||||
if ((icon) && (name)) e_menu_item_set_scale_icon(menuitem, 1);
|
||||
if (exe)
|
||||
{
|
||||
e_menu_item_set_callback(menuitem, e_build_menu_cb_exec, exe);
|
||||
bm->commands = evas_list_prepend(bm->commands, exe);
|
||||
}
|
||||
if (sub) e_menu_item_set_submenu(menuitem, sub);
|
||||
e_menu_add_item(menu, menuitem);
|
||||
|
||||
IF_FREE(name);
|
||||
IF_FREE(icon);
|
||||
free(s);
|
||||
}
|
||||
if (entries) evas_list_free(entries);
|
||||
bm->menus = evas_list_prepend(bm->menus, menu);
|
||||
return menu;
|
||||
}
|
||||
|
||||
static void
|
||||
e_build_menu_gnome_apps_build(E_Build_Menu *bm)
|
||||
{
|
||||
E_Menu *menu;
|
||||
|
||||
menu = e_build_menu_gnome_apps_build_dir(bm, bm->file);
|
||||
bm->menu = menu;
|
||||
}
|
||||
|
||||
void
|
||||
e_build_menu_free(E_Build_Menu *bm)
|
||||
{
|
||||
e_del_event_timer(bm->file);
|
||||
e_build_menu_unbuild(bm);
|
||||
IF_FREE(bm->file);
|
||||
build_menus = evas_list_remove(build_menus, bm);
|
||||
FREE(bm);
|
||||
}
|
||||
|
||||
E_Build_Menu *
|
||||
e_build_menu_new_from_db(char *file)
|
||||
{
|
||||
E_Build_Menu *bm;
|
||||
|
||||
if (!file) return NULL;
|
||||
bm = NEW(E_Build_Menu, 1);
|
||||
ZERO(bm, E_Build_Menu, 1);
|
||||
OBJ_INIT(bm, e_build_menu_free);
|
||||
|
||||
bm->file = strdup(file);
|
||||
|
||||
build_menus = evas_list_prepend(build_menus, bm);
|
||||
e_build_menu_db_poll(0, bm);
|
||||
return bm;
|
||||
}
|
||||
|
||||
E_Build_Menu *
|
||||
e_build_menu_new_from_gnome_apps(char *dir)
|
||||
{
|
||||
E_Build_Menu *bm;
|
||||
|
||||
if (!dir) return NULL;
|
||||
bm = NEW(E_Build_Menu, 1);
|
||||
ZERO(bm, E_Build_Menu, 1);
|
||||
OBJ_INIT(bm, e_build_menu_free);
|
||||
|
||||
bm->file = strdup(dir);
|
||||
|
||||
build_menus = evas_list_prepend(build_menus, bm);
|
||||
e_build_menu_gnome_apps_poll(0, bm);
|
||||
return bm;
|
||||
}
|
171
src/menudb.c
171
src/menudb.c
|
@ -1,171 +0,0 @@
|
|||
#include "e.h"
|
||||
|
||||
Evas_List build_menus = NULL;
|
||||
|
||||
static void e_build_menu_poll(int val, void *data);
|
||||
|
||||
static void
|
||||
e_build_menu_poll(int val, void *data)
|
||||
{
|
||||
time_t mod;
|
||||
E_Build_Menu *bm;
|
||||
|
||||
bm = data;
|
||||
mod = e_file_modified_time(bm->file);
|
||||
if (mod <= bm->mod_time)
|
||||
{
|
||||
e_add_event_timer(bm->file, 1.0, e_build_menu_poll, 0, data);
|
||||
return;
|
||||
}
|
||||
bm->mod_time = mod;
|
||||
|
||||
e_build_menu_unbuild(bm);
|
||||
e_build_menu_build(bm);
|
||||
if (!bm->menu) bm->mod_time = 0;
|
||||
|
||||
e_add_event_timer(bm->file, 1.0, e_build_menu_poll, 0, data);
|
||||
return;
|
||||
UN(val);
|
||||
}
|
||||
|
||||
static void
|
||||
e_build_menu_cb_exec(E_Menu *m, E_Menu_Item *mi, void *data)
|
||||
{
|
||||
char *exe;
|
||||
|
||||
exe = data;
|
||||
e_exec_run(exe);
|
||||
return;
|
||||
UN(m);
|
||||
UN(mi);
|
||||
}
|
||||
|
||||
void
|
||||
e_build_menu_unbuild(E_Build_Menu *bm)
|
||||
{
|
||||
Evas_List l;
|
||||
|
||||
bm->menu = NULL;
|
||||
if (bm->menus)
|
||||
{
|
||||
for (l = bm->menus; l; l = l->next)
|
||||
{
|
||||
E_Menu *m;
|
||||
|
||||
m = l->data;
|
||||
e_menu_hide(m);
|
||||
e_menu_update_shows(m);
|
||||
e_menu_update_hides(m);
|
||||
e_menu_update_finish(m);
|
||||
OBJ_DO_FREE(m);
|
||||
}
|
||||
bm->menus = evas_list_free(bm->menus);
|
||||
}
|
||||
if (bm->commands)
|
||||
{
|
||||
for (l = bm->commands; l; l = l->next)
|
||||
{
|
||||
IF_FREE(l->data);
|
||||
}
|
||||
bm->commands = evas_list_free(bm->commands);
|
||||
}
|
||||
}
|
||||
|
||||
E_Menu *
|
||||
e_build_menu_build_number(E_Build_Menu *bm, E_DB_File *db, int num)
|
||||
{
|
||||
E_Menu *menu;
|
||||
char buf[4096];
|
||||
int num2, i2;
|
||||
|
||||
sprintf(buf, "/menu/%i/count", num);
|
||||
if (!e_db_int_get(db, buf, &num2)) return NULL;
|
||||
menu = e_menu_new();
|
||||
e_menu_set_padding_icon(menu, 2);
|
||||
e_menu_set_padding_state(menu, 2);
|
||||
for (i2 = 0; i2 < num2; i2++)
|
||||
{
|
||||
E_Menu_Item *menuitem;
|
||||
char *text, *icon, *exe;
|
||||
int ok, sub, sep;
|
||||
|
||||
sprintf(buf, "/menu/%i/%i/text", num, i2);
|
||||
text = e_db_str_get(db, buf);
|
||||
sprintf(buf, "/menu/%i/%i/icon", num, i2);
|
||||
icon = e_db_str_get(db, buf);
|
||||
sprintf(buf, "/menu/%i/%i/command", num, i2);
|
||||
exe = e_db_str_get(db, buf);
|
||||
sprintf(buf, "/menu/%i/%i/submenu", num, i2);
|
||||
ok = e_db_int_get(db, buf, &sub);
|
||||
sep = 0;
|
||||
sprintf(buf, "/menu/%i/%i/separator", num, i2);
|
||||
e_db_int_get(db, buf, &sep);
|
||||
menuitem = e_menu_item_new(text);
|
||||
e_menu_item_set_icon(menuitem, icon);
|
||||
if ((icon) && (text)) e_menu_item_set_scale_icon(menuitem, 1);
|
||||
IF_FREE(text);
|
||||
IF_FREE(icon);
|
||||
if (sep) e_menu_item_set_separator(menuitem, 1);
|
||||
else
|
||||
{
|
||||
if (ok)
|
||||
{
|
||||
E_Menu *menu2;
|
||||
|
||||
menu2 = e_build_menu_build_number(bm, db, sub);
|
||||
e_menu_item_set_submenu(menuitem, menu2);
|
||||
}
|
||||
}
|
||||
if (exe)
|
||||
{
|
||||
e_menu_item_set_callback(menuitem, e_build_menu_cb_exec, exe);
|
||||
bm->commands = evas_list_prepend(bm->commands, exe);
|
||||
}
|
||||
e_menu_add_item(menu, menuitem);
|
||||
}
|
||||
bm->menus = evas_list_prepend(bm->menus, menu);
|
||||
return menu;
|
||||
}
|
||||
|
||||
void
|
||||
e_build_menu_build(E_Build_Menu *bm)
|
||||
{
|
||||
E_DB_File *db;
|
||||
int num;
|
||||
|
||||
e_db_flush();
|
||||
db = e_db_open_read(bm->file);
|
||||
if (!db) return;
|
||||
|
||||
if (!e_db_int_get(db, "/menu/count", &num)) goto error;
|
||||
if (num > 0) bm->menu = e_build_menu_build_number(bm, db, 0);
|
||||
error:
|
||||
e_db_close(db);
|
||||
}
|
||||
|
||||
void
|
||||
e_build_menu_free(E_Build_Menu *bm)
|
||||
{
|
||||
e_del_event_timer(bm->file);
|
||||
e_build_menu_unbuild(bm);
|
||||
IF_FREE(bm->file);
|
||||
build_menus = evas_list_remove(build_menus, bm);
|
||||
FREE(bm);
|
||||
}
|
||||
|
||||
E_Build_Menu *
|
||||
e_build_menu_new_from_db(char *file)
|
||||
{
|
||||
E_Build_Menu *bm;
|
||||
|
||||
if (!file) return NULL;
|
||||
bm = NEW(E_Build_Menu, 1);
|
||||
ZERO(bm, E_Build_Menu, 1);
|
||||
OBJ_INIT(bm, e_build_menu_free);
|
||||
|
||||
bm->file = strdup(file);
|
||||
|
||||
build_menus = evas_list_prepend(build_menus, bm);
|
||||
e_build_menu_poll(0, bm);
|
||||
return bm;
|
||||
}
|
35
src/util.c
35
src/util.c
|
@ -166,3 +166,38 @@ e_file_link(char *link)
|
|||
buf[count] = 0;
|
||||
return strdup(buf);
|
||||
}
|
||||
|
||||
Evas_List
|
||||
e_file_list_dir(char *dir)
|
||||
{
|
||||
DIR *dirp;
|
||||
struct dirent *dp;
|
||||
Evas_List list;
|
||||
|
||||
dirp = opendir(dir);
|
||||
if (!dirp) return NULL;
|
||||
list = NULL;
|
||||
while ((dp = readdir(dirp)))
|
||||
{
|
||||
printf("%s\n", dp->d_name);
|
||||
if ((strcmp(dp->d_name, ".")) &&
|
||||
(strcmp(dp->d_name, "..")))
|
||||
{
|
||||
Evas_List l;
|
||||
|
||||
/* insertion sort */
|
||||
for (l = list; l; l = l->next)
|
||||
{
|
||||
if (strcmp(l->data, dp->d_name) > 0)
|
||||
{
|
||||
list = evas_list_prepend_relative(list, strdup(dp->d_name), l->data);
|
||||
break;
|
||||
}
|
||||
}
|
||||
/* nowhwre to go? just append it */
|
||||
if (!l) list = evas_list_append(list, strdup(dp->d_name));
|
||||
}
|
||||
}
|
||||
closedir(dirp);
|
||||
return list;
|
||||
}
|
||||
|
|
15
src/view.c
15
src/view.c
|
@ -90,6 +90,20 @@ e_bg_up_cb(void *_data, Evas _e, Evas_Object _o, int _b, int _x, int _y)
|
|||
}
|
||||
else if (_b == 3)
|
||||
{
|
||||
static E_Build_Menu *buildmenu = NULL;
|
||||
|
||||
if (!buildmenu)
|
||||
{
|
||||
buildmenu = e_build_menu_new_from_gnome_apps("/usr/share/gnome/apps");
|
||||
}
|
||||
if (buildmenu)
|
||||
{
|
||||
static E_Menu *menu = NULL;
|
||||
menu = buildmenu->menu;
|
||||
if (menu)
|
||||
e_menu_show_at_mouse(menu, ev->rx, ev->ry, ev->time);
|
||||
}
|
||||
/*
|
||||
static E_Menu *menu = NULL;
|
||||
|
||||
if (!menu)
|
||||
|
@ -105,6 +119,7 @@ e_bg_up_cb(void *_data, Evas _e, Evas_Object _o, int _b, int _x, int _y)
|
|||
}
|
||||
if (menu)
|
||||
e_menu_show_at_mouse(menu, ev->rx, ev->ry, ev->time);
|
||||
*/
|
||||
}
|
||||
}
|
||||
if (ev->button == 1)
|
||||
|
|
Loading…
Reference in New Issue