1 2 /* nautilus-file-undo-operations.h - Manages undo/redo of file operations 3 * 4 * Copyright (C) 2007-2011 Amos Brocco 5 * Copyright (C) 2010 Red Hat, Inc. 6 * 7 * This library is free software; you can redistribute it and/or 8 * modify it under the terms of the GNU General Public 9 * License as published by the Free Software Foundation; either 10 * version 2 of the License, or (at your option) any later version. 11 * 12 * This library is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 * General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public 18 * License along with this library; if not, see <http://www.gnu.org/licenses/>. 19 * 20 * Authors: Amos Brocco <amos.brocco@gmail.com> 21 * Cosimo Cecchi <cosimoc@redhat.com> 22 * 23 */ 24 25 #pragma once 26 27 #include <gio/gio.h> 28 #include <gtk/gtk.h> 29 #include <gnome-autoar/gnome-autoar.h> 30 31 #include "nautilus-file-operations-dbus-data.h" 32 33 typedef enum 34 { 35 NAUTILUS_FILE_UNDO_OP_INVALID, 36 NAUTILUS_FILE_UNDO_OP_COPY, 37 NAUTILUS_FILE_UNDO_OP_DUPLICATE, 38 NAUTILUS_FILE_UNDO_OP_MOVE, 39 NAUTILUS_FILE_UNDO_OP_RENAME, 40 NAUTILUS_FILE_UNDO_OP_BATCH_RENAME, 41 NAUTILUS_FILE_UNDO_OP_STARRED, 42 NAUTILUS_FILE_UNDO_OP_CREATE_EMPTY_FILE, 43 NAUTILUS_FILE_UNDO_OP_CREATE_FILE_FROM_TEMPLATE, 44 NAUTILUS_FILE_UNDO_OP_CREATE_FOLDER, 45 NAUTILUS_FILE_UNDO_OP_EXTRACT, 46 NAUTILUS_FILE_UNDO_OP_COMPRESS, 47 NAUTILUS_FILE_UNDO_OP_MOVE_TO_TRASH, 48 NAUTILUS_FILE_UNDO_OP_RESTORE_FROM_TRASH, 49 NAUTILUS_FILE_UNDO_OP_CREATE_LINK, 50 NAUTILUS_FILE_UNDO_OP_RECURSIVE_SET_PERMISSIONS, 51 NAUTILUS_FILE_UNDO_OP_SET_PERMISSIONS, 52 NAUTILUS_FILE_UNDO_OP_CHANGE_GROUP, 53 NAUTILUS_FILE_UNDO_OP_CHANGE_OWNER, 54 NAUTILUS_FILE_UNDO_OP_NUM_TYPES, 55 } NautilusFileUndoOp; 56 57 #define NAUTILUS_TYPE_FILE_UNDO_INFO nautilus_file_undo_info_get_type () 58 G_DECLARE_DERIVABLE_TYPE (NautilusFileUndoInfo, nautilus_file_undo_info, 59 NAUTILUS, FILE_UNDO_INFO, 60 GObject) 61 62 struct _NautilusFileUndoInfoClass 63 { 64 GObjectClass parent_class; 65 66 void (* undo_func) (NautilusFileUndoInfo *self, 67 GtkWindow *parent_window, 68 NautilusFileOperationsDBusData *dbus_data); 69 void (* redo_func) (NautilusFileUndoInfo *self, 70 GtkWindow *parent_window, 71 NautilusFileOperationsDBusData *dbus_data); 72 73 void (* strings_func) (NautilusFileUndoInfo *self, 74 gchar **undo_label, 75 gchar **undo_description, 76 gchar **redo_label, 77 gchar **redo_description); 78 }; 79 80 void nautilus_file_undo_info_apply_async (NautilusFileUndoInfo *self, 81 gboolean undo, 82 GtkWindow *parent_window, 83 NautilusFileOperationsDBusData *dbus_data, 84 GAsyncReadyCallback callback, 85 gpointer user_data); 86 gboolean nautilus_file_undo_info_apply_finish (NautilusFileUndoInfo *self, 87 GAsyncResult *res, 88 gboolean *user_cancel, 89 GError **error); 90 91 void nautilus_file_undo_info_get_strings (NautilusFileUndoInfo *self, 92 gchar **undo_label, 93 gchar **undo_description, 94 gchar **redo_label, 95 gchar **redo_description); 96 97 NautilusFileUndoOp nautilus_file_undo_info_get_op_type (NautilusFileUndoInfo *self); 98 99 /* copy/move/duplicate/link/restore from trash */ 100 #define NAUTILUS_TYPE_FILE_UNDO_INFO_EXT nautilus_file_undo_info_ext_get_type () 101 G_DECLARE_FINAL_TYPE (NautilusFileUndoInfoExt, nautilus_file_undo_info_ext, 102 NAUTILUS, FILE_UNDO_INFO_EXT, 103 NautilusFileUndoInfo) 104 105 NautilusFileUndoInfo *nautilus_file_undo_info_ext_new (NautilusFileUndoOp op_type, 106 gint item_count, 107 GFile *src_dir, 108 GFile *target_dir); 109 void nautilus_file_undo_info_ext_add_origin_target_pair (NautilusFileUndoInfoExt *self, 110 GFile *origin, 111 GFile *target); 112 113 /* create new file/folder */ 114 #define NAUTILUS_TYPE_FILE_UNDO_INFO_CREATE nautilus_file_undo_info_create_get_type () 115 G_DECLARE_FINAL_TYPE (NautilusFileUndoInfoCreate, nautilus_file_undo_info_create, 116 NAUTILUS, FILE_UNDO_INFO_CREATE, 117 NautilusFileUndoInfo) 118 119 NautilusFileUndoInfo *nautilus_file_undo_info_create_new (NautilusFileUndoOp op_type); 120 void nautilus_file_undo_info_create_set_data (NautilusFileUndoInfoCreate *self, 121 GFile *file, 122 const char *template, 123 gint length); 124 125 /* rename */ 126 #define NAUTILUS_TYPE_FILE_UNDO_INFO_RENAME nautilus_file_undo_info_rename_get_type () 127 G_DECLARE_FINAL_TYPE (NautilusFileUndoInfoRename, nautilus_file_undo_info_rename, 128 NAUTILUS, FILE_UNDO_INFO_RENAME, 129 NautilusFileUndoInfo) 130 131 NautilusFileUndoInfo *nautilus_file_undo_info_rename_new (void); 132 void nautilus_file_undo_info_rename_set_data_pre (NautilusFileUndoInfoRename *self, 133 GFile *old_file, 134 gchar *old_display_name, 135 gchar *new_display_name); 136 void nautilus_file_undo_info_rename_set_data_post (NautilusFileUndoInfoRename *self, 137 GFile *new_file); 138 139 /* batch rename */ 140 #define NAUTILUS_TYPE_FILE_UNDO_INFO_BATCH_RENAME nautilus_file_undo_info_batch_rename_get_type () 141 G_DECLARE_FINAL_TYPE (NautilusFileUndoInfoBatchRename, nautilus_file_undo_info_batch_rename, 142 NAUTILUS, FILE_UNDO_INFO_BATCH_RENAME, 143 NautilusFileUndoInfo) 144 145 NautilusFileUndoInfo *nautilus_file_undo_info_batch_rename_new (gint item_count); 146 void nautilus_file_undo_info_batch_rename_set_data_pre (NautilusFileUndoInfoBatchRename *self, 147 GList *old_files); 148 void nautilus_file_undo_info_batch_rename_set_data_post (NautilusFileUndoInfoBatchRename *self, 149 GList *new_files); 150 151 /* starred files */ 152 #define NAUTILUS_TYPE_FILE_UNDO_INFO_STARRED (nautilus_file_undo_info_starred_get_type ()) 153 G_DECLARE_FINAL_TYPE (NautilusFileUndoInfoStarred, nautilus_file_undo_info_starred, 154 NAUTILUS, FILE_UNDO_INFO_STARRED, 155 NautilusFileUndoInfo) 156 157 NautilusFileUndoInfo *nautilus_file_undo_info_starred_new (GList *files, 158 gboolean starred); 159 GList *nautilus_file_undo_info_starred_get_files (NautilusFileUndoInfoStarred *self); 160 gboolean nautilus_file_undo_info_starred_is_starred (NautilusFileUndoInfoStarred *self); 161 162 /* trash */ 163 #define NAUTILUS_TYPE_FILE_UNDO_INFO_TRASH (nautilus_file_undo_info_trash_get_type ()) 164 G_DECLARE_FINAL_TYPE (NautilusFileUndoInfoTrash, nautilus_file_undo_info_trash, 165 NAUTILUS, FILE_UNDO_INFO_TRASH, 166 NautilusFileUndoInfo) 167 168 NautilusFileUndoInfo *nautilus_file_undo_info_trash_new (gint item_count); 169 void nautilus_file_undo_info_trash_add_file (NautilusFileUndoInfoTrash *self, 170 GFile *file); 171 GList *nautilus_file_undo_info_trash_get_files (NautilusFileUndoInfoTrash *self); 172 173 /* recursive permissions */ 174 #define NAUTILUS_TYPE_FILE_UNDO_INFO_REC_PERMISSIONS nautilus_file_undo_info_rec_permissions_get_type () 175 G_DECLARE_FINAL_TYPE (NautilusFileUndoInfoRecPermissions, nautilus_file_undo_info_rec_permissions, 176 NAUTILUS, FILE_UNDO_INFO_REC_PERMISSIONS, 177 NautilusFileUndoInfo) 178 179 NautilusFileUndoInfo *nautilus_file_undo_info_rec_permissions_new (GFile *dest, 180 guint32 file_permissions, 181 guint32 file_mask, 182 guint32 dir_permissions, 183 guint32 dir_mask); 184 void nautilus_file_undo_info_rec_permissions_add_file (NautilusFileUndoInfoRecPermissions *self, 185 GFile *file, 186 guint32 permission); 187 188 /* single file change permissions */ 189 #define NAUTILUS_TYPE_FILE_UNDO_INFO_PERMISSIONS nautilus_file_undo_info_permissions_get_type () 190 G_DECLARE_FINAL_TYPE (NautilusFileUndoInfoPermissions, nautilus_file_undo_info_permissions, 191 NAUTILUS, FILE_UNDO_INFO_PERMISSIONS, 192 NautilusFileUndoInfo) 193 194 NautilusFileUndoInfo *nautilus_file_undo_info_permissions_new (GFile *file, 195 guint32 current_permissions, 196 guint32 new_permissions); 197 198 /* group and owner change */ 199 #define NAUTILUS_TYPE_FILE_UNDO_INFO_OWNERSHIP nautilus_file_undo_info_ownership_get_type () 200 G_DECLARE_FINAL_TYPE (NautilusFileUndoInfoOwnership, nautilus_file_undo_info_ownership, 201 NAUTILUS, FILE_UNDO_INFO_OWNERSHIP, 202 NautilusFileUndoInfo) 203 204 NautilusFileUndoInfo *nautilus_file_undo_info_ownership_new (NautilusFileUndoOp op_type, 205 GFile *file, 206 const char *current_data, 207 const char *new_data); 208 209 /* extract */ 210 #define NAUTILUS_TYPE_FILE_UNDO_INFO_EXTRACT nautilus_file_undo_info_extract_get_type () 211 G_DECLARE_FINAL_TYPE (NautilusFileUndoInfoExtract, nautilus_file_undo_info_extract, 212 NAUTILUS, FILE_UNDO_INFO_EXTRACT, 213 NautilusFileUndoInfo) 214 215 NautilusFileUndoInfo * nautilus_file_undo_info_extract_new (GList *sources, 216 GFile *destination_directory); 217 void nautilus_file_undo_info_extract_set_outputs (NautilusFileUndoInfoExtract *self, 218 GList *outputs); 219 220 /* compress */ 221 #define NAUTILUS_TYPE_FILE_UNDO_INFO_COMPRESS nautilus_file_undo_info_compress_get_type () 222 G_DECLARE_FINAL_TYPE (NautilusFileUndoInfoCompress, nautilus_file_undo_info_compress, 223 NAUTILUS, FILE_UNDO_INFO_COMPRESS, 224 NautilusFileUndoInfo) 225 226 NautilusFileUndoInfo * nautilus_file_undo_info_compress_new (GList *sources, 227 GFile *output, 228 AutoarFormat format, 229 AutoarFilter filter, 230 const gchar *passphrase); 231