[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[E-devel] Fsel patch



-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi,

A patch for the fsel.

This patch add a menu to rename and delete files in the fsel. But, i
don't know refresh the smart when a file is removed.

Regards,

maxtoo.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.3 (GNU/Linux)

iD8DBQFE0MSC7vwF1MVzFTgRAmkeAJ4vmsUIpCCDwcJjNjWYCtATg10tIACfc0K+
i2L+sJFg0dxOWAkrGhPgXdI=
=RjMV
-----END PGP SIGNATURE-----
--- e_fm.c	2006-08-01 16:46:48.000000000 +0000
+++ /usr/portage/distfiles/cvs-src/e17/apps/e/src/bin/e_fm.c	2006-08-02 15:06:53.000000000 +0000
@@ -137,6 +137,13 @@
 static void _e_fm2_smart_clip_set(Evas_Object *obj, Evas_Object * clip);
 static void _e_fm2_smart_clip_unset(Evas_Object *obj);
 
+static void _e_fm2_menu_action_display(E_Fm2_Icon *ic, Evas_Object *obj, unsigned int timestamp);
+
+static void _e_fm2_file_rename (void *data, E_Menu *m, E_Menu_Item *mi);
+static void _e_fm2_file_rename_yes_cb (char *text, void *data);
+static void _e_fm2_file_delete (void *data, E_Menu *m, E_Menu_Item *mi);
+static void _e_fm2_file_delete_yes_cb (void *data, E_Dialog *dialog);
+
 static char *_meta_path = NULL;
 static Evas_Smart *_e_fm2_smart = NULL;
 
@@ -1796,6 +1803,13 @@
    
    ic = data;
    ev = event_info;
+   
+   switch(ev->button)
+     {
+       case 3:
+         _e_fm2_menu_action_display(ic, obj, ev->timestamp);
+	 break;
+     }
 }
     
 static void
@@ -1803,7 +1817,7 @@
 {
    Evas_Event_Mouse_Move *ev;
    E_Fm2_Icon *ic;
-   
+  
    ic = data;
    ev = event_info;
 }
@@ -2203,3 +2217,173 @@
    if (!sd) return;
    evas_object_clip_unset(sd->clip);
 }
