forked from enlightenment/enlightenment
efm:
- context menu (dragging with the right button) works - dragging from one efm window to another efm window pops up the context menu or calls the default relative action - menu item labels are filled with the correct text SVN revision: 20523
This commit is contained in:
parent
fa5438eae1
commit
7a4bc88869
|
@ -63,7 +63,7 @@
|
|||
* to define the command to execute there are several tokens like:
|
||||
*
|
||||
* %f => file input
|
||||
* %d => current directory
|
||||
* %h => hover file (might be the current directory, other file, whatever)
|
||||
*
|
||||
*
|
||||
*
|
||||
|
@ -76,10 +76,12 @@ static E_Fm_Mime_Entry *_e_fm_mime_common(E_Fm_Mime_Entry *e1, E_Fm_Mime_Entry
|
|||
static char *_e_fm_mime_suffix_get(char *filename);
|
||||
static void _e_fm_mime_action_append(E_Fm_Mime_Entry *entry, char *action_name);
|
||||
static void _e_fm_mime_action_default_set(E_Fm_Mime_Entry *entry, char *action_name);
|
||||
static char *_e_fm_mime_string_tokenizer(Evas_List *files, char *dir, char *istr);
|
||||
static char *_e_fm_mime_string_tokenizer(Evas_List *files, E_Fm_File *dir, char *istr);
|
||||
/* definitions of the internal actions */
|
||||
static void _e_fm_mime_action_internal_folder_open(E_Fm_Smart_Data *data);
|
||||
static void _e_fm_mime_action_internal_folder_open_other(E_Fm_Smart_Data *data);
|
||||
static void _e_fm_mime_action_internal_copy_to(E_Fm_Smart_Data *data);
|
||||
static void _e_fm_mime_action_internal_move_to(E_Fm_Smart_Data *data);
|
||||
|
||||
|
||||
static int init_count = 0;
|
||||
|
@ -114,6 +116,22 @@ e_fm_mime_init(void)
|
|||
action->internal.function = &_e_fm_mime_action_internal_folder_open_other;
|
||||
actions = evas_list_append(actions,action);
|
||||
|
||||
action = E_NEW(E_Fm_Mime_Action,1);
|
||||
action->name = strdup("_copy_to");
|
||||
action->label = strdup("Copy to %h");
|
||||
action->relative = 1;
|
||||
action->is_internal = 1;
|
||||
action->internal.function = &_e_fm_mime_action_internal_copy_to;
|
||||
actions = evas_list_append(actions,action);
|
||||
|
||||
action = E_NEW(E_Fm_Mime_Action,1);
|
||||
action->name = strdup("_move_to");
|
||||
action->label = strdup("Move to %h");
|
||||
action->relative = 1;
|
||||
action->is_internal = 1;
|
||||
action->internal.function = &_e_fm_mime_action_internal_move_to;
|
||||
actions = evas_list_append(actions,action);
|
||||
|
||||
/* actions */
|
||||
/***********/
|
||||
action = E_NEW(E_Fm_Mime_Action,1);
|
||||
|
@ -151,6 +169,8 @@ e_fm_mime_init(void)
|
|||
root->label = strdup("Unkown File");
|
||||
root->level = 0;
|
||||
entries = evas_list_append(entries,root);
|
||||
_e_fm_mime_action_default_set(root, "_copy_to");
|
||||
_e_fm_mime_action_append(root, "_move_to");
|
||||
/* data */
|
||||
entry = E_NEW(E_Fm_Mime_Entry,1);
|
||||
entry->name = strdup("data");
|
||||
|
@ -267,13 +287,13 @@ e_fm_mime_get_from_list(Evas_List *files)
|
|||
if (files == NULL)
|
||||
return NULL;
|
||||
|
||||
file = (E_Fm_Mime_Entry *)files->data;
|
||||
file = (E_Fm_File *)files->data;
|
||||
entry = file->mime;
|
||||
for (l = files->next; l; l = l->next)
|
||||
{
|
||||
E_Fm_Mime_Entry *eme;
|
||||
|
||||
file = (E_Fm_Mime_Entry *)l->data;
|
||||
file = (E_Fm_File *)l->data;
|
||||
eme = file->mime;
|
||||
entry = _e_fm_mime_common(entry,eme);
|
||||
}
|
||||
|
@ -318,7 +338,8 @@ e_fm_mime_set(E_Fm_File *file)
|
|||
file->mime = (E_Fm_Mime_Entry*)entries->data;
|
||||
}
|
||||
|
||||
E_Fm_Mime_Action *
|
||||
#if 0
|
||||
EAPI E_Fm_Mime_Action *
|
||||
e_fm_mime_action_get_by_label(char *label)
|
||||
{
|
||||
Evas_List *l;
|
||||
|
@ -332,6 +353,7 @@ e_fm_mime_action_get_by_label(char *label)
|
|||
}
|
||||
return action;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* will call the command of an @action for the fileman_smart @sd */
|
||||
EAPI int
|
||||
|
@ -355,7 +377,6 @@ e_fm_mime_action_call(E_Fm_Smart_Data *sd, E_Fm_Mime_Action *action)
|
|||
|
||||
|
||||
if (!exe)
|
||||
|
||||
{
|
||||
|
||||
e_error_dialog_show(_("Run Error"),
|
||||
|
@ -395,6 +416,15 @@ e_fm_mime_action_default_call(E_Fm_Smart_Data *sd)
|
|||
e_fm_mime_action_call(sd, action);
|
||||
}
|
||||
|
||||
EAPI char *
|
||||
e_fm_mime_translate(E_Fm_Smart_Data *sd, char *istr)
|
||||
{
|
||||
char *ostr;
|
||||
|
||||
ostr = _e_fm_mime_string_tokenizer(sd->operation.files,sd->operation.hover, istr);
|
||||
|
||||
return ostr;
|
||||
}
|
||||
|
||||
/* subsystem functions */
|
||||
/***********************/
|
||||
|
@ -442,7 +472,7 @@ _e_fm_mime_common(E_Fm_Mime_Entry *e1, E_Fm_Mime_Entry *e2)
|
|||
|
||||
/* will translate %f,%d to file,dir respective */
|
||||
static char*
|
||||
_e_fm_mime_string_tokenizer(Evas_List *files, char *dir, char *istr)
|
||||
_e_fm_mime_string_tokenizer(Evas_List *files, E_Fm_File *hover, char *istr)
|
||||
{
|
||||
char *buf;
|
||||
char *c;
|
||||
|
@ -465,7 +495,7 @@ _e_fm_mime_string_tokenizer(Evas_List *files, char *dir, char *istr)
|
|||
char *astr = NULL;
|
||||
if(*c == 'f')
|
||||
{
|
||||
int i = 2;
|
||||
int j = 2;
|
||||
char *f = NULL;
|
||||
|
||||
astr = calloc(PATH_MAX,sizeof(char));
|
||||
|
@ -475,10 +505,14 @@ _e_fm_mime_string_tokenizer(Evas_List *files, char *dir, char *istr)
|
|||
|
||||
file = (E_Fm_File *)l->data;
|
||||
sprintf(astr,"%s %s",astr,file->path);
|
||||
astr = realloc(astr,PATH_MAX*i);
|
||||
i++;
|
||||
astr = realloc(astr,PATH_MAX*j);
|
||||
j++;
|
||||
}
|
||||
}
|
||||
if(*c == 'h')
|
||||
{
|
||||
astr = strdup(hover->path);
|
||||
}
|
||||
if(!astr)
|
||||
continue;
|
||||
if(bsize < i + strlen(astr))
|
||||
|
@ -534,7 +568,10 @@ _e_fm_mime_action_default_set(E_Fm_Mime_Entry *entry, char *action_name)
|
|||
if(!strcmp(action->name, action_name))
|
||||
{
|
||||
/* overwrite the old default action */
|
||||
entry->action_default = action;
|
||||
if(action->relative)
|
||||
entry->action_default_relative = action;
|
||||
else
|
||||
entry->action_default = action;
|
||||
entry->actions = evas_list_append(entry->actions, action);
|
||||
break;
|
||||
}
|
||||
|
@ -577,4 +614,14 @@ _e_fm_mime_action_internal_folder_open_other(E_Fm_Smart_Data *sd)
|
|||
fileman = e_fileman_new_to_dir(e_container_current_get(e_manager_current_get()), file->path);
|
||||
e_fileman_show(fileman);
|
||||
}
|
||||
static void
|
||||
_e_fm_mime_action_internal_copy_to(E_Fm_Smart_Data *sd)
|
||||
{
|
||||
printf("going to copy to %s\n", sd->operation.hover->path);
|
||||
}
|
||||
static void
|
||||
_e_fm_mime_action_internal_move_to(E_Fm_Smart_Data *sd)
|
||||
{
|
||||
printf("going to move to %s\n", sd->operation.hover->path);
|
||||
}
|
||||
|
||||
|
|
|
@ -62,7 +62,7 @@ EAPI E_Fm_Mime_Entry *e_fm_mime_get_from_list(Evas_List *files);
|
|||
EAPI void e_fm_mime_set(E_Fm_File *file);
|
||||
EAPI int e_fm_mime_action_call(E_Fm_Smart_Data *sd, E_Fm_Mime_Action *action);
|
||||
EAPI int e_fm_mime_action_default_call(E_Fm_Smart_Data *sd);
|
||||
EAPI E_Fm_Mime_Action *e_fm_mime_action_get_by_label(char *label);
|
||||
EAPI char *e_fm_mime_translate(E_Fm_Smart_Data *sd, char *istr);
|
||||
|
||||
|
||||
#endif
|
||||
|
|
|
@ -186,6 +186,11 @@ static void _e_fm_menu_default(void *data, E_Menu *m, E_Menu_Item
|
|||
|
||||
static int _e_fm_init_assoc(E_Fm_Smart_Data *sd);
|
||||
|
||||
/* free functions */
|
||||
/******************/
|
||||
static void _e_fm_operation_menu_free(E_Fm_Smart_Data *sd);
|
||||
static void _e_fm_operation_files_free(E_Fm_Smart_Data *sd);
|
||||
static void _e_fm_operation_free(E_Fm_Smart_Data *sd);
|
||||
|
||||
static Ecore_Event_Handler *e_fm_drag_mouse_up_handler = NULL;
|
||||
static Ecore_Event_Handler *e_fm_drag_mouse_move_handler = NULL;
|
||||
|
@ -2206,12 +2211,10 @@ _e_fm_icon_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info
|
|||
icon->sd->drag.y = ev->canvas.y;
|
||||
icon->sd->drag.icon_obj = icon;
|
||||
}
|
||||
|
||||
if (!icon->state.selected)
|
||||
{
|
||||
if (!evas_key_modifier_is_set(evas_key_modifier_get(icon->sd->evas), "Control"))
|
||||
_e_fm_selections_clear(icon->sd);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2292,25 +2295,15 @@ _e_fm_icon_mouse_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
|
|||
_e_fm_selections_add(icon, evas_list_find_list(icon->sd->icons, icon));
|
||||
}
|
||||
}
|
||||
/* Free file list before recreating */
|
||||
while (icon->sd->operation.files)
|
||||
{
|
||||
E_Fm_File *file;
|
||||
|
||||
file = icon->sd->operation.files->data;
|
||||
icon->sd->operation.files = evas_list_remove_list(
|
||||
icon->sd->operation.files, icon->sd->operation.files);
|
||||
/*
|
||||
* FIXME: should this be freed, it looks like we just need to free the list here?
|
||||
* e_object_del(E_OBJECT(file));
|
||||
*/
|
||||
}
|
||||
/* free operation struct before recreating */
|
||||
_e_fm_operation_free(icon->sd);
|
||||
/* set the operation files equal to the selected icons */
|
||||
for(l = icon->sd->selection.icons; l; l = l->next)
|
||||
{
|
||||
E_Fm_Icon *ic;
|
||||
ic = (E_Fm_Icon *)l->data;
|
||||
icon->sd->operation.files = evas_list_append(icon->sd->operation.files, ic->file);
|
||||
/* duplicate the selected files, to not free the selected ones directly */
|
||||
icon->sd->operation.files = evas_list_append(icon->sd->operation.files, e_fm_file_new(ic->file->path));
|
||||
}
|
||||
/* get the overall mime entry for the selected files */
|
||||
icon->sd->operation.hover = NULL;
|
||||
|
@ -2326,7 +2319,7 @@ _e_fm_icon_mouse_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
|
|||
else if(icon->sd->drag.status == E_FILEMAN_DRAG_DONE)
|
||||
{
|
||||
printf("popping up the context menu\n");
|
||||
//_e_fm_menu_context_display(icon->sd, ev->output.x, ev->output.y, ev->timestamp);
|
||||
_e_fm_menu_context_display(icon->sd, ev->output.x, ev->output.y, ev->timestamp);
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -3391,7 +3384,12 @@ _e_fm_xdnd_position_cb(void *data, int type, void *event)
|
|||
/* check the position of every icon and compare the coords
|
||||
* until we find an icon below
|
||||
*/
|
||||
sd->operation.hover = NULL;
|
||||
|
||||
if(sd->operation.hover)
|
||||
{
|
||||
e_object_del(E_OBJECT(sd->operation.hover));
|
||||
sd->operation.hover = NULL;
|
||||
}
|
||||
for (l = sd->icons; l; l = l->next)
|
||||
{
|
||||
E_Fm_Icon *icon;
|
||||
|
@ -3405,7 +3403,13 @@ _e_fm_xdnd_position_cb(void *data, int type, void *event)
|
|||
{
|
||||
icon->state.hover = 1;
|
||||
e_fm_icon_signal_emit(icon->icon_obj, "hover", "");
|
||||
sd->operation.hover = icon->file;
|
||||
if(sd->operation.hover)
|
||||
{
|
||||
e_object_del(E_OBJECT(sd->operation.hover));
|
||||
sd->operation.hover = NULL;
|
||||
}
|
||||
sd->operation.hover = e_fm_file_new(icon->file->path);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -3420,6 +3424,9 @@ _e_fm_xdnd_position_cb(void *data, int type, void *event)
|
|||
e_fm_icon_signal_emit(icon->icon_obj, "clicked", "");
|
||||
}
|
||||
}
|
||||
/* if we arent above any icon, the file is the dir itself */
|
||||
if(!sd->operation.hover)
|
||||
sd->operation.hover = e_fm_file_new(sd->dir);
|
||||
}
|
||||
|
||||
rect.x = 0;
|
||||
|
@ -3547,9 +3554,8 @@ _e_fm_xdnd_selection_cb(void *data, int type, void *event)
|
|||
files = ev->data;
|
||||
if(files->num_files < 1)
|
||||
break;
|
||||
|
||||
/* FIXME clean in a better way the list */
|
||||
sd->operation.files = NULL;
|
||||
/* free the operation struct before recreating */
|
||||
_e_fm_operation_files_free(sd);
|
||||
i = 0;
|
||||
do
|
||||
{
|
||||
|
@ -3810,13 +3816,17 @@ _e_fm_menu_action_display(E_Fm_Smart_Data *sd, Evas_Coord dx, Evas_Coord dy, uns
|
|||
E_Fm_Mime_Action *action;
|
||||
E_Fm_Mime_Action *default_action;
|
||||
E_Fm_Mime_Entry *mime;
|
||||
E_Fm_Menu_Item_Data *mid;
|
||||
int multiple = 0;
|
||||
|
||||
|
||||
/* if we dont have any selection, how do we get here ? */
|
||||
if(!sd->selection.icons)
|
||||
/* if we dont have any operation files, how do we get here ? */
|
||||
if(!sd->operation.files)
|
||||
return;
|
||||
/* to know if the action can be performed on multiple files */
|
||||
if(sd->operation.files->next)
|
||||
multiple = 1;
|
||||
/* to know if the action can be performed on multiple files */
|
||||
if(sd->operation.files->next)
|
||||
multiple = 1;
|
||||
|
||||
|
@ -3839,15 +3849,21 @@ _e_fm_menu_action_display(E_Fm_Smart_Data *sd, Evas_Coord dx, Evas_Coord dy, uns
|
|||
mime = mime->parent;
|
||||
continue;
|
||||
}
|
||||
if(action->relative)
|
||||
continue;
|
||||
if(!action->multiple && multiple)
|
||||
{
|
||||
mime = mime->parent;
|
||||
continue;
|
||||
}
|
||||
|
||||
mid = E_NEW(E_Fm_Menu_Item_Data,1);
|
||||
mid->action = action;
|
||||
mid->sd = sd;
|
||||
sd->operation.menu_item_data = evas_list_append(sd->operation.menu_item_data, mid);
|
||||
mi = e_menu_item_new(mn);
|
||||
e_menu_item_label_set(mi, _(action->label));
|
||||
e_menu_item_callback_set(mi, _e_fm_menu_actions, sd);
|
||||
e_menu_item_callback_set(mi, _e_fm_menu_actions, mid);
|
||||
e_menu_item_icon_edje_set(mi, (char *)e_theme_edje_file_get("base/theme/fileman",
|
||||
"fileman/button/open"),"fileman/button/open");
|
||||
|
||||
|
@ -3874,10 +3890,18 @@ _e_fm_menu_action_display(E_Fm_Smart_Data *sd, Evas_Coord dx, Evas_Coord dy, uns
|
|||
/* if its the same as the default one, skip it */
|
||||
if(action == default_action)
|
||||
continue;
|
||||
if(action->relative)
|
||||
continue;
|
||||
|
||||
|
||||
mid = E_NEW(E_Fm_Menu_Item_Data,1);
|
||||
mid->action = action;
|
||||
mid->sd = sd;
|
||||
sd->operation.menu_item_data = evas_list_append(sd->operation.menu_item_data, mid);
|
||||
|
||||
mi = e_menu_item_new(mn);
|
||||
e_menu_item_label_set(mi, _(action->label));
|
||||
e_menu_item_callback_set(mi, _e_fm_menu_actions, sd);
|
||||
e_menu_item_callback_set(mi, _e_fm_menu_actions, mid);
|
||||
e_menu_item_icon_edje_set(mi, (char *)e_theme_edje_file_get("base/theme/fileman",
|
||||
"fileman/button/open"),"fileman/button/open");
|
||||
|
||||
|
@ -3935,7 +3959,7 @@ _e_fm_menu_action_display(E_Fm_Smart_Data *sd, Evas_Coord dx, Evas_Coord dy, uns
|
|||
(char *)e_theme_edje_file_get("base/theme/fileman",
|
||||
"fileman/button/properties"),
|
||||
"fileman/button/properties");
|
||||
//sd->selection.icon->menu = mn;
|
||||
sd->operation.menu = mn;
|
||||
|
||||
if (!sd->win) return;
|
||||
|
||||
|
@ -3961,14 +3985,15 @@ _e_fm_menu_context_display(E_Fm_Smart_Data *sd, Evas_Coord dx, Evas_Coord dy, un
|
|||
E_Fm_Mime_Entry *mime;
|
||||
E_Fm_Mime_Action *action;
|
||||
E_Fm_Mime_Action *default_action;
|
||||
E_Fm_Menu_Item_Data *mid;
|
||||
|
||||
/* if we dont have any selection, how do we get here ? */
|
||||
if(!sd->selection.icons)
|
||||
/* if we dont have any operation files, how do we get here ? */
|
||||
if(!sd->operation.files)
|
||||
return;
|
||||
/* to know if the action can be performed on multiple files */
|
||||
if(sd->operation.files->next)
|
||||
multiple = 1;
|
||||
|
||||
|
||||
mn = e_menu_new();
|
||||
e_menu_category_set(mn,"fileman/action");
|
||||
e_menu_category_data_set("fileman/action",sd);
|
||||
|
@ -3993,9 +4018,14 @@ _e_fm_menu_context_display(E_Fm_Smart_Data *sd, Evas_Coord dx, Evas_Coord dy, un
|
|||
continue;
|
||||
}
|
||||
|
||||
mid = E_NEW(E_Fm_Menu_Item_Data,1);
|
||||
mid->action = action;
|
||||
mid->sd = sd;
|
||||
sd->operation.menu_item_data = evas_list_append(sd->operation.menu_item_data, mid);
|
||||
|
||||
mi = e_menu_item_new(mn);
|
||||
e_menu_item_label_set(mi, _(action->label));
|
||||
e_menu_item_callback_set(mi, _e_fm_menu_actions, sd);
|
||||
e_menu_item_label_set(mi, e_fm_mime_translate(sd, action->label));
|
||||
e_menu_item_callback_set(mi, _e_fm_menu_actions, mid);
|
||||
e_menu_item_icon_edje_set(mi, (char *)e_theme_edje_file_get("base/theme/fileman",
|
||||
"fileman/button/open"),"fileman/button/open");
|
||||
|
||||
|
@ -4017,7 +4047,6 @@ _e_fm_menu_context_display(E_Fm_Smart_Data *sd, Evas_Coord dx, Evas_Coord dy, un
|
|||
actions = mime->actions;
|
||||
for(l = actions; l; l = l->next)
|
||||
{
|
||||
|
||||
action = (E_Fm_Mime_Action*)l->data;
|
||||
/* if its not relative skip it */
|
||||
if(!action->relative)
|
||||
|
@ -4028,9 +4057,15 @@ _e_fm_menu_context_display(E_Fm_Smart_Data *sd, Evas_Coord dx, Evas_Coord dy, un
|
|||
if(action == default_action)
|
||||
continue;
|
||||
|
||||
|
||||
mid = E_NEW(E_Fm_Menu_Item_Data,1);
|
||||
mid->action = action;
|
||||
mid->sd = sd;
|
||||
sd->operation.menu_item_data = evas_list_append(sd->operation.menu_item_data, mid);
|
||||
|
||||
mi = e_menu_item_new(mn);
|
||||
e_menu_item_label_set(mi, _(action->label));
|
||||
e_menu_item_callback_set(mi, _e_fm_menu_actions, sd);
|
||||
e_menu_item_label_set(mi, e_fm_mime_translate(sd, action->label));
|
||||
e_menu_item_callback_set(mi, _e_fm_menu_actions, mid);
|
||||
e_menu_item_icon_edje_set(mi, (char *)e_theme_edje_file_get("base/theme/fileman",
|
||||
"fileman/button/open"),"fileman/button/open");
|
||||
|
||||
|
@ -4038,6 +4073,8 @@ _e_fm_menu_context_display(E_Fm_Smart_Data *sd, Evas_Coord dx, Evas_Coord dy, un
|
|||
mime = mime->parent;
|
||||
} while(mime);
|
||||
|
||||
sd->operation.menu = mn;
|
||||
|
||||
if (!sd->win) return;
|
||||
|
||||
ecore_evas_geometry_get(sd->win->ecore_evas, &x, &y, &w, &h);
|
||||
|
@ -4049,14 +4086,64 @@ _e_fm_menu_context_display(E_Fm_Smart_Data *sd, Evas_Coord dx, Evas_Coord dy, un
|
|||
static void
|
||||
_e_fm_menu_actions(void *data, E_Menu *m, E_Menu_Item *mi)
|
||||
{
|
||||
E_Fm_Smart_Data *sd;
|
||||
E_Fm_Mime_Action *action;
|
||||
Evas_List *l;
|
||||
Evas_List *files = NULL;
|
||||
E_Fm_Menu_Item_Data *mid;
|
||||
|
||||
sd = data;
|
||||
/* search for the action clicked */
|
||||
action = e_fm_mime_action_get_by_label(mi->label);
|
||||
mid = data;
|
||||
/* execute the action on the files */
|
||||
e_fm_mime_action_call(sd,action);
|
||||
e_fm_mime_action_call(mid->sd,mid->action);
|
||||
}
|
||||
|
||||
static void
|
||||
_e_fm_operation_from_selection(E_Fm_Smart_Data *sd)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/* free functions */
|
||||
/******************/
|
||||
static void
|
||||
_e_fm_operation_menu_free(E_Fm_Smart_Data *sd)
|
||||
{
|
||||
if(sd->operation.menu)
|
||||
e_object_del(E_OBJECT(sd->operation.menu));
|
||||
sd->operation.menu = NULL;
|
||||
while(sd->operation.menu_item_data)
|
||||
{
|
||||
E_Fm_Menu_Item_Data *mid;
|
||||
|
||||
mid = (E_Fm_Menu_Item_Data*)sd->operation.menu_item_data->data;
|
||||
E_FREE(mid);
|
||||
sd->operation.menu_item_data = evas_list_remove_list(sd->operation.menu_item_data, sd->operation.menu_item_data);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_e_fm_operation_files_free(E_Fm_Smart_Data *sd)
|
||||
{
|
||||
while (sd->operation.files)
|
||||
{
|
||||
E_Fm_File *file;
|
||||
|
||||
file = sd->operation.files->data;
|
||||
sd->operation.files = evas_list_remove_list(
|
||||
sd->operation.files, sd->operation.files);
|
||||
/* also delete the file, its a copy of the selected or a new file
|
||||
* in case of a drop
|
||||
*/
|
||||
e_object_del(E_OBJECT(file));
|
||||
}
|
||||
/* also delete the menu associated with this operation */
|
||||
_e_fm_operation_menu_free(sd);
|
||||
}
|
||||
|
||||
static void
|
||||
_e_fm_operation_free(E_Fm_Smart_Data *sd)
|
||||
{
|
||||
if(sd->operation.hover)
|
||||
{
|
||||
e_object_del(E_OBJECT(sd->operation.hover));
|
||||
sd->operation.hover = NULL;
|
||||
}
|
||||
/* delete the files and the menu */
|
||||
_e_fm_operation_files_free(sd);
|
||||
}
|
||||
|
|
|
@ -11,6 +11,8 @@ typedef struct _E_Fm_Dir_Metadata E_Fm_Dir_Metadata;
|
|||
typedef struct _E_Fm_Fake_Mouse_Up_Info E_Fm_Fake_Mouse_Up_Info;
|
||||
typedef struct _E_Event_Fm_Reconfigure E_Event_Fm_Reconfigure;
|
||||
typedef struct _E_Event_Fm_Directory_Change E_Event_Fm_Directory_Change;
|
||||
typedef struct _E_Fm_Menu_Item_Data E_Fm_Menu_Item_Data;
|
||||
|
||||
typedef struct _E_Fm_Assoc_App E_Fm_Assoc_App;
|
||||
|
||||
typedef enum _E_Fm_Arrange E_Fm_Arrange;
|
||||
|
@ -23,6 +25,14 @@ typedef enum _E_Fm_Drag_Button E_Fm_Drag_Button;
|
|||
#ifndef E_FM_SMART_H
|
||||
#define E_FM_SMART_H
|
||||
|
||||
/* this is for passing the E_Fm_Mime_Action of a menu item and the E_Fm_Smart_Data
|
||||
* in one struct for the menu item callback */
|
||||
struct _E_Fm_Menu_Item_Data
|
||||
{
|
||||
E_Fm_Mime_Action *action;
|
||||
E_Fm_Smart_Data *sd;
|
||||
};
|
||||
|
||||
struct _E_Fm_Config
|
||||
{
|
||||
int width;
|
||||
|
@ -50,11 +60,9 @@ struct _E_Fm_Icon
|
|||
struct {
|
||||
unsigned char selected : 1;
|
||||
unsigned char hover : 1;
|
||||
unsigned char visible : 1; /* FIXME what was it for?to stop comparing icon_obj to NULL */
|
||||
unsigned char visible : 1; /* to stop comparing icon_obj to NULL */
|
||||
}
|
||||
state;
|
||||
|
||||
E_Menu *menu;
|
||||
};
|
||||
|
||||
struct _E_Fm_Icon_CFData
|
||||
|
@ -134,7 +142,7 @@ struct _E_Fm_Smart_Data
|
|||
|
||||
E_Fm_Dir_Metadata *meta;
|
||||
|
||||
Evas_Hash *mime_menu_hash;
|
||||
Evas_Hash *mime_menu_hash; /* FIXME delete this */
|
||||
|
||||
char *dir; /* FIXME this could be actually a E_Fm_Dir */
|
||||
DIR *dir2;
|
||||
|
@ -215,6 +223,8 @@ struct _E_Fm_Smart_Data
|
|||
Evas_List *files; /* list of E_Fm_Files */
|
||||
E_Fm_File *hover; /* the file of the relative directory for operations */
|
||||
E_Fm_Mime_Entry *mime; /* overall mime for all the icons we are going to operate wirh */
|
||||
E_Menu *menu; /* the menu displayed for it (action/context) */
|
||||
Evas_List *menu_item_data; /* the data created for each callback, for free later */
|
||||
}
|
||||
operation; /* the operating files, for wich we are going to make actions
|
||||
might be the selected files or the dropped files */
|
||||
|
|
Loading…
Reference in New Issue