unify code paths for New directory
authorVladimir Nadvornik <nadvornik@suse.cz>
Mon, 8 Jun 2009 19:05:49 +0000 (19:05 +0000)
committerVladimir Nadvornik <nadvornik@suse.cz>
Mon, 8 Jun 2009 19:05:49 +0000 (19:05 +0000)
keep the directory visible after rename
https://sourceforge.net/tracker/?func=detail&aid=1951183&group_id=222125&atid=1054680

src/layout_util.c
src/utilops.c
src/utilops.h
src/view_dir.c
src/view_dir.h

index a2fd23d..6958221 100644 (file)
@@ -263,7 +263,7 @@ static void layout_menu_dir_cb(GtkAction *action, gpointer data)
 {
        LayoutWindow *lw = data;
 
-       file_util_create_dir(lw->dir_fd, layout_window(lw), NULL, NULL);
+       if (lw->vd) vd_new_folder(lw->vd, lw->dir_fd);
 }
 
 static void layout_menu_copy_cb(GtkAction *action, gpointer data)
index 1a733ce..19ca451 100644 (file)
@@ -935,7 +935,8 @@ void file_util_check_ci(UtilityData *ud)
        gint error = CHANGE_OK;
        gchar *desc = NULL;
        
-       if (ud->type != UTILITY_TYPE_CREATE_FOLDER)
+       if (ud->type != UTILITY_TYPE_CREATE_FOLDER &&
+           ud->type != UTILITY_TYPE_RENAME_FOLDER)
                {
                if (ud->dest_path && !isdir(ud->dest_path))
                        {
@@ -2580,7 +2581,7 @@ static gboolean file_util_rename_dir_prepare(UtilityData *ud, const gchar *new_p
 }
        
 
-static void file_util_rename_dir_full(FileData *fd, const gchar *new_path, GtkWidget *parent, UtilityPhase phase)
+static void file_util_rename_dir_full(FileData *fd, const gchar *new_path, GtkWidget *parent, UtilityPhase phase, FileUtilDoneFunc done_func, gpointer done_data)
 {
        UtilityData *ud;
 
@@ -2594,6 +2595,10 @@ static void file_util_rename_dir_full(FileData *fd, const gchar *new_path, GtkWi
        ud->flist = NULL;
        ud->content_list = NULL;
        ud->parent = parent;
+
+       ud->done_func = done_func;
+       ud->done_data = done_data;
+       ud->dest_path = g_strdup(new_path);
        
        ud->messages.title = _("Rename");
        ud->messages.question = _("Rename folder?");
@@ -2732,9 +2737,9 @@ void file_util_create_dir(FileData *dir_fd, GtkWidget *parent, FileUtilDoneFunc
        file_util_create_dir_full(dir_fd, NULL, parent, UTILITY_PHASE_ENTERING, done_func, done_data);
 }
 
-void file_util_rename_dir(FileData *source_fd, const gchar *new_path, GtkWidget *parent)
+void file_util_rename_dir(FileData *source_fd, const gchar *new_path, GtkWidget *parent, FileUtilDoneFunc done_func, gpointer done_data)
 {
-       file_util_rename_dir_full(source_fd, new_path, parent, UTILITY_PHASE_ENTERING);
+       file_util_rename_dir_full(source_fd, new_path, parent, UTILITY_PHASE_ENTERING, done_func, done_data);
 }
 
 
index 9941720..50be65b 100644 (file)
@@ -41,7 +41,7 @@ void file_util_write_metadata(FileData *source_fd, GList *source_list, GtkWidget
 
 void file_util_create_dir(FileData *dir_fd, GtkWidget *parent, FileUtilDoneFunc done_func, gpointer done_data);
 
-void file_util_rename_dir(FileData *source_fd, const gchar *new_path, GtkWidget *parent);
+void file_util_rename_dir(FileData *source_fd, const gchar *new_path, GtkWidget *parent, FileUtilDoneFunc done_func, gpointer done_data);
 
 /* these avoid the location entry dialog, list must be files only and
  * dest_path must be a valid directory path
index 402a81a..54172f4 100644 (file)
@@ -242,6 +242,23 @@ FileData *vd_get_fd_from_tree_path(ViewDir *vd, GtkTreeView *tview, GtkTreePath
        return fd;
 }
 
+static void vd_rename_finished_cb(gboolean success, const gchar *new_path, gpointer data)
+{
+       ViewDir *vd = data;
+       if (success)
+               {
+               FileData *fd = file_data_new_simple(new_path);
+               GtkTreeIter iter;
+
+               if (vd_find_row(vd, fd, &iter))
+                       {
+                       tree_view_row_make_visible(GTK_TREE_VIEW(vd->view), &iter, TRUE);
+                       }
+
+               file_data_unref(fd);
+               }
+}
+
 static gboolean vd_rename_cb(TreeEditData *td, const gchar *old, const gchar *new, gpointer data)
 {
        ViewDir *vd = data;
@@ -256,7 +273,7 @@ static gboolean vd_rename_cb(TreeEditData *td, const gchar *old, const gchar *ne
        new_path = g_build_filename(base, new, NULL);
        g_free(base);
 
-       file_util_rename_dir(fd, new_path, vd->view);
+       file_util_rename_dir(fd, new_path, vd->view, vd_rename_finished_cb, vd);
        
        g_free(new_path);
 
@@ -686,6 +703,11 @@ GtkWidget *vd_pop_menu(ViewDir *vd, FileData *fd)
        return menu;
 }
 
+void vd_new_folder(ViewDir *vd, FileData *dir_fd)
+{
+       file_util_create_dir(dir_fd, vd->widget, vd_pop_menu_new_rename_cb, vd);
+}
+
 /*
  *-----------------------------------------------------------------------------
  * dnd
index 6115a23..9520a92 100644 (file)
@@ -42,6 +42,8 @@ void vd_popup_destroy_cb(GtkWidget *widget, gpointer data);
 GtkWidget *vd_drop_menu(ViewDir *vd, gint active);
 GtkWidget *vd_pop_menu(ViewDir *vd, FileData *fd);
 
+void vd_new_folder(ViewDir *vd, FileData *dir_fd);
+
 void vd_dnd_drop_scroll_cancel(ViewDir *vd);
 void vd_dnd_init(ViewDir *vd);