+
+static void
+_e_fm2_menu_action_display(E_Fm2_Icon *ic, Evas_Object *obj, unsigned int timestamp)
+{
+  E_Fm2_Smart_Data *sd;
+  E_Menu *mn;
+  E_Menu_Item *mi;
+  E_Manager *man;
+  E_Container *con;
+  E_Zone *zone;
+  int x, y;
+
+  sd = ic->sd;
+
+  if (ic->selected)
+    {
+      mn = e_menu_new();
+      e_menu_category_set(mn, "fileman/action");
+
+      mi = e_menu_item_new(mn);
+      e_menu_item_label_set(mi, _("Delete"));
+      e_menu_item_callback_set(mi, _e_fm2_file_delete, ic);
+
+      mi = e_menu_item_new(mn);
+      e_menu_item_label_set(mi, _("Rename"));
+      e_menu_item_callback_set(mi, _e_fm2_file_rename, ic);
+
+      man = e_manager_current_get();
+      if (!man) return;
+      con = e_container_current_get(man);
+      if (!con) return;
+      ecore_x_pointer_xy_get(con->win, &x, &y);
+
+      zone = e_util_zone_current_get(man);
+      if (!zone) return;
+
+      e_menu_activate_mouse(mn, zone, 
+                            x, y, 1, 1, 
+                            E_MENU_POP_DIRECTION_DOWN, timestamp);
+    }
+}
+
+static void
+_e_fm2_file_rename (void *data, E_Menu *m, E_Menu_Item *mi)
+{
+  E_Fm2_Icon *ic;
+  E_Manager *man;
+  E_Container *con;
+  E_Win *win;
+  char *old_path;
+  char text[PATH_MAX + 256];
+  
+  ic = data;
+ 
+  man = e_manager_current_get();
+  if (!man) return;
+  con = e_container_current_get(man);
+  if (!con) return;
+  win = e_win_new(con);
+  
+  snprintf(text, PATH_MAX + 256, "Rename %s to", ic->info.file);
+  e_entry_dialog_show("Rename file", NULL, text, NULL, NULL, 
+                      _e_fm2_file_rename_yes_cb, NULL, ic);
+}
+
+static void
+_e_fm2_file_rename_yes_cb (char *text, void *data)
+{
+  E_Fm2_Icon *ic;
+  E_Dialog *dialog;
+  E_Manager *man;
+  E_Container *con;
+  char newpath[PATH_MAX];
+  char oldpath[PATH_MAX];
+  char error[PATH_MAX + 256];
+  
+  ic = data;
+
+  if (text || strcmp(text, ic->info.file))
+    {
+      snprintf(newpath, PATH_MAX, "%s/%s", ic->sd->realpath, text);
+      snprintf(oldpath, PATH_MAX, "%s/%s", ic->sd->realpath, ic->info.file);
+
+      if (rename(oldpath, newpath) < 0)
+        {
+          man = e_manager_current_get();
+          if (!man) return;
+	  con = e_container_current_get(man);
+	  if (!con) return;
+	  
+	  dialog = e_dialog_new(con);
+	  e_dialog_button_add(dialog, _("OK"), NULL, NULL, NULL);
+	  e_dialog_button_focus_num(dialog, 1);
+	  e_dialog_title_set(dialog, _("Error"));
+	  snprintf(error, PATH_MAX + 256, _("Could not rename from <b>%s</b> to <b>%s</b>"), ic->info.file, text);
+	  e_dialog_text_set(dialog, error);
+	  e_dialog_show(dialog);
+	  return;
+	}
+
+      ic->info.label = NULL;
+      ic->info.file = strrchr(newpath, '/');
+      ic->info.file++;
+      _e_fm2_icon_label_set(ic, ic->obj);
+    }
+}
+
+static void
+_e_fm2_file_delete (void *data, E_Menu *m, E_Menu_Item *mi)
+{
+  E_Manager *man;
+  E_Container *con;
+  E_Dialog *dialog;
+  E_Fm2_Icon *ic;
+  char text[PATH_MAX + 256];
+
+  man = e_manager_current_get();
+  if (!man) return;
+  con = e_container_current_get(man);
+  if (!con) return;
+
+  ic = data;
+
+  dialog = e_dialog_new(con);
+  e_dialog_button_add(dialog, _("Yes"), NULL, _e_fm2_file_delete_yes_cb, ic);
+  e_dialog_button_add(dialog, _("No"), NULL, NULL, NULL);
+  e_dialog_button_focus_num(dialog, 1);
+  e_dialog_title_set(dialog, _("Confirm Delete"));
+  snprintf(text, PATH_MAX + 256, _("Are you sure you want to delete <br><b>%s/%s</b> ?"), ic->sd->realpath, ic->info.file);
+  e_dialog_text_set(dialog, text);
+  e_dialog_show(dialog);
+}
+
+static void
+_e_fm2_file_delete_yes_cb (void *data, E_Dialog *dialog)
+{
+  E_Manager *man;
+  E_Container *con;
+  E_Fm2_Icon *ic;
+  Evas_Object *obj;
+  char path[PATH_MAX];
+  int ret;
+
+  ic = data;
+
+  snprintf(path, PATH_MAX, "%s/%s", ic->sd->realpath, ic->info.file);
+
+  if (!(ecore_file_recursive_rm(path)))
+    {
+      char text[PATH_MAX + 256];
+
+      man = e_manager_current_get();
+      if (!man) return;
+      con = e_container_current_get(man);
+      if (!con) return;
+
+      e_object_del(E_OBJECT(dialog));
+      dialog = e_dialog_new(con);
+      e_dialog_button_add(dialog, _("OK"), NULL, NULL, NULL);
+      e_dialog_button_focus_num(dialog, 1);
+      e_dialog_title_set(dialog, _("Error"));
+      snprintf(text, PATH_MAX + 256, _("Could not delete <br><b>%s</b>"), path);
+      e_dialog_text_set(dialog, text);
+      e_dialog_show(dialog);
+      return;
+    }
+
+  _e_fm2_icon_unrealize(ic);
+  e_object_del(E_OBJECT(dialog));
+}