summaryrefslogtreecommitdiff
path: root/libcaja-private/caja-undostack-manager.c
diff options
context:
space:
mode:
Diffstat (limited to 'libcaja-private/caja-undostack-manager.c')
-rw-r--r--libcaja-private/caja-undostack-manager.c104
1 files changed, 87 insertions, 17 deletions
diff --git a/libcaja-private/caja-undostack-manager.c b/libcaja-private/caja-undostack-manager.c
index 8ce41a21..e875803f 100644
--- a/libcaja-private/caja-undostack-manager.c
+++ b/libcaja-private/caja-undostack-manager.c
@@ -397,10 +397,6 @@ void
caja_undostack_manager_redo (CajaUndoStackManager * manager,
GtkWidget * parent_view, CajaUndostackFinishCallback cb)
{
- GList *uris;
- CajaFile *file;
- char *new_name;
- char *puri;
CajaUndoStackManagerPrivate *priv = manager->priv;
g_mutex_lock (&priv->mutex);
@@ -421,12 +417,20 @@ caja_undostack_manager_redo (CajaUndoStackManager * manager,
priv->undo_redo_flag = TRUE;
switch (action->type) {
case CAJA_UNDOSTACK_COPY:
+ {
+ GList *uris;
+
uris = construct_gfile_list (action->sources, action->src_dir);
caja_file_operations_copy (uris, NULL,
action->dest_dir, NULL, undo_redo_done_transfer_callback, action);
g_list_free_full (uris, g_object_unref);
break;
+ }
case CAJA_UNDOSTACK_CREATEFILEFROMTEMPLATE:
+ {
+ char *new_name;
+ char *puri;
+
puri = get_uri_parent (action->target_uri);
new_name = get_uri_basename (action->target_uri);
caja_file_operations_new_file_from_template (NULL,
@@ -436,20 +440,33 @@ caja_undostack_manager_redo (CajaUndoStackManager * manager,
g_free (puri);
g_free (new_name);
break;
+ }
case CAJA_UNDOSTACK_DUPLICATE:
+ {
+ GList *uris;
+
uris = construct_gfile_list (action->sources, action->src_dir);
caja_file_operations_duplicate (uris, NULL, NULL,
undo_redo_done_transfer_callback, action);
g_list_free_full (uris, g_object_unref);
break;
+ }
case CAJA_UNDOSTACK_RESTOREFROMTRASH:
case CAJA_UNDOSTACK_MOVE:
+ {
+ GList *uris;
+
uris = construct_gfile_list (action->sources, action->src_dir);
caja_file_operations_move (uris, NULL,
action->dest_dir, NULL, undo_redo_done_transfer_callback, action);
g_list_free_full (uris, g_object_unref);
break;
+ }
case CAJA_UNDOSTACK_RENAME:
+ {
+ CajaFile *file;
+ char *new_name;
+
new_name = get_uri_basename (action->new_uri);
file = caja_file_get_by_uri (action->old_uri);
caja_file_rename (file, new_name,
@@ -457,7 +474,12 @@ caja_undostack_manager_redo (CajaUndoStackManager * manager,
g_object_unref (file);
g_free (new_name);
break;
+ }
case CAJA_UNDOSTACK_CREATEEMPTYFILE:
+ {
+ char *new_name;
+ char *puri;
+
puri = get_uri_parent (action->target_uri);
new_name = get_uri_basename (action->target_uri);
caja_file_operations_new_file (NULL, NULL, puri,
@@ -467,14 +489,21 @@ caja_undostack_manager_redo (CajaUndoStackManager * manager,
g_free (puri);
g_free (new_name);
break;
+ }
case CAJA_UNDOSTACK_CREATEFOLDER:
+ {
+ char *puri;
+
puri = get_uri_parent (action->target_uri);
caja_file_operations_new_folder (NULL, NULL, puri,
undo_redo_done_create_callback, action);
g_free (puri);
break;
+ }
case CAJA_UNDOSTACK_MOVETOTRASH:
if (g_hash_table_size (action->trashed) > 0) {
+ GList *uris;
+
GList *uri_to_trash = g_hash_table_get_keys (action->trashed);
uris = uri_list_to_gfile_list (uri_to_trash);
priv->undo_redo_flag = TRUE;
@@ -485,18 +514,29 @@ caja_undostack_manager_redo (CajaUndoStackManager * manager,
}
break;
case CAJA_UNDOSTACK_CREATELINK:
+ {
+ GList *uris;
+
uris = construct_gfile_list (action->sources, action->src_dir);
caja_file_operations_link (uris, NULL,
action->dest_dir, NULL, undo_redo_done_transfer_callback, action);
g_list_free_full (uris, g_object_unref);
break;
+ }
case CAJA_UNDOSTACK_SETPERMISSIONS:
+ {
+ CajaFile *file;
+
file = caja_file_get_by_uri (action->target_uri);
caja_file_set_permissions (file,
action->new_permissions, undo_redo_done_rename_callback, action);
g_object_unref (file);
break;
+ }
case CAJA_UNDOSTACK_RECURSIVESETPERMISSIONS:
+ {
+ char *puri;
+
puri = g_file_get_uri (action->dest_dir);
caja_file_set_permissions_recursive (puri,
action->file_permissions,
@@ -505,20 +545,29 @@ caja_undostack_manager_redo (CajaUndoStackManager * manager,
action->dir_mask, undo_redo_op_callback, action);
g_free (puri);
break;
+ }
case CAJA_UNDOSTACK_CHANGEGROUP:
+ {
+ CajaFile *file;
+
file = caja_file_get_by_uri (action->target_uri);
caja_file_set_group (file,
action->new_group_name_or_id,
undo_redo_done_rename_callback, action);
g_object_unref (file);
break;
+ }
case CAJA_UNDOSTACK_CHANGEOWNER:
+ {
+ CajaFile *file;
+
file = caja_file_get_by_uri (action->target_uri);
caja_file_set_owner (file,
action->new_user_name_or_id,
undo_redo_done_rename_callback, action);
g_object_unref (file);
break;
+ }
case CAJA_UNDOSTACK_DELETE:
default:
priv->undo_redo_flag = FALSE;
@@ -536,11 +585,8 @@ void
caja_undostack_manager_undo (CajaUndoStackManager * manager,
GtkWidget * parent_view, CajaUndostackFinishCallback cb)
{
- GList *uris = NULL;
- GHashTable *files_to_restore;
- CajaFile *file;
- char *new_name;
CajaUndoStackManagerPrivate *priv = manager->priv;
+ GList *uris = NULL;
g_mutex_lock (&priv->mutex);
@@ -595,15 +641,19 @@ caja_undostack_manager_undo (CajaUndoStackManager * manager,
g_list_free_full (uris, g_object_unref);
break;
case CAJA_UNDOSTACK_MOVETOTRASH:
+ {
+ GHashTable *files_to_restore;
+
files_to_restore = retrieve_files_to_restore (action->trashed);
if (g_hash_table_size (files_to_restore) > 0) {
GList *l;
GList *gfiles_in_trash = g_hash_table_get_keys (files_to_restore);
- GFile *item;
- GFile *dest;
- char *value;
+ GFile *item = NULL;
+ GFile *dest = NULL;
for (l = gfiles_in_trash; l != NULL; l = l->next) {
+ char *value;
+
item = l->data;
value = g_hash_table_lookup (files_to_restore, item);
dest = g_file_new_for_uri (value);
@@ -618,6 +668,7 @@ caja_undostack_manager_undo (CajaUndoStackManager * manager,
/* Here we must do what's necessary for the callback */
undo_redo_done_transfer_callback (NULL, action);
break;
+ }
case CAJA_UNDOSTACK_MOVE:
uris = construct_gfile_list (action->destinations, action->dest_dir);
caja_file_operations_move (uris, NULL,
@@ -625,6 +676,10 @@ caja_undostack_manager_undo (CajaUndoStackManager * manager,
g_list_free_full (uris, g_object_unref);
break;
case CAJA_UNDOSTACK_RENAME:
+ {
+ CajaFile *file;
+ char *new_name;
+
new_name = get_uri_basename (action->old_uri);
file = caja_file_get_by_uri (action->new_uri);
caja_file_rename (file, new_name,
@@ -632,23 +687,30 @@ caja_undostack_manager_undo (CajaUndoStackManager * manager,
g_object_unref (file);
g_free (new_name);
break;
+ }
case CAJA_UNDOSTACK_SETPERMISSIONS:
+ {
+ CajaFile *file;
+
file = caja_file_get_by_uri (action->target_uri);
caja_file_set_permissions (file,
action->current_permissions,
undo_redo_done_rename_callback, action);
g_object_unref (file);
break;
+ }
case CAJA_UNDOSTACK_RECURSIVESETPERMISSIONS:
if (g_hash_table_size (action->original_permissions) > 0) {
GList *gfiles_list =
g_hash_table_get_keys (action->original_permissions);
- guint32 *perm;
+
GList *l;
- GFile *dest;
- char *item;
+ GFile *dest = NULL;
for (l = gfiles_list; l != NULL; l = l->next) {
+ guint32 *perm;
+ char *item;
+
item = l->data;
perm = g_hash_table_lookup (action->original_permissions, item);
dest = g_file_new_for_uri (item);
@@ -664,19 +726,27 @@ caja_undostack_manager_undo (CajaUndoStackManager * manager,
}
break;
case CAJA_UNDOSTACK_CHANGEGROUP:
+ {
+ CajaFile *file;
+
file = caja_file_get_by_uri (action->target_uri);
caja_file_set_group (file,
action->original_group_name_or_id,
undo_redo_done_rename_callback, action);
g_object_unref (file);
break;
+ }
case CAJA_UNDOSTACK_CHANGEOWNER:
+ {
+ CajaFile *file;
+
file = caja_file_get_by_uri (action->target_uri);
caja_file_set_owner (file,
action->original_user_name_or_id,
undo_redo_done_rename_callback, action);
g_object_unref (file);
break;
+ }
case CAJA_UNDOSTACK_DELETE:
default:
priv->undo_redo_flag = FALSE;
@@ -1077,8 +1147,8 @@ stack_scroll_left (CajaUndoStackManagerPrivate * priv)
static void
stack_clear_n_oldest (GQueue * stack, guint n)
{
- CajaUndoStackActionData *action;
guint i;
+ CajaUndoStackActionData *action = NULL;
for (i = 0; i < n; i++) {
if ((action = (CajaUndoStackActionData *) g_queue_pop_tail (stack)) == NULL)
@@ -1881,7 +1951,7 @@ construct_gfile_list (const GList * urilist, GFile * parent)
{
const GList *l;
GList *file_list = NULL;
- GFile *file;
+ GFile *file = NULL;
for (l = urilist; l != NULL; l = l->next) {
file = g_file_get_child (parent, l->data);
@@ -1910,7 +1980,7 @@ uri_list_to_gfile_list (GList * urilist)
{
const GList *l;
GList *file_list = NULL;
- GFile *file;
+ GFile *file = NULL;
for (l = urilist; l != NULL; l = l->next) {
file = g_file_new_for_uri (l->data);