* fix config dialog size

* parse better the bookmarks file (support alias and special chars)
 * fix the icons in the menu
 * show in menu also not mounted volumes

SVN revision: 38790
This commit is contained in:
Davide Andreoli 2009-01-26 08:29:20 +00:00
parent 605dad7963
commit 87ca4e8d96
2 changed files with 61 additions and 30 deletions

View File

@ -41,8 +41,6 @@ e_int_config_places_module(E_Container *con)
/* create new config dialog */
cfd = e_config_dialog_new(con, D_("Places Configuration"), "Places",
"_e_module_places_cfg_dlg", buf, 0, v, NULL);
e_dialog_resizable_set(cfd->dia, 1);
places_conf->cfd = cfd;
return cfd;
}

View File

@ -39,6 +39,7 @@ static void _places_mount_volume(Volume *vol);
static const char *_places_human_size_get(unsigned long long size);
static unsigned long long _places_free_space_get(const char *mount);
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_eject_activated_cb(void *data, Evas_Object *o, const char *emission, const char *source);
@ -271,6 +272,54 @@ places_empty_box(Evas_Object *box)
e_box_thaw(box);
}
void
places_parse_bookmarks(E_Menu *em)
{
char line[PATH_MAX];
char buf[PATH_MAX];
E_Menu_Item *mi;
Efreet_Uri *uri;
char *alias;
FILE* fp;
snprintf(buf, sizeof(buf), "%s/.gtk-bookmarks", e_user_homedir_get());
fp = fopen(buf, "r");
if (fp)
{
while(fgets(line, sizeof(line), fp))
{
alias = NULL;
line[strlen(line) - 1] = '\0';
alias = strchr(line, ' ');
if (alias)
{
line[alias-line] = '\0';
alias++;
}
uri = efreet_uri_decode(line);
if (uri && uri->path)
{
if (ecore_file_exists(uri->path))
{
mi = e_menu_item_new(em);
e_menu_item_label_set(mi, alias ? alias :
ecore_file_file_get(uri->path));
e_util_menu_item_edje_icon_set(mi, "fileman/folder");
e_menu_item_callback_set(mi, _places_run_fm, strdup(uri->path)); //TODO free somewhere
}
}
if (uri) efreet_uri_free(uri);
}
fclose(fp);
}
}
void
places_menu_click_cb(void *data, E_Menu *m, E_Menu_Item *mi)
{
_places_icon_activated_cb(data, NULL, NULL, NULL);
}
void
places_generate_menu(void *data, E_Menu *em)
{
@ -296,23 +345,22 @@ places_generate_menu(void *data, E_Menu *em)
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);
/* 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, "/");
//separator
mi = e_menu_item_new(em);
e_menu_item_separator_set(mi, 1);
/* Volumes */
Eina_List *l;
for (l = volumes; l; l = l->next)
{
Volume *vol = l->data;
if (!vol->valid) continue;
if (!vol->mounted) continue;
if (vol->mount_point && !strcmp(vol->mount_point, "/")) continue;
mi = e_menu_item_new(em);
@ -321,8 +369,13 @@ places_generate_menu(void *data, E_Menu *em)
else
e_menu_item_label_set(mi, ecore_file_file_get(vol->mount_point));
e_menu_item_icon_edje_set(mi, theme_file, vol->icon);
e_menu_item_callback_set(mi, _places_run_fm, (void*)vol->mount_point);
if (strncmp(vol->icon, "e/", 2))
e_menu_item_icon_edje_set(mi, theme_file, vol->icon);
else
e_menu_item_icon_edje_set(mi,
e_theme_edje_file_get("base/theme/fileman",
vol->icon), vol->icon);
e_menu_item_callback_set(mi, places_menu_click_cb, (void*)vol);
}
//separator
@ -330,26 +383,7 @@ places_generate_menu(void *data, E_Menu *em)
e_menu_item_separator_set(mi, 1);
/* Favorites */
char line[PATH_MAX];
FILE* fp;
snprintf(buf, sizeof(buf), "%s/.gtk-bookmarks", e_user_homedir_get());
fp = fopen(buf, "r");
if (fp)
{
while(fgets(line, sizeof(line), fp))
{
line[strlen(line) - 1] = '\0';
if (ecore_file_exists(line + 7))
{
mi = e_menu_item_new(em);
e_menu_item_label_set(mi, ecore_file_file_get(line));
e_util_menu_item_edje_icon_set(mi, "fileman/folder");
e_menu_item_callback_set(mi, _places_run_fm, strdup(line + 7)); //TODO free somewhere
}
}
fclose(fp);
}
places_parse_bookmarks(em);
e_menu_pre_activate_callback_set(em, NULL, NULL);
}
@ -625,7 +659,6 @@ void
_places_icon_activated_cb(void *data, Evas_Object *o, const char *emission, const char *source)
{
Volume *vol;
E_Fm2_Mount *emount;
vol = data;