From 3c31271012cd131271872a32dc5214a81010d665 Mon Sep 17 00:00:00 2001 From: Vladimir Nadvornik Date: Mon, 8 Jun 2009 19:05:49 +0000 Subject: [PATCH] unify code paths for New directory keep the directory visible after rename https://sourceforge.net/tracker/?func=detail&aid=1951183&group_id=222125&atid=1054680 --- src/layout_util.c | 2 +- src/utilops.c | 13 +++++++++---- src/utilops.h | 2 +- src/view_dir.c | 24 +++++++++++++++++++++++- src/view_dir.h | 2 ++ 5 files changed, 36 insertions(+), 7 deletions(-) diff --git a/src/layout_util.c b/src/layout_util.c index a2fd23db..69582210 100644 --- a/src/layout_util.c +++ b/src/layout_util.c @@ -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) diff --git a/src/utilops.c b/src/utilops.c index 1a733ced..19ca451c 100644 --- a/src/utilops.c +++ b/src/utilops.c @@ -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); } diff --git a/src/utilops.h b/src/utilops.h index 9941720f..50be65b3 100644 --- a/src/utilops.h +++ b/src/utilops.h @@ -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 diff --git a/src/view_dir.c b/src/view_dir.c index 402a81a1..54172f4e 100644 --- a/src/view_dir.c +++ b/src/view_dir.c @@ -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 diff --git a/src/view_dir.h b/src/view_dir.h index 6115a238..9520a92b 100644 --- a/src/view_dir.h +++ b/src/view_dir.h @@ -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); -- 2.20.1