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

Reply via email to