Enlightenment CVS committal Author : raster Project : e17 Module : apps/e
Dir : e17/apps/e/src/bin Modified Files: e_fm.c e_fm.h e_fm_prop.c e_fm_prop.h Log Message: fix segv and fixme related to fm properites dialog =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_fm.c,v retrieving revision 1.150 retrieving revision 1.151 diff -u -3 -r1.150 -r1.151 --- e_fm.c 2 May 2007 11:21:18 -0000 1.150 +++ e_fm.c 3 May 2007 12:44:10 -0000 1.151 @@ -122,6 +122,7 @@ 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_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 @@ 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_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 @@ 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 =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_fm.h,v retrieving revision 1.40 retrieving revision 1.41 diff -u -3 -r1.40 -r1.41 --- e_fm.h 17 Apr 2007 15:46:51 -0000 1.40 +++ e_fm.h 3 May 2007 12:44:10 -0000 1.41 @@ -191,7 +191,8 @@ 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); =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_fm_prop.c,v retrieving revision 1.12 retrieving revision 1.13 diff -u -3 -r1.12 -r1.13 --- e_fm_prop.c 11 Mar 2007 05:54:07 -0000 1.12 +++ e_fm_prop.c 3 May 2007 12:44:10 -0000 1.13 @@ -52,6 +52,7 @@ /* 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 @@ /* 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 @@ 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 @@ 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); =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_fm_prop.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- e_fm_prop.h 14 Dec 2006 15:44:47 -0000 1.2 +++ e_fm_prop.h 3 May 2007 12:44:10 -0000 1.3 @@ -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 ------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs