* Add options to choose what to show in menu (home, desktop, trash, etc...)
* Use e_exec instead of a custom fork to run the filemanager, it follow PATH, so you don't have to write the full path * Modify a little the filemanager selector SVN revision: 38902
This commit is contained in:
parent
bc08260f0e
commit
5cbbcd35c7
|
@ -7,6 +7,14 @@ struct _E_Config_Dialog_Data
|
|||
int auto_mount;
|
||||
int auto_open;
|
||||
char *fm;
|
||||
int fm_chk;
|
||||
Evas_Object *entry;
|
||||
int show_home;
|
||||
int show_desk;
|
||||
int show_trash;
|
||||
int show_root;
|
||||
int show_temp;
|
||||
int show_bookm;
|
||||
};
|
||||
|
||||
/* Local Function Prototypes */
|
||||
|
@ -70,12 +78,33 @@ _fill_data(E_Config_Dialog_Data *cfdata)
|
|||
/* load a temp copy of the config variables */
|
||||
cfdata->auto_mount = places_conf->auto_mount;
|
||||
cfdata->auto_open = places_conf->auto_open;
|
||||
|
||||
cfdata->show_home = places_conf->show_home;
|
||||
cfdata->show_desk = places_conf->show_desk;
|
||||
cfdata->show_trash = places_conf->show_trash;
|
||||
cfdata->show_root = places_conf->show_root;
|
||||
cfdata->show_temp = places_conf->show_temp;
|
||||
cfdata->show_bookm = places_conf->show_bookm;
|
||||
|
||||
if (places_conf->fm)
|
||||
cfdata->fm = strdup(places_conf->fm);
|
||||
else
|
||||
cfdata->fm = strdup("");
|
||||
}
|
||||
|
||||
void _custom_fm_click(void *data, Evas_Object *obj)
|
||||
{
|
||||
E_Config_Dialog_Data *cfdata = data;
|
||||
|
||||
if (e_widget_check_checked_get(obj))
|
||||
e_widget_disabled_set(cfdata->entry, 0);
|
||||
else
|
||||
{
|
||||
e_widget_disabled_set(cfdata->entry, 1);
|
||||
e_widget_entry_text_set(cfdata->entry, "");
|
||||
}
|
||||
}
|
||||
|
||||
static Evas_Object *
|
||||
_basic_create(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata)
|
||||
{
|
||||
|
@ -83,6 +112,7 @@ _basic_create(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata)
|
|||
|
||||
o = e_widget_list_add(evas, 0, 0);
|
||||
|
||||
//General frame
|
||||
of = e_widget_framelist_add(evas, D_("General"), 0);
|
||||
e_widget_framelist_content_align_set(of, 0.0, 0.0);
|
||||
|
||||
|
@ -94,11 +124,38 @@ _basic_create(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata)
|
|||
&(cfdata->auto_open));
|
||||
e_widget_framelist_object_append(of, ow);
|
||||
|
||||
ow = e_widget_label_add
|
||||
(evas, D_("File manager (if blank uses Enlightenment)"));
|
||||
ow = e_widget_check_add(evas, D_("Use a custom file manager"), &(cfdata->fm_chk));
|
||||
e_widget_check_checked_set(ow, strlen(cfdata->fm) > 0 ? 1 : 0);
|
||||
e_widget_on_change_hook_set(ow, _custom_fm_click, cfdata);
|
||||
e_widget_framelist_object_append(of, ow);
|
||||
|
||||
ow = e_widget_entry_add(evas, &(cfdata->fm), NULL, NULL, NULL);
|
||||
e_widget_disabled_set(ow, strlen(cfdata->fm) > 0 ? 0 : 1);
|
||||
cfdata->entry = ow;
|
||||
e_widget_framelist_object_append(of, ow);
|
||||
|
||||
e_widget_list_object_append(o, of, 1, 1, 0.5);
|
||||
|
||||
//Display frame
|
||||
of = e_widget_framelist_add(evas, D_("Show"), 0);
|
||||
e_widget_framelist_content_align_set(of, 0.0, 0.0);
|
||||
|
||||
ow = e_widget_check_add(evas, D_("Home"), &(cfdata->show_home));
|
||||
e_widget_framelist_object_append(of, ow);
|
||||
|
||||
ow = e_widget_check_add(evas, D_("Desktop"), &(cfdata->show_desk));
|
||||
e_widget_framelist_object_append(of, ow);
|
||||
|
||||
ow = e_widget_check_add(evas, D_("Trash"), &(cfdata->show_trash));
|
||||
e_widget_framelist_object_append(of, ow);
|
||||
|
||||
ow = e_widget_check_add(evas, D_("Filesystem"), &(cfdata->show_root));
|
||||
e_widget_framelist_object_append(of, ow);
|
||||
|
||||
ow = e_widget_check_add(evas, D_("Temp"), &(cfdata->show_temp));
|
||||
e_widget_framelist_object_append(of, ow);
|
||||
|
||||
ow = e_widget_check_add(evas, D_("Favorites"), &(cfdata->show_bookm));
|
||||
e_widget_framelist_object_append(of, ow);
|
||||
|
||||
e_widget_list_object_append(o, of, 1, 1, 0.5);
|
||||
|
@ -111,6 +168,12 @@ _basic_apply(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
|
|||
{
|
||||
places_conf->auto_mount = cfdata->auto_mount;
|
||||
places_conf->auto_open = cfdata->auto_open;
|
||||
places_conf->show_home = cfdata->show_home;
|
||||
places_conf->show_desk = cfdata->show_desk;
|
||||
places_conf->show_trash = cfdata->show_trash;
|
||||
places_conf->show_root = cfdata->show_root;
|
||||
places_conf->show_temp = cfdata->show_temp;
|
||||
places_conf->show_bookm = cfdata->show_bookm;
|
||||
|
||||
const char *fm = eina_stringshare_add(cfdata->fm);
|
||||
eina_stringshare_del(places_conf->fm);
|
||||
|
|
|
@ -93,9 +93,15 @@ e_modapi_init(E_Module *m)
|
|||
#define D conf_edd
|
||||
E_CONFIG_VAL(D, T, version, INT);
|
||||
E_CONFIG_VAL(D, T, fm, STR);
|
||||
E_CONFIG_VAL(D, T, auto_mount, UCHAR);
|
||||
E_CONFIG_VAL(D, T, auto_open, UCHAR);
|
||||
E_CONFIG_VAL(D, T, auto_mount, UCHAR);
|
||||
E_CONFIG_VAL(D, T, auto_open, UCHAR);
|
||||
E_CONFIG_LIST(D, T, conf_items, conf_item_edd);
|
||||
E_CONFIG_VAL(D, T, show_home, UCHAR);
|
||||
E_CONFIG_VAL(D, T, show_desk, UCHAR);
|
||||
E_CONFIG_VAL(D, T, show_trash, UCHAR);
|
||||
E_CONFIG_VAL(D, T, show_root, UCHAR);
|
||||
E_CONFIG_VAL(D, T, show_temp, UCHAR);
|
||||
E_CONFIG_VAL(D, T, show_bookm, UCHAR);
|
||||
|
||||
/* Tell E to find any existing module data. First run ? */
|
||||
places_conf = e_config_domain_load("module.places", conf_edd);
|
||||
|
@ -332,6 +338,12 @@ _places_conf_new(void)
|
|||
IFMODCFG(0x008d);
|
||||
places_conf->auto_mount = 0;
|
||||
places_conf->auto_open = 0;
|
||||
places_conf->show_home = 1;
|
||||
places_conf->show_desk = 1;
|
||||
places_conf->show_trash = 0;
|
||||
places_conf->show_root = 0;
|
||||
places_conf->show_temp = 0;
|
||||
places_conf->show_bookm = 1;
|
||||
_places_conf_item_get(NULL);
|
||||
IFMODCFGEND;
|
||||
|
||||
|
|
|
@ -40,6 +40,13 @@ struct _Config
|
|||
const char *fm;
|
||||
unsigned char auto_mount;
|
||||
unsigned char auto_open;
|
||||
|
||||
unsigned char show_home;
|
||||
unsigned char show_desk;
|
||||
unsigned char show_trash;
|
||||
unsigned char show_root;
|
||||
unsigned char show_temp;
|
||||
unsigned char show_bookm;
|
||||
};
|
||||
|
||||
typedef struct _Config_Item Config_Item;
|
||||
|
|
|
@ -42,7 +42,9 @@ static void _places_update_size(Evas_Object *obj, Volume *vol);
|
|||
|
||||
// Edje callbacks
|
||||
void _places_icon_activated_cb(void *data, Evas_Object *o, const char *emission, const char *source);
|
||||
void _places_custom_icon_activated_cb(void *data, Evas_Object *o, const char *emission, const char *source);
|
||||
void _places_eject_activated_cb(void *data, Evas_Object *o, const char *emission, const char *source);
|
||||
|
||||
// Hal callbacks
|
||||
void _places_mount_cb(void *user_data, void *method_return, DBusError *error);
|
||||
void _places_unmount_cb(void *user_data, void *method_return, DBusError *error);
|
||||
|
@ -138,6 +140,59 @@ _places_volume_sort_cb(const void *d1, const void *d2)
|
|||
return strcmp(v1->label, v2->label);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
_places_custom_volume(Evas_Object *box, const char *label, const char *icon, const char *uri)
|
||||
{
|
||||
int min_w, min_h, max_w, max_h;
|
||||
Evas_Object *o, *sep, *i;
|
||||
|
||||
/* volume object */
|
||||
o = edje_object_add(evas_object_evas_get(box));
|
||||
edje_object_file_set(o, theme_file, "modules/places/main");
|
||||
|
||||
/* icon */
|
||||
i = edje_object_add(evas_object_evas_get(box));
|
||||
//edje_object_file_set(icon, theme_file, vol->icon);
|
||||
edje_object_file_set(i, e_theme_edje_file_get("base/theme/fileman", icon),
|
||||
icon);
|
||||
edje_object_part_swallow(o, "icon", i);
|
||||
|
||||
/* label */
|
||||
edje_object_part_text_set(o, "volume_label", label);
|
||||
|
||||
/* gauge */
|
||||
edje_object_signal_emit(o, "gauge,hide", "places");
|
||||
edje_object_part_text_set(o, "size_label", "");
|
||||
|
||||
|
||||
/* orient the separator*/
|
||||
if (!e_box_orientation_get(box))
|
||||
edje_object_signal_emit(o, "separator,set,horiz", "places");
|
||||
else
|
||||
edje_object_signal_emit(o, "separator,set,vert", "places");
|
||||
|
||||
/* connect signals from edje */
|
||||
edje_object_signal_callback_add(o, "icon,activated", "places",
|
||||
_places_custom_icon_activated_cb, (void*)uri);
|
||||
|
||||
/* pack the volume in the box */
|
||||
evas_object_show(o);
|
||||
edje_object_size_min_get(o, &min_w, &min_h);
|
||||
edje_object_size_max_get(o, &max_w, &max_h);
|
||||
//if (!strcmp(vol->mount_point, "/"))
|
||||
// e_box_pack_start(box, o);
|
||||
//else
|
||||
e_box_pack_end(box, o);
|
||||
e_box_pack_options_set(o,
|
||||
1, 0, /* fill */
|
||||
1, 0, /* expand */
|
||||
0.5, 0.0, /* align */
|
||||
min_w, min_h, /* min */
|
||||
max_w, max_h /* max */
|
||||
);
|
||||
}
|
||||
|
||||
void
|
||||
places_fill_box(Evas_Object *box)
|
||||
{
|
||||
|
@ -147,8 +202,19 @@ places_fill_box(Evas_Object *box)
|
|||
|
||||
places_empty_box(box);
|
||||
|
||||
/*if (places_conf->show_home)
|
||||
_places_custom_volume(box, D_("Home"), "e/icons/fileman/home", "/home/dave");
|
||||
if (places_conf->show_desk)
|
||||
_places_custom_volume(box, D_("Desktop"), "e/icons/fileman/desktop", "/home/dave/Desktop");
|
||||
if (places_conf->show_trash)
|
||||
_places_custom_volume(box, D_("Trash"), "e/icons/fileman/trash", "trash:///");
|
||||
if (places_conf->show_root)
|
||||
_places_custom_volume(box, D_("Filesystem"), "e/icons/fileman/root", "/");
|
||||
if (places_conf->show_temp)
|
||||
_places_custom_volume(box, D_("Temp"), "e/icons/fileman/tmp", "/tmp");
|
||||
*/
|
||||
|
||||
volumes = eina_list_sort(volumes, 0, _places_volume_sort_cb);
|
||||
|
||||
for (l = volumes; l; l = l->next)
|
||||
{
|
||||
Volume *vol = l->data;
|
||||
|
@ -327,33 +393,59 @@ places_generate_menu(void *data, E_Menu *em)
|
|||
char buf[PATH_MAX];
|
||||
|
||||
/* Home */
|
||||
mi = e_menu_item_new(em);
|
||||
e_menu_item_label_set(mi, D_("Home"));
|
||||
e_util_menu_item_edje_icon_set(mi, "fileman/home");
|
||||
e_menu_item_callback_set(mi, _places_run_fm, (char*)e_user_homedir_get());
|
||||
if (places_conf->show_home)
|
||||
{
|
||||
mi = e_menu_item_new(em);
|
||||
e_menu_item_label_set(mi, D_("Home"));
|
||||
e_util_menu_item_edje_icon_set(mi, "fileman/home");
|
||||
e_menu_item_callback_set(mi, _places_run_fm, (char*)e_user_homedir_get());
|
||||
}
|
||||
|
||||
/* Desktop */
|
||||
mi = e_menu_item_new(em);
|
||||
e_menu_item_label_set(mi, D_("Desktop"));
|
||||
e_util_menu_item_edje_icon_set(mi, "fileman/desktop");
|
||||
snprintf(buf, sizeof(buf), "%s/Desktop", (char*)e_user_homedir_get());
|
||||
e_menu_item_callback_set(mi, _places_run_fm, strdup(buf)); //TODO free somewhere
|
||||
if (places_conf->show_desk)
|
||||
{
|
||||
mi = e_menu_item_new(em);
|
||||
e_menu_item_label_set(mi, D_("Desktop"));
|
||||
e_util_menu_item_edje_icon_set(mi, "fileman/desktop");
|
||||
snprintf(buf, sizeof(buf), "%s/Desktop", (char*)e_user_homedir_get());
|
||||
e_menu_item_callback_set(mi, _places_run_fm, strdup(buf)); //TODO free somewhere
|
||||
}
|
||||
|
||||
/* Trash */
|
||||
mi = e_menu_item_new(em);
|
||||
e_menu_item_label_set(mi, D_("Trash"));
|
||||
e_util_menu_item_edje_icon_set(mi, "fileman/folder");
|
||||
e_menu_item_callback_set(mi, _places_run_fm, "trash:///");
|
||||
|
||||
//separator
|
||||
mi = e_menu_item_new(em);
|
||||
e_menu_item_separator_set(mi, 1);
|
||||
if (places_conf->show_trash)
|
||||
{
|
||||
mi = e_menu_item_new(em);
|
||||
e_menu_item_label_set(mi, D_("Trash"));
|
||||
e_util_menu_item_edje_icon_set(mi, "fileman/folder");
|
||||
e_menu_item_callback_set(mi, _places_run_fm, "trash:///");
|
||||
}
|
||||
|
||||
/* File System */
|
||||
mi = e_menu_item_new(em);
|
||||
e_menu_item_label_set(mi, D_("Filesystem"));
|
||||
e_util_menu_item_edje_icon_set(mi, "fileman/hdd");
|
||||
e_menu_item_callback_set(mi, _places_run_fm, "/");
|
||||
if (places_conf->show_root)
|
||||
{
|
||||
mi = e_menu_item_new(em);
|
||||
e_menu_item_label_set(mi, D_("Filesystem"));
|
||||
e_util_menu_item_edje_icon_set(mi, "fileman/hdd");
|
||||
e_menu_item_callback_set(mi, _places_run_fm, "/");
|
||||
}
|
||||
|
||||
/* Temp */
|
||||
if (places_conf->show_temp)
|
||||
{
|
||||
mi = e_menu_item_new(em);
|
||||
e_menu_item_label_set(mi, D_("Temp"));
|
||||
e_util_menu_item_edje_icon_set(mi, "fileman/tmp");
|
||||
e_menu_item_callback_set(mi, _places_run_fm, "/tmp");
|
||||
}
|
||||
|
||||
//separator
|
||||
if (places_conf->show_home || places_conf->show_desk ||
|
||||
places_conf->show_trash || places_conf->show_root ||
|
||||
places_conf->show_temp)
|
||||
{
|
||||
mi = e_menu_item_new(em);
|
||||
e_menu_item_separator_set(mi, 1);
|
||||
}
|
||||
|
||||
/* Volumes */
|
||||
Eina_List *l;
|
||||
|
@ -381,12 +473,13 @@ places_generate_menu(void *data, E_Menu *em)
|
|||
e_menu_item_callback_set(mi, places_menu_click_cb, (void*)vol);
|
||||
}
|
||||
|
||||
//separator
|
||||
mi = e_menu_item_new(em);
|
||||
e_menu_item_separator_set(mi, 1);
|
||||
|
||||
/* Favorites */
|
||||
places_parse_bookmarks(em);
|
||||
if (places_conf->show_bookm)
|
||||
{
|
||||
mi = e_menu_item_new(em);
|
||||
e_menu_item_separator_set(mi, 1);
|
||||
places_parse_bookmarks(em);
|
||||
}
|
||||
|
||||
e_menu_pre_activate_callback_set(em, NULL, NULL);
|
||||
}
|
||||
|
@ -552,23 +645,10 @@ _places_error_show(const char *title, const char *text1, const char *text2, cons
|
|||
static void
|
||||
_places_run_fm_external(const char *fm, const char *directory)
|
||||
{
|
||||
pid_t pid;
|
||||
char exec[PATH_MAX];
|
||||
|
||||
pid = fork();
|
||||
if (pid < 0)
|
||||
{
|
||||
perror("cannot fork to launch external file manager.");
|
||||
return;
|
||||
}
|
||||
else if (pid == 0)
|
||||
{
|
||||
const char * const cmd[3] = {fm, directory, NULL};
|
||||
execv(fm, (char * const *)cmd);
|
||||
fprintf(stderr,
|
||||
"ERROR: could not exec external file manager \"%s\": %s.\n",
|
||||
fm, strerror(errno));
|
||||
exit(-1);
|
||||
}
|
||||
snprintf(exec, PATH_MAX, "%s %s", (char*)fm, (char*)directory);
|
||||
e_exec(NULL, NULL, exec, NULL, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -674,6 +754,13 @@ _places_icon_activated_cb(void *data, Evas_Object *o, const char *emission, cons
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
_places_custom_icon_activated_cb(void *data, Evas_Object *o, const char *emission, const char *source)
|
||||
{
|
||||
//data is char *uri
|
||||
_places_run_fm(data, NULL, NULL);
|
||||
}
|
||||
|
||||
void
|
||||
_places_eject_activated_cb(void *data, Evas_Object *o, const char *emission, const char *source)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue