#include "ui_misc.h"
#include "ui_tabcomp.h"
-
/*
*--------------------------------------------------------------------------
* call these when names change, files move, deleted, etc.
*--------------------------------------------------------------------------
*/
-void file_maint_renamed(const gchar *source, const gchar *dest)
+
+void file_maint_renamed(FileData *fd)
{
- cache_maint_moved(source, dest);
- collection_maint_renamed(source, dest);
+ cache_maint_moved(fd);
+ collection_maint_renamed(fd);
- layout_maint_renamed(source, dest);
- view_window_maint_moved(source, dest);
- dupe_maint_renamed(source, dest);
- search_maint_renamed(source, dest);
+ layout_maint_renamed(fd);
+ view_window_maint_moved(fd);
+ dupe_maint_renamed(fd);
+ search_maint_renamed(fd);
}
/* under most cases ignore_list should be NULL */
-void file_maint_removed(const gchar *path, GList *ignore_list)
+void file_maint_removed(FileData *fd, GList *ignore_list)
{
- layout_maint_removed(path, ignore_list);
- view_window_maint_removed(path, ignore_list);
- dupe_maint_removed(path);
- search_maint_removed(path);
+ layout_maint_removed(fd, ignore_list);
+ view_window_maint_removed(fd, ignore_list);
+ dupe_maint_removed(fd);
+ search_maint_removed(fd);
- collection_maint_removed(path);
- cache_maint_removed(path);
+ collection_maint_removed(fd);
+ cache_maint_removed(fd);
}
/* special case for correct main window behavior */
-void file_maint_moved(const gchar *source, const gchar *dest, GList *ignore_list)
+void file_maint_moved(FileData *fd, GList *ignore_list)
{
- cache_maint_moved(source, dest);
- collection_maint_renamed(source, dest);
+ cache_maint_moved(fd);
+ collection_maint_renamed(fd);
- layout_maint_moved(source, dest, ignore_list);
- view_window_maint_moved(source, dest);
- dupe_maint_renamed(source, dest);
- search_maint_renamed(source, dest);
+ layout_maint_moved(fd, ignore_list);
+ view_window_maint_moved(fd);
+ dupe_maint_renamed(fd);
+ search_maint_renamed(fd);
}
-void file_maint_copied(const gchar *source, const gchar *dest)
+void file_maint_copied(FileData *fd)
{
- cache_maint_copied(source, dest);
+ cache_maint_copied(fd);
}
/*
GList *source_list;
GList *source_next;
gchar *dest_base;
- gchar *source;
+ FileData *source_fd;
gchar *dest;
gint copy;
struct _FileDataSingle
{
gint confirmed;
- gchar *source;
+ FileData *source_fd;
gchar *dest;
gint copy;
#define DIALOG_DEF_IMAGE_DIM_Y 150
static void generic_dialog_add_image(GenericDialog *gd, GtkWidget *box,
- const gchar *path1, const gchar *header1,
- const gchar *path2, const gchar *header2,
+ FileData *fd1, const gchar *header1,
+ FileData *fd2, const gchar *header2,
gint show_filename)
{
ImageWindow *imd;
if (!box) box = gd->vbox;
- if (path2)
+ if (fd2)
{
hbox = pref_box_new(box, TRUE, GTK_ORIENTATION_HORIZONTAL, PREF_PAD_SPACE);
}
g_object_set(G_OBJECT(imd->pr), "zoom_expand", FALSE, NULL);
gtk_widget_set_size_request(imd->widget, DIALOG_DEF_IMAGE_DIM_X, DIALOG_DEF_IMAGE_DIM_Y);
gtk_box_pack_start(GTK_BOX(vbox), imd->widget, TRUE, TRUE, 0);
- image_change_path(imd, path1, 0.0);
+ image_change_fd(imd, fd1, 0.0);
gtk_widget_show(imd->widget);
if (show_filename)
{
- label = pref_label_new(vbox, (path1 == NULL) ? "" : filename_from_path(path1));
+ label = pref_label_new(vbox, (fd1 == NULL) ? "" : fd1->name);
}
/* only the first image is stored (for use in gd_image_set) */
/* image 2 */
- if (hbox && path2)
+ if (hbox && fd2)
{
vbox = pref_box_new(hbox, TRUE, GTK_ORIENTATION_VERTICAL, PREF_PAD_GAP);
g_object_set(G_OBJECT(imd->pr), "zoom_expand", FALSE, NULL);
gtk_widget_set_size_request(imd->widget, DIALOG_DEF_IMAGE_DIM_X, DIALOG_DEF_IMAGE_DIM_Y);
gtk_box_pack_start(GTK_BOX(vbox), imd->widget, TRUE, TRUE, 0);
- image_change_path(imd, path2, 0.0);
+ image_change_fd(imd, fd2, 0.0);
gtk_widget_show(imd->widget);
- pref_label_new(vbox, filename_from_path(path2));
+ pref_label_new(vbox, fd2->name);
}
}
-static void generic_dialog_image_set(GenericDialog *gd, const gchar *path)
+static void generic_dialog_image_set(GenericDialog *gd, FileData *fd)
{
ImageWindow *imd;
GtkWidget *label;
if (!imd) return;
- image_change_path(imd, path, 0.0);
- if (label) gtk_label_set_text(GTK_LABEL(label), filename_from_path(path));
+ image_change_fd(imd, fd, 0.0);
+ if (label) gtk_label_set_text(GTK_LABEL(label), fd->name);
}
/*
GtkWidget *parent,
void (*cancel_cb)(FileDialog *, gpointer), gpointer data)
{
- FileDialog *fd;
+ FileDialog *fdlg;
- fd = file_dialog_new(title, wmclass, wmsubclass, parent, cancel_cb, data);
+ fdlg = file_dialog_new(title, wmclass, wmsubclass, parent, cancel_cb, data);
if (place_dialogs_under_mouse)
{
- gtk_window_set_position(GTK_WINDOW(GENERIC_DIALOG(fd)->dialog), GTK_WIN_POS_MOUSE);
+ gtk_window_set_position(GTK_WINDOW(GENERIC_DIALOG(fdlg)->dialog), GTK_WIN_POS_MOUSE);
}
- return fd;
+ return fdlg;
}
/* this warning dialog is copied from SLIK's ui_utildg.c,
*--------------------------------------------------------------------------
*/
-static gint copy_file_ext(const gchar *s, const gchar *t)
+gint copy_file_ext(FileData *fd)
{
+ gint ret;
+ g_assert(fd->change);
if (editor_command[CMD_COPY])
- return start_editor_from_pair(CMD_COPY, s, t);
- return copy_file(s, t);
+ ret = start_editor_from_file(CMD_COPY, fd);
+ else
+ ret = copy_file(fd->change->source, fd->change->dest);
+
+ if (ret)
+ {
+ file_maint_copied(fd);
+ }
+
+ file_data_change_info_free(NULL, fd);
+
+ return ret;
}
-static gint move_file_ext(const gchar *s, const gchar *t)
+gint move_file_ext(FileData *fd)
{
+ gint ret;
+ g_assert(fd->change);
if (editor_command[CMD_MOVE])
- return start_editor_from_pair(CMD_MOVE, s, t);
- return move_file(s, t);
+ ret = start_editor_from_file(CMD_MOVE, fd);
+ else
+ ret = move_file(fd->change->source, fd->change->dest);
+
+ if (ret)
+ {
+ file_data_do_change(fd);
+ file_maint_moved(fd, NULL);
+ }
+
+ file_data_change_info_free(NULL, fd);
+
+ return ret;
}
-static gint rename_file_ext(const gchar *s, const gchar *t)
+gint rename_file_ext(FileData *fd)
{
+ gint ret;
+ g_assert(fd->change);
if (editor_command[CMD_RENAME])
- return start_editor_from_pair(CMD_RENAME, s, t);
- return rename_file(s, t);
+ ret = start_editor_from_file(CMD_RENAME, fd);
+ else
+ ret = rename_file(fd->change->source, fd->change->dest);
+
+ if (ret)
+ {
+ file_data_do_change(fd);
+ file_maint_renamed(fd);
+ }
+
+ file_data_change_info_free(NULL, fd);
+
+ return ret;
}
fdm->source_list = source_list;
fdm->source_next = fdm->source_list;
fdm->dest_base = g_strdup(dest);
- fdm->source = NULL;
+ fdm->source_fd = NULL;
fdm->dest = NULL;
fdm->copy = copy;
return fdm;
static void file_data_multiple_free(FileDataMult *fdm)
{
- path_list_free(fdm->source_list);
+ filelist_free(fdm->source_list);
g_free(fdm->dest_base);
g_free(fdm->dest);
g_free(fdm);
name = gtk_entry_get_text(GTK_ENTRY(fdm->rename_entry));
if (strlen(name) == 0 ||
- strcmp(name, filename_from_path(fdm->source)) == 0)
+ strcmp(name, fdm->source_fd->name) == 0)
{
fdm->confirmed = FALSE;
}
file_util_move_multiple_all_cb, FALSE);
generic_dialog_add_button(gd, GTK_STOCK_GOTO_LAST, _("S_kip all"), file_util_move_multiple_skip_all_cb, FALSE);
generic_dialog_add_button(gd, GTK_STOCK_GO_FORWARD, _("_Skip"), file_util_move_multiple_skip_cb, FALSE);
- generic_dialog_add_image(gd, NULL, fdm->dest, _("Existing file"), fdm->source, _("New file"), TRUE);
+ generic_dialog_add_image(gd, NULL, file_data_new_simple(fdm->dest), _("Existing file"), fdm->source_fd, _("New file"), TRUE);
/* rename option */
if (!fdm->dest)
{
GList *work = fdm->source_next;
- fdm->source = work->data;
- fdm->dest = concat_dir_and_file(fdm->dest_base, filename_from_path(fdm->source));
+ fdm->source_fd = work->data;
+ fdm->dest = concat_dir_and_file(fdm->dest_base, fdm->source_fd->name);
fdm->source_next = work->next;
fdm->confirmed = FALSE;
}
- if (fdm->dest && fdm->source && strcmp(fdm->dest, fdm->source) == 0)
+ if (fdm->dest && fdm->source_fd && strcmp(fdm->dest, fdm->source_fd->name) == 0)
{
if (!fdm->confirmed)
{
}
if (try)
{
+ file_data_change_info_new(fdm->source_fd->path, fdm->dest, fdm->source_fd);
if (fdm->copy)
{
- if (copy_file_ext(fdm->source, fdm->dest))
+ if (copy_file_ext(fdm->source_fd))
{
success = TRUE;
- file_maint_copied(fdm->source, fdm->dest);
}
}
else
{
- if (move_file_ext(fdm->source, fdm->dest))
+ if (move_file_ext(fdm->source_fd))
{
success = TRUE;
- file_maint_moved(fdm->source, fdm->dest, fdm->source_list);
}
}
+
}
}
-
if (!success)
{
GenericDialog *gd;
if (fdm->copy)
{
title = _("Error copying file");
- text = g_strdup_printf(_("Unable to copy file:\n%s\nto:\n%s\nduring multiple file copy."), fdm->source, fdm->dest);
+ text = g_strdup_printf(_("Unable to copy file:\n%s\nto:\n%s\nduring multiple file copy."), fdm->source_fd->path, fdm->dest);
}
else
{
title = _("Error moving file");
- text = g_strdup_printf(_("Unable to move file:\n%s\nto:\n%s\nduring multiple file move."), fdm->source, fdm->dest);
+ text = g_strdup_printf(_("Unable to move file:\n%s\nto:\n%s\nduring multiple file move."), fdm->source_fd->path, fdm->dest);
}
gd = file_util_gen_dlg(title, "GQview", "dlg_confirm",
NULL, TRUE,
if (!success) return;
}
-
+/*
+ if (fdm->source_list)
+ file_util_do_move_list(fdm->source_list, fdm->copy);
+ else
+ {
+ GList *list = g_list_append(NULL, file_data_ref(fdm->source_fd));
+ file_util_do_move_list(list, fdm->copy);
+ filelist_free(list);
+ }
+*/
file_data_multiple_free(fdm);
}
* Single file move
*/
-static FileDataSingle *file_data_single_new(const gchar *source, const gchar *dest, gint copy)
+static FileDataSingle *file_data_single_new(FileData *source_fd, const gchar *dest, gint copy)
{
FileDataSingle *fds = g_new0(FileDataSingle, 1);
fds->confirmed = FALSE;
- fds->source = g_strdup(source);
+ fds->source_fd = file_data_ref(source_fd);
fds->dest = g_strdup(dest);
fds->copy = copy;
return fds;
static void file_data_single_free(FileDataSingle *fds)
{
- g_free(fds->source);
+ file_data_unref(fds->source_fd);
g_free(fds->dest);
g_free(fds);
}
name = gtk_entry_get_text(GTK_ENTRY(fds->rename_entry));
if (strlen(name) == 0 ||
- strcmp(name, filename_from_path(fds->source)) == 0)
+ strcmp(name, fds->source_fd->name) == 0)
{
fds->confirmed = FALSE;
}
static void file_util_move_single(FileDataSingle *fds)
{
- if (fds->dest && fds->source && strcmp(fds->dest, fds->source) == 0)
+ if (fds->dest && fds->source_fd && strcmp(fds->dest, fds->source_fd->name) == 0)
{
file_util_warning_dialog(_("Source matches destination"),
_("Source and destination are the same, operation cancelled."),
pref_spacer(gd->vbox, 0);
generic_dialog_add_button(gd, GTK_STOCK_OK, _("_Overwrite"), file_util_move_single_ok_cb, TRUE);
- generic_dialog_add_image(gd, NULL, fds->dest, _("Existing file"), fds->source, _("New file"), TRUE);
+ generic_dialog_add_image(gd, NULL, file_data_new_simple(fds->dest), _("Existing file"), fds->source_fd, _("New file"), TRUE);
/* rename option */
else
{
gint success = FALSE;
+ file_data_change_info_new(fds->source_fd->path, fds->dest, fds->source_fd);
if (fds->copy)
{
- if (copy_file_ext(fds->source, fds->dest))
+ if (copy_file_ext(fds->source_fd))
{
success = TRUE;
- file_maint_copied(fds->source, fds->dest);
}
}
else
{
- if (move_file_ext(fds->source, fds->dest))
+ if (move_file_ext(fds->source_fd))
{
success = TRUE;
- file_maint_moved(fds->source, fds->dest, NULL);
}
}
if (!success)
if (fds->copy)
{
title = _("Error copying file");
- text = g_strdup_printf(_("Unable to copy file:\n%s\nto:\n%s"), fds->source, fds->dest);
+ text = g_strdup_printf(_("Unable to copy file:\n%s\nto:\n%s"), fds->source_fd->name, fds->dest);
}
else
{
title = _("Error moving file");
- text = g_strdup_printf(_("Unable to move file:\n%s\nto:\n%s"), fds->source, fds->dest);
+ text = g_strdup_printf(_("Unable to move file:\n%s\nto:\n%s"), fds->source_fd->name, fds->dest);
}
file_util_warning_dialog(title, text, GTK_STOCK_DIALOG_ERROR, NULL);
g_free(text);
* file move dialog
*/
-static void file_util_move_do(FileDialog *fd)
+static void file_util_move_do(FileDialog *fdlg)
{
- file_dialog_sync_history(fd, TRUE);
+ file_dialog_sync_history(fdlg, TRUE);
- if (fd->multiple_files)
+ if (fdlg->multiple_files)
{
- file_util_move_multiple(file_data_multiple_new(fd->source_list, fd->dest_path, fd->type));
- fd->source_list = NULL;
+ file_util_move_multiple(file_data_multiple_new(fdlg->source_list, fdlg->dest_path, fdlg->type));
+ fdlg->source_list = NULL;
}
else
{
- if (isdir(fd->dest_path))
+ if (isdir(fdlg->dest_path))
{
- gchar *buf = concat_dir_and_file(fd->dest_path, filename_from_path(fd->source_path));
- gtk_entry_set_text(GTK_ENTRY(fd->entry), buf);
+ gchar *buf = concat_dir_and_file(fdlg->dest_path, fdlg->source_fd->name);
+ gtk_entry_set_text(GTK_ENTRY(fdlg->entry), buf);
g_free(buf);
}
- file_util_move_single(file_data_single_new(fd->source_path, fd->dest_path, fd->type));
+ file_util_move_single(file_data_single_new(fdlg->source_fd, fdlg->dest_path, fdlg->type));
}
- file_dialog_close(fd);
+ file_dialog_close(fdlg);
}
-static void file_util_move_check(FileDialog *fd)
+static void file_util_move_check(FileDialog *fdlg)
{
- if (fd->dest_path && strcmp(fd->dest_path, "~") == 0)
+ if (fdlg->dest_path && strcmp(fdlg->dest_path, "~") == 0)
{
- gtk_entry_set_text(GTK_ENTRY(fd->entry), homedir());
+ gtk_entry_set_text(GTK_ENTRY(fdlg->entry), homedir());
}
- if (fd->multiple_files && !isdir(fd->dest_path))
+ if (fdlg->multiple_files && !isdir(fdlg->dest_path))
{
- if (isfile(fd->dest_path))
+ if (isfile(fdlg->dest_path))
{
file_util_warning_dialog(_("Invalid destination"),
_("When operating with multiple files, please select\na folder, not a file."),
return;
}
- if (!fd->dest_path || fd->dest_path[0] != '/')
+ if (!fdlg->dest_path || fdlg->dest_path[0] != '/')
{
- if (fd->source_path)
+ if (fdlg->source_fd)
{
gchar *base;
gchar *path;
- base = remove_level_from_path(fd->source_path);
- path = concat_dir_and_file(base, fd->dest_path);
+ base = remove_level_from_path(fdlg->source_fd->path);
+ path = concat_dir_and_file(base, fdlg->dest_path);
- gtk_entry_set_text(GTK_ENTRY(fd->entry), path);
+ gtk_entry_set_text(GTK_ENTRY(fdlg->entry), path);
g_free(path);
g_free(base);
return;
}
- file_util_move_do(fd);
+ file_util_move_do(fdlg);
}
-static void file_util_move_cb(FileDialog *fd, gpointer data)
+static void file_util_move_cb(FileDialog *fdlg, gpointer data)
{
- file_util_move_check(fd);
+ file_util_move_check(fdlg);
}
-static void file_util_move_cancel_cb(FileDialog *fd, gpointer data)
+static void file_util_move_cancel_cb(FileDialog *fdlg, gpointer data)
{
- file_dialog_close(fd);
+ file_dialog_close(fdlg);
}
-static void real_file_util_move(const gchar *source_path, GList *source_list,
+static void real_file_util_move(FileData *source_fd, GList *source_list,
const gchar *dest_path, gint copy, GtkWidget *parent)
{
- FileDialog *fd;
+ FileDialog *fdlg;
GtkWidget *label;
- gchar *path = NULL;
+ FileData *fd = NULL;
gint multiple;
const gchar *text;
const gchar *title;
const gchar *op_text;
const gchar *stock_id;
- if (!source_path && !source_list) return;
+ if (!source_fd && !source_list) return;
- if (source_path)
+ if (source_fd)
{
- path = g_strdup(source_path);
+ fd = file_data_ref(source_fd);
multiple = FALSE;
}
else if (source_list->next)
}
else
{
- path = g_strdup(source_list->data);
- path_list_free(source_list);
+ fd = file_data_ref(source_list->data);
+ filelist_free(source_list);
source_list = NULL;
multiple = FALSE;
}
{
title = _("Copy - GQview");
op_text = _("_Copy");
- if (path)
+ if (fd)
{
text = _("Copy file");
}
{
title = _("Move - GQview");
op_text = _("_Move");
- if (path)
+ if (fd)
{
text = _("Move file");
}
stock_id = GTK_STOCK_OK;
}
- fd = file_util_file_dlg(title, "GQview", "dlg_copymove", parent,
+ fdlg = file_util_file_dlg(title, "GQview", "dlg_copymove", parent,
file_util_move_cancel_cb, NULL);
- generic_dialog_add_message(GENERIC_DIALOG(fd), NULL, text, NULL);
+ generic_dialog_add_message(GENERIC_DIALOG(fdlg), NULL, text, NULL);
- if (path)
+ if (fd)
{
GtkWidget *box;
- box = pref_box_new(GENERIC_DIALOG(fd)->vbox, FALSE, GTK_ORIENTATION_HORIZONTAL, PREF_PAD_SPACE);
+ box = pref_box_new(GENERIC_DIALOG(fdlg)->vbox, FALSE, GTK_ORIENTATION_HORIZONTAL, PREF_PAD_SPACE);
pref_label_new(box, _("File name:"));
- pref_label_new(box, filename_from_path(path));
+ pref_label_new(box, fd->name);
}
- label = pref_label_new(GENERIC_DIALOG(fd)->vbox, _("Choose the destination folder."));
+ label = pref_label_new(GENERIC_DIALOG(fdlg)->vbox, _("Choose the destination folder."));
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- pref_spacer(GENERIC_DIALOG(fd)->vbox, 0);
+ pref_spacer(GENERIC_DIALOG(fdlg)->vbox, 0);
- file_dialog_add_button(fd, stock_id, op_text, file_util_move_cb, TRUE);
+ file_dialog_add_button(fdlg, stock_id, op_text, file_util_move_cb, TRUE);
- file_dialog_add_path_widgets(fd, NULL, dest_path, "move_copy", NULL, NULL);
+ file_dialog_add_path_widgets(fdlg, NULL, dest_path, "move_copy", NULL, NULL);
- fd->type = copy;
- fd->source_path = path;
- fd->source_list = source_list;
- fd->multiple_files = multiple;
+ fdlg->type = copy;
+ fdlg->source_fd = fd;
+ fdlg->source_list = source_list;
+ fdlg->multiple_files = multiple;
- gtk_widget_show(GENERIC_DIALOG(fd)->dialog);
+ gtk_widget_show(GENERIC_DIALOG(fdlg)->dialog);
}
-void file_util_move(const gchar *source_path, GList *source_list, const gchar *dest_path, GtkWidget *parent)
+void file_util_move(FileData *source_fd, GList *source_list, const gchar *dest_path, GtkWidget *parent)
{
- real_file_util_move(source_path, source_list, dest_path, FALSE, parent);
+ real_file_util_move(source_fd, source_list, dest_path, FALSE, parent);
}
-void file_util_copy(const gchar *source_path, GList *source_list, const gchar *dest_path, GtkWidget *parent)
+void file_util_copy(FileData *source_fd, GList *source_list, const gchar *dest_path, GtkWidget *parent)
{
- real_file_util_move(source_path, source_list, dest_path, TRUE, parent);
+ real_file_util_move(source_fd, source_list, dest_path, TRUE, parent);
}
void file_util_move_simple(GList *list, const gchar *dest_path)
if (!list) return;
if (!dest_path)
{
- path_list_free(list);
+ filelist_free(list);
return;
}
if (!list->next)
{
- const gchar *source;
+ FileData *source_fd;
gchar *dest;
- source = list->data;
- dest = concat_dir_and_file(dest_path, filename_from_path(source));
+ source_fd = list->data;
+ dest = concat_dir_and_file(dest_path, source_fd->name);
- file_util_move_single(file_data_single_new(source, dest, FALSE));
+ file_util_move_single(file_data_single_new(source_fd, dest, FALSE));
g_free(dest);
- path_list_free(list);
+ filelist_free(list);
return;
}
if (!list) return;
if (!dest_path)
{
- path_list_free(list);
+ filelist_free(list);
return;
}
if (!list->next)
{
- const gchar *source;
+ FileData *source_fd;
gchar *dest;
- source = list->data;
- dest = concat_dir_and_file(dest_path, filename_from_path(source));
+ source_fd = list->data;
+ dest = concat_dir_and_file(dest_path, source_fd->name);
- file_util_move_single(file_data_single_new(source, dest, TRUE));
+ file_util_move_single(file_data_single_new(source_fd, dest, TRUE));
g_free(dest);
- path_list_free(list);
+ filelist_free(list);
return;
}
warned = TRUE;
}
total -= fd->size;
- file_data_free(fd);
+ file_data_unref(fd);
}
filelist_free(list);
*gd = NULL;
}
-static gint file_util_unlink(const gchar *path)
+static gint file_util_unlink(FileData *fd)
{
static GenericDialog *gd = NULL;
gchar *result = NULL;
gint success = TRUE;
- if (!isfile(path)) return FALSE;
+ if (!isfile(fd->path)) return FALSE;
if (!safe_delete_enable)
{
- return unlink_file(path);
+ return unlink_file(fd->path);
}
if (!isdir(safe_delete_path))
{
gchar *dest;
- dest = file_util_safe_dest(path);
+ dest = file_util_safe_dest(fd->path);
if (dest)
{
- if (debug) printf("safe deleting %s to %s\n", path, dest);
- success = move_file(path, dest);
+ if (debug) printf("safe deleting %s to %s\n", fd->path, dest);
+ success = move_file(fd->path, dest);
}
else
{
success = FALSE;
}
- if (!success && !access_file(path, W_OK))
+ if (!success && !access_file(fd->path, W_OK))
{
result = _("Permission denied");
}
if (editor_command[CMD_DELETE])
{
- if (!start_editor_from_path_list(CMD_DELETE, source_list))
+ if (!start_editor_from_filelist(CMD_DELETE, source_list))
{
file_util_warning_dialog(_("File deletion failed"), _("Unable to delete files by external command\n"), GTK_STOCK_DIALOG_ERROR, NULL);
}
{
while (source_list)
{
- gchar *path = source_list->data;
- source_list = g_list_remove(source_list, path);
- file_maint_removed(path, source_list);
- g_free(path);
+ FileData *fd = source_list->data;
+ source_list = g_list_remove(source_list, fd);
+ file_maint_removed(fd, source_list);
+ file_data_unref(fd);
}
}
return;
while (source_list)
{
- gchar *path = source_list->data;
+ FileData *fd = source_list->data;
- source_list = g_list_remove(source_list, path);
+ source_list = g_list_remove(source_list, fd);
- if (!file_util_unlink(path))
+ if (!file_util_unlink(fd))
{
if (source_list)
{
NULL, TRUE,
file_util_delete_multiple_cancel_cb, source_list);
- text = g_strdup_printf(_("Unable to delete file:\n %s\n Continue multiple delete operation?"), path);
+ text = g_strdup_printf(_("Unable to delete file:\n %s\n Continue multiple delete operation?"), fd->path);
generic_dialog_add_message(d, GTK_STOCK_DIALOG_WARNING, NULL, text);
g_free(text);
{
gchar *text;
- text = g_strdup_printf(_("Unable to delete file:\n%s"), path);
+ text = g_strdup_printf(_("Unable to delete file:\n%s"), fd->path);
file_util_warning_dialog(_("Delete failed"), text, GTK_STOCK_DIALOG_ERROR, NULL);
g_free(text);
}
- g_free(path);
+ file_data_unref(fd);
return;
}
else
{
- file_maint_removed(path, source_list);
+ file_maint_removed(fd, source_list);
}
- g_free(path);
+ file_data_unref(fd);
}
}
{
GList *source_list = data;
- path_list_free(source_list);
+ filelist_free(source_list);
}
static void file_util_delete_multiple_review_skip(GenericDialog *gd, gint next)
GtkWidget *button_label;
GList *list;
GList *list_point;
- const gchar *path;
+ FileData *fd;
gchar *buf;
list = gd->data;
if (!list_point) return;
- path = list_point->data;
+ fd = list_point->data;
buf = g_strdup_printf(_("File %d of %d"),
- g_list_index(list, (gpointer)path) + 1,
+ g_list_index(list, (gpointer)fd) + 1,
g_list_length(list));
gtk_label_set_text(GTK_LABEL(button_label), buf);
g_free(buf);
gtk_widget_set_sensitive(button_back, (list_point->prev != NULL) );
gtk_widget_set_sensitive(button_next, (list_point->next != NULL) );
- generic_dialog_image_set(gd, path);
+ generic_dialog_image_set(gd, fd);
g_object_set_data(G_OBJECT(gd->dialog), "list_point", list_point);
}
static void file_util_delete_ok_cb(GenericDialog *gd, gpointer data)
{
- gchar *path = data;
+ FileData *fd = data;
if (editor_command[CMD_DELETE])
{
- if (!start_editor_from_file(CMD_DELETE, path))
+ if (!start_editor_from_file(CMD_DELETE, fd))
{
- gchar *text = g_strdup_printf(_("Unable to delete file by external command:\n%s"), path);
+ gchar *text = g_strdup_printf(_("Unable to delete file by external command:\n%s"), fd->path);
file_util_warning_dialog(_("File deletion failed"), text, GTK_STOCK_DIALOG_ERROR, NULL);
g_free(text);
}
else
{
- file_maint_removed(path, NULL);
+ file_maint_removed(fd, NULL);
}
}
- else if (!file_util_unlink(path))
+ else if (!file_util_unlink(fd))
{
- gchar *text = g_strdup_printf(_("Unable to delete file:\n%s"), path);
+ gchar *text = g_strdup_printf(_("Unable to delete file:\n%s"), fd->path);
file_util_warning_dialog(_("File deletion failed"), text, GTK_STOCK_DIALOG_ERROR, NULL);
g_free(text);
}
else
{
- file_maint_removed(path, NULL);
+ file_maint_removed(fd, NULL);
}
- g_free(path);
+ file_data_unref(fd);
}
static void file_util_delete_cancel_cb(GenericDialog *gd, gpointer data)
{
- gchar *path = data;
+ FileData *fd = data;
- g_free(path);
+ file_data_unref(fd);
}
-static void file_util_delete_single(const gchar *path, GtkWidget *parent)
+static void file_util_delete_single(FileData *fd, GtkWidget *parent)
{
- gchar *buf = g_strdup(path);
-
if (!confirm_delete)
{
- file_util_delete_ok_cb(NULL, buf);
+ file_util_delete_ok_cb(NULL, file_data_ref(fd));
}
else
{
gd = file_util_gen_dlg(_("Delete file - GQview"), "GQview", "dlg_confirm",
parent, TRUE,
- file_util_delete_cancel_cb, buf);
+ file_util_delete_cancel_cb, file_data_ref(fd));
generic_dialog_add_message(gd, NULL, _("Delete file?"), NULL);
table = pref_table_new(gd->vbox, 2, 2, FALSE, FALSE);
pref_table_label(table, 0, 0, _("File name:"), 1.0);
- pref_table_label(table, 1, 0, filename_from_path(path), 0.0);
+ pref_table_label(table, 1, 0, fd->name, 0.0);
pref_table_label(table, 0, 1, _("Location:"), 1.0);
- base = remove_level_from_path(path);
+ base = remove_level_from_path(fd->path);
pref_table_label(table, 1, 1, base, 0.0);
g_free(base);
- generic_dialog_add_image(gd, NULL, path, NULL, NULL, NULL, FALSE);
+ generic_dialog_add_image(gd, NULL, fd, NULL, NULL, NULL, FALSE);
box_append_safe_delete_status(gd);
}
}
-void file_util_delete(const gchar *source_path, GList *source_list, GtkWidget *parent)
+void file_util_delete(FileData *source_fd, GList *source_list, GtkWidget *parent)
{
- if (!source_path && !source_list) return;
+ if (!source_fd && !source_list) return;
- if (source_path)
+ if (source_fd)
{
- file_util_delete_single(source_path, parent);
+ file_util_delete_single(source_fd, parent);
}
else if (!source_list->next)
{
file_util_delete_single(source_list->data, parent);
- path_list_free(source_list);
+ filelist_free(source_list);
}
else
{
*/
enum {
- RENAME_COLUMN_PATH = 0,
+ RENAME_COLUMN_FD = 0,
+ RENAME_COLUMN_PATH,
RENAME_COLUMN_NAME,
RENAME_COLUMN_PREVIEW,
RENAME_COLUMN_COUNT
typedef struct _RenameDataMult RenameDataMult;
struct _RenameDataMult
{
- FileDialog *fd;
+ FileDialog *fdlg;
RenameType rename_type;
RenameDataMult *rd = data;
GtkWidget *dialog;
- dialog = GENERIC_DIALOG(rd->fd)->dialog;
+ dialog = GENERIC_DIALOG(rd->fdlg)->dialog;
if (!GTK_WIDGET_VISIBLE(dialog)) gtk_widget_show(dialog);
- rd->fd->type = TRUE;
+ rd->fdlg->type = TRUE;
file_util_rename_multiple(rd);
}
RenameDataMult *rd = data;
GtkWidget *dialog;
- dialog = GENERIC_DIALOG(rd->fd)->dialog;
+ dialog = GENERIC_DIALOG(rd->fdlg)->dialog;
if (!GTK_WIDGET_VISIBLE(dialog)) gtk_widget_show(dialog);
}
-static gint file_util_rename_multiple_find_row(RenameDataMult *rd, const gchar *path, GtkTreeIter *iter)
+static gint file_util_rename_multiple_find_row(RenameDataMult *rd, FileData *fd, GtkTreeIter *iter)
{
GtkTreeModel *store;
gint valid;
valid = gtk_tree_model_get_iter_first(store, iter);
while (valid)
{
- gchar *path_n;
+ FileData *fd_n;
gint ret;
- gtk_tree_model_get(GTK_TREE_MODEL(store), iter, RENAME_COLUMN_PATH, &path_n, -1);
- ret = (strcmp(path_n, path) == 0);
- g_free(path_n);
+ gtk_tree_model_get(GTK_TREE_MODEL(store), iter, RENAME_COLUMN_FD, &fd_n, -1);
+ ret = (fd_n == fd);
+// file_data_unref(fd_n);
if (ret) return row;
valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(store), iter);
static void file_util_rename_multiple(RenameDataMult *rd)
{
- FileDialog *fd;
+ FileDialog *fdlg;
- fd = rd->fd;
+ fdlg = rd->fdlg;
- if (isfile(fd->dest_path) && !fd->type)
+ if (isfile(fdlg->dest_path) && !fdlg->type)
{
GenericDialog *gd;
generic_dialog_add_button(gd, GTK_STOCK_OK, _("_Overwrite"), file_util_rename_multiple_ok_cb, TRUE);
generic_dialog_add_image(gd, NULL,
- fd->dest_path, _("Existing file"),
- fd->source_path, _("New file"), TRUE);
+ file_data_new_simple(fdlg->dest_path), _("Existing file"),
+ fdlg->source_fd, _("New file"), TRUE);
- gtk_widget_hide(GENERIC_DIALOG(fd)->dialog);
+ gtk_widget_hide(GENERIC_DIALOG(fdlg)->dialog);
gtk_widget_show(gd->dialog);
return;
}
else
{
- if (!rename_file_ext(fd->source_path, fd->dest_path))
+ file_data_change_info_new(fdlg->source_fd->path, fdlg->dest_path, fdlg->source_fd);
+ if (!rename_file_ext(fdlg->source_fd))
{
gchar *text = g_strdup_printf(_("Unable to rename file:\n%s\n to:\n%s"),
- filename_from_path(fd->source_path),
- filename_from_path(fd->dest_path));
+ fdlg->source_fd->name,
+ filename_from_path(fdlg->dest_path));
file_util_warning_dialog(_("Error renaming file"), text, GTK_STOCK_DIALOG_ERROR, NULL);
g_free(text);
}
GtkTreeIter next;
gint row;
- file_maint_renamed(fd->source_path, fd->dest_path);
-
store = gtk_tree_view_get_model(GTK_TREE_VIEW(rd->listview));
- row = file_util_rename_multiple_find_row(rd, rd->fd->source_path, &iter);
+ row = file_util_rename_multiple_find_row(rd, rd->fdlg->source_fd, &iter);
if (row >= 0 &&
(gtk_tree_model_iter_nth_child(store, &next, NULL, row + 1) ||
{
if (debug) printf("closed by #%d\n", row);
- file_dialog_close(rd->fd);
+ file_dialog_close(rd->fdlg);
}
}
}
{
gchar *dest;
gchar *base;
- gchar *path;
+ FileData *fd;
- gtk_tree_model_get(store, &iter, RENAME_COLUMN_PATH, &path, -1);
- base = remove_level_from_path(path);
+ gtk_tree_model_get(store, &iter, RENAME_COLUMN_FD, &fd, -1);
+ base = remove_level_from_path(fd->path);
if (rd->rename_type == RENAME_TYPE_FORMATTED)
{
gchar *new_name;
- new_name = file_util_rename_multiple_auto_format_name(format, filename_from_path(path), n);
+ new_name = file_util_rename_multiple_auto_format_name(format, fd->name, n);
dest = g_strconcat(base, "/", new_name, NULL);
g_free(new_name);
}
g_free(dest);
g_free(base);
- g_free(path);
+// file_data_unref(fd);
n++;
valid = gtk_tree_model_iter_next(store, &iter);
{
gchar *dest;
gchar *base;
- gchar *path;
+ FileData *fd;
- gtk_tree_model_get(store, &iter, RENAME_COLUMN_PATH, &path, -1);
- base = remove_level_from_path(path);
+ gtk_tree_model_get(store, &iter, RENAME_COLUMN_FD, &fd, -1);
+ base = remove_level_from_path(fd->path);
if (rd->rename_type == RENAME_TYPE_FORMATTED)
{
gchar *new_name;
- new_name = file_util_rename_multiple_auto_format_name(format, filename_from_path(path), n);
+ new_name = file_util_rename_multiple_auto_format_name(format, fd->name, n);
dest = g_strconcat(base, "/", new_name, NULL);
g_free(new_name);
}
{
dest = g_strdup_printf("%s/%s%0*d%s", base, front, padding, n, end);
}
-
- if (!rename_file_ext(path, dest))
+
+ file_data_change_info_new(fd->path, dest, fd);
+ if (!rename_file_ext(fd))
{
success = FALSE;
}
- else
- {
- file_maint_renamed(path, dest);
- }
g_free(dest);
g_free(base);
- g_free(path);
+// file_data_unref(fd);
if (success)
{
n--;
gtk_spin_button_set_value(GTK_SPIN_BUTTON(rd->auto_spin_start), (gdouble)n);
- buf = g_strdup_printf(_("Failed to rename\n%s\nThe number was %d."), filename_from_path(rd->fd->source_path), n);
+ buf = g_strdup_printf(_("Failed to rename\n%s\nThe number was %d."), rd->fdlg->source_fd->name, n);
file_util_warning_dialog(_("Auto rename"), buf, GTK_STOCK_DIALOG_ERROR, NULL);
g_free(buf);
return;
}
- file_dialog_close(rd->fd);
+ file_dialog_close(rd->fdlg);
}
-static void file_util_rename_multiple_cb(FileDialog *fd, gpointer data)
+static void file_util_rename_multiple_cb(FileDialog *fdlg, gpointer data)
{
RenameDataMult *rd = data;
gchar *base;
}
name = gtk_entry_get_text(GTK_ENTRY(rd->rename_entry));
- base = remove_level_from_path(fd->source_path);
+ base = remove_level_from_path(fdlg->source_fd->path);
- g_free(fd->dest_path);
- fd->dest_path = concat_dir_and_file(base, name);
+ g_free(fdlg->dest_path);
+ fdlg->dest_path = concat_dir_and_file(base, name);
g_free(base);
- if (strlen(name) == 0 || strcmp(fd->source_path, fd->dest_path) == 0)
+ if (strlen(name) == 0 || strcmp(fdlg->source_fd->path, fdlg->dest_path) == 0)
{
return;
}
- fd->type = FALSE;
+ fdlg->type = FALSE;
file_util_rename_multiple(rd);
}
-static void file_util_rename_multiple_close_cb(FileDialog *fd, gpointer data)
+static void file_util_rename_multiple_close_cb(FileDialog *fdlg, gpointer data)
{
RenameDataMult *rd = data;
- file_dialog_close(rd->fd);
+ file_dialog_close(rd->fdlg);
}
static gboolean file_util_rename_multiple_select_cb(GtkTreeSelection *selection, GtkTreeModel *store, GtkTreePath *tpath,
RenameDataMult *rd = data;
GtkTreeIter iter;
const gchar *name;
- gchar *path = NULL;
+ FileData *fd = NULL;
if (path_currently_selected ||
!gtk_tree_model_get_iter(store, &iter, tpath)) return TRUE;
- gtk_tree_model_get(store, &iter, RENAME_COLUMN_PATH, &path, -1);
+ gtk_tree_model_get(store, &iter, RENAME_COLUMN_FD, &fd, -1);
- g_free(rd->fd->source_path);
- rd->fd->source_path = path;
+ file_data_unref(rd->fdlg->source_fd);
+ rd->fdlg->source_fd = file_data_ref(fd);
- name = filename_from_path(rd->fd->source_path);
+ name = rd->fdlg->source_fd->name;
gtk_label_set_text(GTK_LABEL(rd->rename_label), name);
gtk_entry_set_text(GTK_ENTRY(rd->rename_entry), name);
- image_change_path(rd->imd, rd->fd->source_path, 0.0);
+ image_change_fd(rd->imd, rd->fdlg->source_fd, 0.0);
if (GTK_WIDGET_VISIBLE(rd->rename_box))
{
if (rd->rename_type == RENAME_TYPE_FORMATTED)
{
- gchar *path;
+ FileData *fd;
- gtk_tree_model_get(store, &iter, RENAME_COLUMN_PATH, &path, -1);
- dest = file_util_rename_multiple_auto_format_name(format, filename_from_path(path), n);
- g_free(path);
+ gtk_tree_model_get(store, &iter, RENAME_COLUMN_FD, &fd, -1);
+ dest = file_util_rename_multiple_auto_format_name(format, fd->name, n);
+// file_data_unref(fd);
}
else
{
rd = g_new0(RenameDataMult, 1);
- rd->fd = file_util_file_dlg(_("Rename - GQview"),
+ rd->fdlg = file_util_file_dlg(_("Rename - GQview"),
"GQview", "dlg_rename", parent,
file_util_rename_multiple_close_cb, rd);
- generic_dialog_add_message(GENERIC_DIALOG(rd->fd), NULL, _("Rename multiple files"), NULL);
- file_dialog_add_button(rd->fd, GTK_STOCK_OK, _("_Rename"), file_util_rename_multiple_cb, TRUE);
+ generic_dialog_add_message(GENERIC_DIALOG(rd->fdlg), NULL, _("Rename multiple files"), NULL);
+ file_dialog_add_button(rd->fdlg, GTK_STOCK_OK, _("_Rename"), file_util_rename_multiple_cb, TRUE);
- rd->fd->source_path = g_strdup(source_list->data);
- rd->fd->dest_path = NULL;
+ rd->fdlg->source_fd = file_data_ref(source_list->data);
+ rd->fdlg->dest_path = NULL;
rd->rename_type = RENAME_TYPE_MANUAL;
rd->update_idle_id = -1;
- vbox = GENERIC_DIALOG(rd->fd)->vbox;
+ vbox = GENERIC_DIALOG(rd->fdlg)->vbox;
pane = gtk_hpaned_new();
gtk_box_pack_start(GTK_BOX(vbox), pane, TRUE, TRUE, 0);
gtk_paned_pack1(GTK_PANED(pane), scrolled, TRUE, TRUE);
gtk_widget_show(scrolled);
- store = gtk_list_store_new(3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
+ store = gtk_list_store_new(4, G_TYPE_POINTER, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
rd->listview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
g_object_unref(store);
work = source_list;
while (work)
{
- gchar *path = work->data;
+ FileData *fd = work->data;
GtkTreeIter iter;
gtk_list_store_append(store, &iter);
- gtk_list_store_set(store, &iter, RENAME_COLUMN_PATH, path, RENAME_COLUMN_NAME, filename_from_path(path), -1);
+ gtk_list_store_set(store, &iter, RENAME_COLUMN_FD, fd, RENAME_COLUMN_PATH, fd->path, RENAME_COLUMN_NAME, fd->name, -1);
work = work->next;
}
- path_list_free(source_list);
+ filelist_free(source_list);
rd->imd = image_new(TRUE);
g_object_set(G_OBJECT(rd->imd->pr), "zoom_expand", FALSE, NULL);
table = pref_table_new(rd->rename_box, 2, 2, FALSE, FALSE);
pref_table_label(table, 0, 0, _("Original name:"), 1.0);
- rd->rename_label = pref_table_label(table, 1, 0, filename_from_path(rd->fd->source_path), 0.0);
+ rd->rename_label = pref_table_label(table, 1, 0, rd->fdlg->source_fd->name, 0.0);
pref_table_label(table, 0, 1, _("New name:"), 1.0);
rd->rename_entry = gtk_entry_new();
gtk_table_attach(GTK_TABLE(table), rd->rename_entry, 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 0, 0);
- generic_dialog_attach_default(GENERIC_DIALOG(rd->fd), rd->rename_entry);
+ generic_dialog_attach_default(GENERIC_DIALOG(rd->fdlg), rd->rename_entry);
gtk_widget_grab_focus(rd->rename_entry);
- name = filename_from_path(rd->fd->source_path);
+ name = rd->fdlg->source_fd->name;
gtk_entry_set_text(GTK_ENTRY(rd->rename_entry), name);
gtk_editable_select_region(GTK_EDITABLE(rd->rename_entry), 0, filename_base_length(name));
gtk_widget_show(rd->rename_entry);
0.0, 1000000.0, 1.0, 0, 1.0,
G_CALLBACK(file_util_rename_multiple_preview_adj_cb), rd);
- image_change_path(rd->imd, rd->fd->source_path, 0.0);
+ image_change_fd(rd->imd, rd->fdlg->source_fd, 0.0);
- g_signal_connect(G_OBJECT(GENERIC_DIALOG(rd->fd)->dialog), "destroy",
+ g_signal_connect(G_OBJECT(GENERIC_DIALOG(rd->fdlg)->dialog), "destroy",
G_CALLBACK(file_util_rename_multiple_destroy_cb), rd);
- gtk_widget_show(GENERIC_DIALOG(rd->fd)->dialog);
+ gtk_widget_show(GENERIC_DIALOG(rd->fdlg)->dialog);
}
/*
generic_dialog_add_button(gd, GTK_STOCK_OK, _("_Overwrite"), file_util_rename_single_ok_cb, TRUE);
generic_dialog_add_image(gd, NULL,
- fds->dest, _("Existing file"),
- fds->source, _("New file"), TRUE);
+ file_data_new_simple(fds->dest), _("Existing file"),
+ fds->source_fd, _("New file"), TRUE);
gtk_widget_show(gd->dialog);
}
else
{
- if (!rename_file_ext(fds->source, fds->dest))
+/*
+ GList *list = g_list_append(NULL, file_data_ref(fds->source_fd));
+ file_util_do_move_list(list, FALSE, TRUE);
+ filelist_free(list);
+*/
+ file_data_change_info_new(fds->source_fd->path, fds->dest, fds->source_fd);
+ if (!rename_file_ext(fds->source_fd))
{
- gchar *text = g_strdup_printf(_("Unable to rename file:\n%s\nto:\n%s"), filename_from_path(fds->source), filename_from_path(fds->dest));
+ gchar *text = g_strdup_printf(_("Unable to rename file:\n%s\nto:\n%s"), fds->source_fd->name, filename_from_path(fds->dest));
file_util_warning_dialog(_("Error renaming file"), text, GTK_STOCK_DIALOG_ERROR, NULL);
g_free(text);
}
- else
- {
- file_maint_renamed(fds->source, fds->dest);
- }
+
}
file_data_single_free(fds);
}
-static void file_util_rename_single_cb(FileDialog *fd, gpointer data)
+static void file_util_rename_single_cb(FileDialog *fdlg, gpointer data)
{
const gchar *name;
gchar *path;
- name = gtk_entry_get_text(GTK_ENTRY(fd->entry));
- path = concat_dir_and_file(fd->dest_path, name);
+ name = gtk_entry_get_text(GTK_ENTRY(fdlg->entry));
+ path = concat_dir_and_file(fdlg->dest_path, name);
- if (strlen(name) == 0 || strcmp(fd->source_path, path) == 0)
+ if (strlen(name) == 0 || strcmp(fdlg->source_fd->path, path) == 0)
{
g_free(path);
return;
}
- file_util_rename_single(file_data_single_new(fd->source_path, path, fd->type));
+ file_util_rename_single(file_data_single_new(fdlg->source_fd, path, fdlg->type));
g_free(path);
- file_dialog_close(fd);
+ file_dialog_close(fdlg);
}
-static void file_util_rename_single_close_cb(FileDialog *fd, gpointer data)
+static void file_util_rename_single_close_cb(FileDialog *fdlg, gpointer data)
{
- file_dialog_close(fd);
+ file_dialog_close(fdlg);
}
-static void file_util_rename_single_do(const gchar *source_path, GtkWidget *parent)
+static void file_util_rename_single_do(FileData *source_fd, GtkWidget *parent)
{
- FileDialog *fd;
+ FileDialog *fdlg;
GtkWidget *table;
const gchar *name;
- fd = file_util_file_dlg(_("Rename - GQview"), "GQview", "dlg_rename", parent,
+ fdlg = file_util_file_dlg(_("Rename - GQview"), "GQview", "dlg_rename", parent,
file_util_rename_single_close_cb, NULL);
- generic_dialog_add_message(GENERIC_DIALOG(fd), NULL, _("Rename file"), NULL);
- generic_dialog_add_image(GENERIC_DIALOG(fd), NULL, source_path, NULL, NULL, NULL, FALSE);
+ generic_dialog_add_message(GENERIC_DIALOG(fdlg), NULL, _("Rename file"), NULL);
+ generic_dialog_add_image(GENERIC_DIALOG(fdlg), NULL, source_fd, NULL, NULL, NULL, FALSE);
- file_dialog_add_button(fd, GTK_STOCK_OK, _("_Rename"), file_util_rename_single_cb, TRUE);
+ file_dialog_add_button(fdlg, GTK_STOCK_OK, _("_Rename"), file_util_rename_single_cb, TRUE);
- fd->source_path = g_strdup(source_path);
- fd->dest_path = remove_level_from_path(source_path);
+ fdlg->source_fd = file_data_ref(source_fd);
+ fdlg->dest_path = remove_level_from_path(source_fd->path);
- table = pref_table_new(GENERIC_DIALOG(fd)->vbox, 2, 2, FALSE, FALSE);
+ table = pref_table_new(GENERIC_DIALOG(fdlg)->vbox, 2, 2, FALSE, FALSE);
pref_table_label(table, 0, 0, _("Original name:"), 1.0);
- pref_table_label(table, 1, 0, filename_from_path(fd->source_path), 0.0);
+ pref_table_label(table, 1, 0, fdlg->source_fd->name, 0.0);
pref_table_label(table, 0, 1, _("New name:"), 1.0);
- fd->entry = gtk_entry_new();
- gtk_table_attach(GTK_TABLE(table), fd->entry, 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 0, 0);
- generic_dialog_attach_default(GENERIC_DIALOG(fd), fd->entry);
- gtk_widget_grab_focus(fd->entry);
+ fdlg->entry = gtk_entry_new();
+ gtk_table_attach(GTK_TABLE(table), fdlg->entry, 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ generic_dialog_attach_default(GENERIC_DIALOG(fdlg), fdlg->entry);
+ gtk_widget_grab_focus(fdlg->entry);
- name = filename_from_path(fd->source_path);
- gtk_entry_set_text(GTK_ENTRY(fd->entry), name);
- gtk_editable_select_region(GTK_EDITABLE(fd->entry), 0, filename_base_length(name));
- gtk_widget_show(fd->entry);
+ name = fdlg->source_fd->name;
+ gtk_entry_set_text(GTK_ENTRY(fdlg->entry), name);
+ gtk_editable_select_region(GTK_EDITABLE(fdlg->entry), 0, filename_base_length(name));
+ gtk_widget_show(fdlg->entry);
- gtk_widget_show(GENERIC_DIALOG(fd)->dialog);
+ gtk_widget_show(GENERIC_DIALOG(fdlg)->dialog);
}
-void file_util_rename(const gchar *source_path, GList *source_list, GtkWidget *parent)
+void file_util_rename(FileData *source_fd, GList *source_list, GtkWidget *parent)
{
- if (!source_path && !source_list) return;
+ if (!source_fd && !source_list) return;
- if (source_path)
+ if (source_fd)
{
- file_util_rename_single_do(source_path, parent);
+ file_util_rename_single_do(source_fd, parent);
}
else if (!source_list->next)
{
file_util_rename_single_do(source_list->data, parent);
- path_list_free(source_list);
+ filelist_free(source_list);
}
else
{
g_free(path);
}
-static void file_util_create_dir_cb(FileDialog *fd, gpointer data)
+static void file_util_create_dir_cb(FileDialog *fdlg, gpointer data)
{
const gchar *name;
- name = gtk_entry_get_text(GTK_ENTRY(fd->entry));
+ name = gtk_entry_get_text(GTK_ENTRY(fdlg->entry));
if (strlen(name) == 0) return;
}
else
{
- file_util_create_dir_do(fd->dest_path, name);
+ file_util_create_dir_do(fdlg->dest_path, name);
}
- file_dialog_close(fd);
+ file_dialog_close(fdlg);
}
-static void file_util_create_dir_close_cb(FileDialog *fd, gpointer data)
+static void file_util_create_dir_close_cb(FileDialog *fdlg, gpointer data)
{
- file_dialog_close(fd);
+ file_dialog_close(fdlg);
}
void file_util_create_dir(const gchar *path, GtkWidget *parent)
{
- FileDialog *fd;
+ FileDialog *fdlg;
gchar *text;
if (!isdir(path)) return;
- fd = file_util_file_dlg(_("New folder - GQview"), "GQview", "dlg_newdir", parent,
+ fdlg = file_util_file_dlg(_("New folder - GQview"), "GQview", "dlg_newdir", parent,
file_util_create_dir_close_cb, NULL);
text = g_strdup_printf(_("Create folder in:\n%s\nnamed:"), path);
- generic_dialog_add_message(GENERIC_DIALOG(fd), NULL, NULL, text);
+ generic_dialog_add_message(GENERIC_DIALOG(fdlg), NULL, NULL, text);
g_free(text);
- file_dialog_add_button(fd, GTK_STOCK_OK, NULL, file_util_create_dir_cb, TRUE);
+ file_dialog_add_button(fdlg, GTK_STOCK_OK, NULL, file_util_create_dir_cb, TRUE);
- fd->dest_path = g_strdup(path);
+ fdlg->dest_path = g_strdup(path);
- fd->entry = gtk_entry_new();
- gtk_box_pack_start(GTK_BOX(GENERIC_DIALOG(fd)->vbox), fd->entry, FALSE, FALSE, 0);
- generic_dialog_attach_default(GENERIC_DIALOG(fd), fd->entry);
- gtk_widget_grab_focus(fd->entry);
- gtk_widget_show(fd->entry);
+ fdlg->entry = gtk_entry_new();
+ gtk_box_pack_start(GTK_BOX(GENERIC_DIALOG(fdlg)->vbox), fdlg->entry, FALSE, FALSE, 0);
+ generic_dialog_attach_default(GENERIC_DIALOG(fdlg), fdlg->entry);
+ gtk_widget_grab_focus(fdlg->entry);
+ gtk_widget_show(fdlg->entry);
- gtk_widget_show(GENERIC_DIALOG(fd)->dialog);
+ gtk_widget_show(GENERIC_DIALOG(fdlg)->dialog);
}
-gint file_util_rename_dir(const gchar *old_path, const gchar *new_path, GtkWidget *parent)
+gint file_util_rename_dir(FileData *old_fd, const gchar *new_path, GtkWidget *parent)
{
const gchar *old_name;
const gchar *new_name;
- if (!old_path || !new_path || !isdir(old_path)) return FALSE;
+ if (!old_fd || !new_path || !isdir(old_fd->path)) return FALSE;
- old_name = filename_from_path(old_path);
+ old_name = old_fd->name;
new_name = filename_from_path(new_path);
if (isdir(new_path))
return FALSE;
}
-
- if (!rename_file_ext(old_path, new_path))
+ file_data_change_info_new(old_fd->path, new_path, old_fd);
+ if (!rename_file_ext(old_fd))
{
gchar *text = g_strdup_printf(_("Failed to rename %s to %s."), old_name, new_name);
file_util_warning_dialog(_("Rename failed"), text, GTK_STOCK_DIALOG_ERROR, parent);
typedef struct _UtilityData UtilityData;
struct _UtilityData {
UtilityType type;
- gchar *source_path;
+ FileData *source_fd;
GList *dlist;
GList *flist;
GenericDialog *gd;
};
+enum {
+ UTILITY_COLUMN_FD = 0,
+ UTILITY_COLUMN_PATH,
+ UTILITY_COLUMN_NAME,
+ UTILITY_COLUMN_COUNT
+};
+
+
#define UTILITY_LIST_MIN_WIDTH 250
#define UTILITY_LIST_MIN_HEIGHT 150
{
if (!ud) return;
- g_free(ud->source_path);
- path_list_free(ud->dlist);
- path_list_free(ud->flist);
+ file_data_unref(ud->source_fd);
+ filelist_free(ud->dlist);
+ filelist_free(ud->flist);
if (ud->gd) generic_dialog_close(ud->gd);
gtk_box_pack_start(GTK_BOX(box), scrolled, TRUE, TRUE, 0);
gtk_widget_show(scrolled);
- store = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_STRING);
+ store = gtk_list_store_new(UTILITY_COLUMN_COUNT, G_TYPE_POINTER, G_TYPE_STRING, G_TYPE_STRING);
view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
g_object_unref(store);
if (full_paths)
{
- file_util_dialog_add_list_column(view, _("Location"), 0);
+ file_util_dialog_add_list_column(view, _("Location"), UTILITY_COLUMN_PATH);
}
else
{
- file_util_dialog_add_list_column(view, _("Name"), 1);
+ file_util_dialog_add_list_column(view, _("Name"), UTILITY_COLUMN_NAME);
}
gtk_widget_set_size_request(view, UTILITY_LIST_MIN_WIDTH, UTILITY_LIST_MIN_HEIGHT);
while (list)
{
- gchar *path = list->data;
+ FileData *fd = list->data;
GtkTreeIter iter;
gtk_list_store_append(store, &iter);
- gtk_list_store_set(store, &iter, 0, path,
- 1, filename_from_path(path), -1);
+ gtk_list_store_set(store, &iter, UTILITY_COLUMN_FD, fd,
+ UTILITY_COLUMN_PATH, fd->path,
+ UTILITY_COLUMN_NAME, fd->name, -1);
list = list->next;
}
{
UtilityData *ud = data;
GtkTreeIter iter;
- gchar *path = NULL;
+ FileData *fd = NULL;
if (path_currently_selected ||
!gtk_tree_model_get_iter(store, &iter, tpath)) return TRUE;
- gtk_tree_model_get(store, &iter, 0, &path, -1);
- generic_dialog_image_set(ud->gd, path);
- g_free(path);
+ gtk_tree_model_get(store, &iter, UTILITY_COLUMN_FD, &fd, -1);
+ generic_dialog_image_set(ud->gd, fd);
+// file_data_unref(fd);
return TRUE;
}
file_util_data_free(ud);
}
-static gchar *file_util_delete_dir_empty_path(const gchar *path, gint real_content, gint level)
+FileData *file_util_delete_dir_empty_path(FileData *fd, gint real_content, gint level)
{
GList *dlist = NULL;
GList *flist = NULL;
GList *work;
- gchar *fail = NULL;
+ FileData *fail = NULL;
- if (debug) printf("deltree into: %s\n", path);
+ if (debug) printf("deltree into: %s\n", fd->path);
level++;
if (level > UTILITY_DELETE_MAX_DEPTH)
{
printf("folder recursion depth past %d, giving up\n", UTILITY_DELETE_MAX_DEPTH);
- return g_strdup(path);
+ return file_data_ref(fd);
}
- if (!path_list_lstat(path, &flist, &dlist)) return g_strdup(path);
+ if (!filelist_read_lstat(fd->path, &flist, &dlist)) file_data_ref(fd);
work = dlist;
while (work && !fail)
{
- gchar *name;
+ FileData *lfd;
- name = work->data;
+ lfd = work->data;
work = work->next;
- fail = file_util_delete_dir_empty_path(name, real_content, level);
+ fail = file_util_delete_dir_empty_path(lfd, real_content, level);
}
work = flist;
while (work && !fail)
{
- gchar *name;
+ FileData *lfd;
- name = work->data;
+ lfd = work->data;
work = work->next;
- if (debug) printf("deltree child: %s\n", name);
+ if (debug) printf("deltree child: %s\n", lfd->path);
- if (real_content && !islink(name))
+ if (real_content && !islink(lfd->path))
{
- if (!file_util_unlink(name)) fail = g_strdup(name);
+ if (!file_util_unlink(lfd)) fail = file_data_ref(lfd);
}
else
{
- if (!unlink_file(name)) fail = g_strdup(name);
+ if (!unlink_file(lfd->path)) fail = file_data_ref(lfd);
}
}
- path_list_free(dlist);
- path_list_free(flist);
+ filelist_free(dlist);
+ filelist_free(flist);
- if (!fail && !rmdir_utf8(path))
+ if (!fail && !rmdir_utf8(fd->path))
{
- fail = g_strdup(path);
+ fail = file_data_ref(fd);
}
- if (debug) printf("deltree done: %s\n", path);
+ if (debug) printf("deltree done: %s\n", fd->path);
return fail;
}
if (ud->type == UTILITY_TYPE_DELETE_LINK)
{
- if (!unlink_file(ud->source_path))
+ if (!unlink_file(ud->source_fd->path))
{
gchar *text;
- text = g_strdup_printf("Unable to remove symbolic link:\n %s", ud->source_path);
+ text = g_strdup_printf("Unable to remove symbolic link:\n %s", ud->source_fd->path);
file_util_warning_dialog(_("Delete failed"), text,
GTK_STOCK_DIALOG_ERROR, NULL);
g_free(text);
}
else
{
- gchar *fail = NULL;
+ FileData *fail = NULL;
GList *work;
work = ud->dlist;
while (work && !fail)
{
- gchar *path;
+ FileData *fd;
- path = work->data;
+ fd = work->data;
work = work->next;
- fail = file_util_delete_dir_empty_path(path, FALSE, 0);
+ fail = file_util_delete_dir_empty_path(fd, FALSE, 0);
}
work = ud->flist;
while (work && !fail)
{
- gchar *path;
+ FileData *fd;
- path = work->data;
+ fd = work->data;
work = work->next;
- if (debug) printf("deltree unlink: %s\n", path);
+ if (debug) printf("deltree unlink: %s\n", fd->path);
- if (islink(path))
+ if (islink(fd->path))
{
- if (!unlink_file(path)) fail = g_strdup(path);
+ if (!unlink_file(fd->path)) fail = file_data_ref(fd);
}
else
{
- if (!file_util_unlink(path)) fail = g_strdup(path);
+ if (!file_util_unlink(fd)) fail = file_data_ref(fd);
}
}
if (!fail)
{
- if (!rmdir_utf8(ud->source_path)) fail = g_strdup(ud->source_path);
+ if (!rmdir_utf8(ud->source_fd->path)) fail = file_data_ref(ud->source_fd);
}
if (fail)
{
gchar *text;
- text = g_strdup_printf(_("Unable to delete folder:\n\n%s"), ud->source_path);
+ text = g_strdup_printf(_("Unable to delete folder:\n\n%s"), ud->source_fd->path);
gd = file_util_warning_dialog(_("Delete failed"), text, GTK_STOCK_DIALOG_ERROR, NULL);
g_free(text);
- if (strcmp(fail, ud->source_path) != 0)
+ if (fail != ud->source_fd)
{
pref_spacer(gd->vbox, PREF_PAD_GROUP);
text = g_strdup_printf(_("Removal of folder contents failed at this file:\n\n%s"),
- fail);
+ fail->path);
pref_label_new(gd->vbox, text);
g_free(text);
}
- g_free(fail);
+ file_data_unref(fail);
}
}
while (dlist)
{
- gchar *path;
- const gchar *name;
+ FileData *fd;
- path = dlist->data;
+ fd = dlist->data;
dlist = dlist->next;
- name = filename_from_path(path);
- if (!name ||
- (strcmp(name, THUMB_FOLDER_GLOBAL) != 0 &&
- strcmp(name, THUMB_FOLDER_LOCAL) != 0 &&
- strcmp(name, GQVIEW_CACHE_LOCAL_METADATA) != 0) )
+ if (!fd->name ||
+ (strcmp(fd->name, THUMB_FOLDER_GLOBAL) != 0 &&
+ strcmp(fd->name, THUMB_FOLDER_LOCAL) != 0 &&
+ strcmp(fd->name, GQVIEW_CACHE_LOCAL_METADATA) != 0) )
{
- rlist = g_list_prepend(rlist, path);
+ rlist = g_list_prepend(rlist, fd);
}
}
return g_list_reverse(rlist);
}
-void file_util_delete_dir(const gchar *path, GtkWidget *parent)
+void file_util_delete_dir(FileData *fd, GtkWidget *parent)
{
GList *dlist = NULL;
GList *flist = NULL;
GList *rlist;
- if (!isdir(path)) return;
+ if (!isdir(fd->path)) return;
- if (islink(path))
+ if (islink(fd->path))
{
UtilityData *ud;
gchar *text;
ud = g_new0(UtilityData, 1);
ud->type = UTILITY_TYPE_DELETE_LINK;
- ud->source_path = g_strdup(path);
+ ud->source_fd = file_data_ref(fd);
ud->dlist = NULL;
ud->flist = NULL;
text = g_strdup_printf(_("This will delete the symbolic link:\n\n%s\n\n"
"The folder this link points to will not be deleted."),
- path);
+ fd->path);
generic_dialog_add_message(ud->gd, GTK_STOCK_DIALOG_QUESTION,
_("Delete symbolic link to folder?"),
text);
return;
}
- if (!access_file(path, W_OK | X_OK))
+ if (!access_file(fd->path, W_OK | X_OK))
{
gchar *text;
text = g_strdup_printf(_("Unable to remove folder %s\n"
- "Permissions do not allow writing to the folder."), path);
+ "Permissions do not allow writing to the folder."), fd->path);
file_util_warning_dialog(_("Delete failed"), text, GTK_STOCK_DIALOG_ERROR, parent);
g_free(text);
return;
}
- if (!path_list_lstat(path, &flist, &dlist))
+ if (!filelist_read_lstat(fd->path, &flist, &dlist))
{
gchar *text;
- text = g_strdup_printf(_("Unable to list contents of folder %s"), path);
+ text = g_strdup_printf(_("Unable to list contents of folder %s"), fd->path);
file_util_warning_dialog(_("Delete failed"), text, GTK_STOCK_DIALOG_ERROR, parent);
g_free(text);
text = g_strdup_printf(_("Unable to delete the folder:\n\n%s\n\n"
"This folder contains subfolders which must be moved before it can be deleted."),
- path);
+ fd->path);
box = generic_dialog_add_message(gd, GTK_STOCK_DIALOG_WARNING,
_("Folder contains subfolders"),
text);
box = pref_group_new(box, TRUE, _("Subfolders:"), GTK_ORIENTATION_VERTICAL);
- rlist = path_list_sort(rlist);
+ rlist = filelist_sort_path(rlist);
file_util_dialog_add_list(box, rlist, FALSE);
gtk_widget_show(gd->dialog);
ud = g_new0(UtilityData, 1);
ud->type = UTILITY_TYPE_DELETE_FOLDER;
- ud->source_path = g_strdup(path);
+ ud->source_fd = file_data_ref(fd);
ud->dlist = dlist;
dlist = NULL;
- ud->flist = path_list_sort(flist);
+ ud->flist = filelist_sort_path(flist);
flist = NULL;
ud->gd = file_util_gen_dlg(_("Delete folder"), "GQview", "dlg_confirm",
text = g_strdup_printf(_("This will delete the folder:\n\n%s\n\n"
"The contents of this folder will also be deleted."),
- path);
+ fd->path);
box = generic_dialog_add_message(ud->gd, GTK_STOCK_DIALOG_QUESTION,
_("Delete folder?"),
text);
}
g_list_free(rlist);
- path_list_free(dlist);
- path_list_free(flist);
+ filelist_free(dlist);
+ filelist_free(flist);
}