fix segv and fixme related to fm properites dialog

SVN revision: 29810
This commit is contained in:
Carsten Haitzler 2007-05-03 12:44:10 +00:00
parent b1e8f3cc20
commit 668ca67d16
4 changed files with 46 additions and 18 deletions

View File

@ -122,6 +122,7 @@ struct _E_Fm2_Icon
int saved_rel;
E_Menu *menu;
E_Entry_Dialog *entry_dialog;
E_Config_Dialog *prop_dialog;
E_Dialog *dialog;
E_Fm2_Icon_Info info;
@ -261,6 +262,7 @@ static void _e_fm2_file_rename_delete_cb(void *obj);
static void _e_fm2_file_rename_yes_cb(char *text, void *data);
static void _e_fm2_file_rename_no_cb(void *data);
static void _e_fm2_file_properties(void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_fm2_file_properties_delete_cb(void *obj);
static void _e_fm2_file_delete(void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_fm2_file_delete_delete_cb(void *obj);
static void _e_fm2_file_delete_yes_cb(void *data, E_Dialog *dialog);
@ -1162,6 +1164,13 @@ e_fm2_icon_get(Evas *evas, const char *realpath,
return oic;
}
EAPI E_Fm2_Icon_Info *
e_fm2_icon_file_info_get(E_Fm2_Icon *ic)
{
if (!ic) return NULL;
return &(ic->info);
}
/* FIXME: tmp delay - fix later */
static int
_e_fm2_cb_spawn_timer(void *data)
@ -2452,6 +2461,11 @@ _e_fm2_icon_free(E_Fm2_Icon *ic)
e_object_del(E_OBJECT(ic->entry_dialog));
ic->entry_dialog = NULL;
}
if (ic->prop_dialog)
{
e_object_del(E_OBJECT(ic->prop_dialog));
ic->prop_dialog = NULL;
}
if (ic->info.file) evas_stringshare_del(ic->info.file);
if (ic->info.mime) evas_stringshare_del(ic->info.mime);
if (ic->info.label) evas_stringshare_del(ic->info.label);
@ -5108,8 +5122,19 @@ _e_fm2_file_properties(void *data, E_Menu *m, E_Menu_Item *mi)
con = e_container_current_get(man);
if (!con) return;
/* FIXME: get and store properties dialog into icon */
e_fm_prop_file(con, &(ic->info));
if (ic->prop_dialog) e_object_del(E_OBJECT(ic->prop_dialog));
ic->prop_dialog = e_fm_prop_file(con, ic);
E_OBJECT(ic->prop_dialog)->data = ic;
e_object_del_attach_func_set(E_OBJECT(ic->prop_dialog), _e_fm2_file_properties_delete_cb);
}
static void
_e_fm2_file_properties_delete_cb(void *obj)
{
E_Fm2_Icon *ic;
ic = E_OBJECT(obj)->data;
ic->prop_dialog = NULL;
}
static void

View File

@ -191,7 +191,8 @@ EAPI Evas_Object *
const char *keyhint,
void (*gen_func) (void *data, Evas_Object *obj, void *event_info),
void *data, int force_gen, const char **type_ret);
EAPI E_Fm2_Icon_Info *e_fm2_icon_file_info_get(E_Fm2_Icon *ic);
EAPI void e_fm2_client_data(Ecore_Ipc_Event_Client_Data *e);
EAPI void e_fm2_client_del(Ecore_Ipc_Event_Client_Del *e);

View File

@ -52,6 +52,7 @@ static void _cb_preview_update(void *data, Evas_Object *obj, void *event_info);
/* Actual config data we will be playing with whil the dialog is active */
struct _E_Config_Dialog_Data
{
E_Fm2_Icon *ic;
E_Fm2_Icon_Info *fi;
struct {
Evas_Object *icon_wid;
@ -79,7 +80,7 @@ struct _E_Config_Dialog_Data
/* a nice easy setup function that does the dirty work */
EAPI E_Config_Dialog *
e_fm_prop_file(E_Container *con, E_Fm2_Icon_Info *fi)
e_fm_prop_file(E_Container *con, E_Fm2_Icon *ic)
{
E_Config_Dialog *cfd;
E_Config_Dialog_View *v;
@ -99,27 +100,28 @@ e_fm_prop_file(E_Container *con, E_Fm2_Icon_Info *fi)
cfd = e_config_dialog_new(con,
_("File Properties"),
"E", "_fm_prop",
"enlightenment/file_properties", 0, v, fi);
"enlightenment/file_properties", 0, v, ic);
return cfd;
}
/**--CREATE--**/
static void
_fill_data(E_Config_Dialog_Data *cfdata, E_Fm2_Icon_Info *fi)
_fill_data(E_Config_Dialog_Data *cfdata, E_Fm2_Icon *ic)
{
struct passwd *pw;
cfdata->fi = fi;
if (fi->file) cfdata->file = strdup(fi->file);
cfdata->size = e_util_size_string_get(fi->statinfo.st_size);
cfdata->mod_date = e_util_file_time_get(fi->statinfo.st_mtime);
if (fi->mime) cfdata->mime = strdup(fi->mime);
pw = getpwuid(fi->statinfo.st_uid);
cfdata->ic = ic;
cfdata->fi = e_fm2_icon_file_info_get(ic);
if (cfdata->fi->file) cfdata->file = strdup(cfdata->fi->file);
cfdata->size = e_util_size_string_get(cfdata->fi->statinfo.st_size);
cfdata->mod_date = e_util_file_time_get(cfdata->fi->statinfo.st_mtime);
if (cfdata->fi->mime) cfdata->mime = strdup(cfdata->fi->mime);
pw = getpwuid(cfdata->fi->statinfo.st_uid);
if (pw) cfdata->owner = strdup(pw->pw_name);
if (fi->statinfo.st_mode & S_IRUSR) cfdata->owner_read = 1;
if (fi->statinfo.st_mode & S_IWUSR) cfdata->owner_write = 1;
if (fi->statinfo.st_mode & S_IROTH) cfdata->others_read = 1;
if (fi->statinfo.st_mode & S_IWOTH) cfdata->others_write = 1;
if (cfdata->fi->statinfo.st_mode & S_IRUSR) cfdata->owner_read = 1;
if (cfdata->fi->statinfo.st_mode & S_IWUSR) cfdata->owner_write = 1;
if (cfdata->fi->statinfo.st_mode & S_IROTH) cfdata->others_read = 1;
if (cfdata->fi->statinfo.st_mode & S_IWOTH) cfdata->others_write = 1;
}
static void *
@ -317,7 +319,7 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cf
ob = e_widget_button_add(evas, "", NULL, _cb_icon_sel, cfdata, cfd);
cfdata->gui.icon_wid = ob;
oi = e_fm2_icon_get(evas, e_fm2_real_path_get(cfdata->fi->fm),
NULL, cfdata->fi,
cfdata->ic, cfdata->fi,
cfg->icon.key_hint,
NULL, NULL, 0, &itype);
e_widget_button_icon_set(ob, oi);

View File

@ -6,7 +6,7 @@
#ifndef E_FM_PROP_H
#define E_FM_PROP_H
EAPI E_Config_Dialog *e_fm_prop_file(E_Container *con, E_Fm2_Icon_Info *fi);
EAPI E_Config_Dialog *e_fm_prop_file(E_Container *con, E_Fm2_Icon *ic);
#endif
#endif