1 /* 2 nautilus-file.h: Nautilus file model. 3 4 Copyright (C) 1999, 2000, 2001 Eazel, Inc. 5 6 This program is free software; you can redistribute it and/or 7 modify it under the terms of the GNU General Public License as 8 published by the Free Software Foundation; either version 2 of the 9 License, or (at your option) any later version. 10 11 This program is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 General Public License for more details. 15 16 You should have received a copy of the GNU General Public 17 License along with this program; if not, see <http://www.gnu.org/licenses/>. 18 19 Author: Darin Adler <darin@bentspoon.com> 20 */ 21 22 #pragma once 23 24 #include <gtk/gtk.h> 25 #include <gio/gio.h> 26 27 #include "nautilus-types.h" 28 29 /* NautilusFile is an object used to represent a single element of a 30 * NautilusDirectory. It's lightweight and relies on NautilusDirectory 31 * to do most of the work. 32 */ 33 34 /* NautilusFile is defined both here and in nautilus-directory.h. */ 35 #ifndef NAUTILUS_FILE_DEFINED 36 #define NAUTILUS_FILE_DEFINED 37 typedef struct NautilusFile NautilusFile; 38 #endif 39 40 #define NAUTILUS_TYPE_FILE nautilus_file_get_type() 41 #define NAUTILUS_FILE(obj) \ 42 (G_TYPE_CHECK_INSTANCE_CAST ((obj), NAUTILUS_TYPE_FILE, NautilusFile)) 43 #define NAUTILUS_FILE_CLASS(klass) \ 44 (G_TYPE_CHECK_CLASS_CAST ((klass), NAUTILUS_TYPE_FILE, NautilusFileClass)) 45 #define NAUTILUS_IS_FILE(obj) \ 46 (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NAUTILUS_TYPE_FILE)) 47 #define NAUTILUS_IS_FILE_CLASS(klass) \ 48 (G_TYPE_CHECK_CLASS_TYPE ((klass), NAUTILUS_TYPE_FILE)) 49 #define NAUTILUS_FILE_GET_CLASS(obj) \ 50 (G_TYPE_INSTANCE_GET_CLASS ((obj), NAUTILUS_TYPE_FILE, NautilusFileClass)) 51 52 typedef enum { 53 /* These may be set as default-sort-order. When touching this, make sure to 54 * keep the values in sync with the "org.gnome.nautilus.SortOrder" enum in the 55 * `data/org.gnome.nautilus.gschema.xml` schemas file, and the attributes[] 56 * array in `src/nautilus-list-view.c`. 57 */ 58 NAUTILUS_FILE_SORT_BY_DISPLAY_NAME = 0, 59 NAUTILUS_FILE_SORT_BY_SIZE = 1, 60 NAUTILUS_FILE_SORT_BY_TYPE = 2, 61 NAUTILUS_FILE_SORT_BY_MTIME = 3, 62 NAUTILUS_FILE_SORT_BY_ATIME = 4, 63 NAUTILUS_FILE_SORT_BY_BTIME = 5, 64 NAUTILUS_FILE_SORT_BY_STARRED = 6, 65 66 /* The following are specific to special locations and as such are not to be 67 * included in the "org.gnome.nautilus.SortOrder" enum. 68 */ 69 NAUTILUS_FILE_SORT_BY_TRASHED_TIME, 70 NAUTILUS_FILE_SORT_BY_SEARCH_RELEVANCE, 71 NAUTILUS_FILE_SORT_BY_RECENCY 72 } NautilusFileSortType; 73 74 typedef enum { 75 NAUTILUS_REQUEST_NOT_STARTED, 76 NAUTILUS_REQUEST_IN_PROGRESS, 77 NAUTILUS_REQUEST_DONE 78 } NautilusRequestStatus; 79 80 typedef enum { 81 NAUTILUS_FILE_ICON_FLAGS_NONE = 0, 82 NAUTILUS_FILE_ICON_FLAGS_USE_THUMBNAILS = (1<<0), 83 NAUTILUS_FILE_ICON_FLAGS_IGNORE_VISITING = (1<<1), 84 NAUTILUS_FILE_ICON_FLAGS_FOR_DRAG_ACCEPT = (1<<2), 85 NAUTILUS_FILE_ICON_FLAGS_FOR_OPEN_FOLDER = (1<<3), 86 /* whether the thumbnail size must match the display icon size */ 87 NAUTILUS_FILE_ICON_FLAGS_FORCE_THUMBNAIL_SIZE = (1<<4), 88 /* uses the icon of the mount if present */ 89 NAUTILUS_FILE_ICON_FLAGS_USE_MOUNT_ICON = (1<<5), 90 /* render emblems */ 91 NAUTILUS_FILE_ICON_FLAGS_USE_EMBLEMS = (1<<6), 92 NAUTILUS_FILE_ICON_FLAGS_USE_ONE_EMBLEM = (1<<7) 93 } NautilusFileIconFlags; 94 95 /* Standard Drag & Drop types. */ 96 typedef enum { 97 NAUTILUS_ICON_DND_GNOME_ICON_LIST, 98 NAUTILUS_ICON_DND_URI_LIST, 99 NAUTILUS_ICON_DND_NETSCAPE_URL, 100 NAUTILUS_ICON_DND_TEXT, 101 NAUTILUS_ICON_DND_XDNDDIRECTSAVE, 102 NAUTILUS_ICON_DND_RAW, 103 NAUTILUS_ICON_DND_ROOTWINDOW_DROP 104 } NautilusIconDndTargetType; 105 106 /* Item of the drag selection list */ 107 typedef struct { 108 NautilusFile *file; 109 char *uri; 110 gboolean got_icon_position; 111 int icon_x, icon_y; 112 int icon_width, icon_height; 113 } NautilusDragSelectionItem; 114 115 /* Emblems sometimes displayed for NautilusFiles. Do not localize. */ 116 #define NAUTILUS_FILE_EMBLEM_NAME_SYMBOLIC_LINK "symbolic-link" 117 #define NAUTILUS_FILE_EMBLEM_NAME_CANT_READ "unreadable" 118 #define NAUTILUS_FILE_EMBLEM_NAME_CANT_WRITE "readonly" 119 #define NAUTILUS_FILE_EMBLEM_NAME_TRASH "trash" 120 #define NAUTILUS_FILE_EMBLEM_NAME_NOTE "note" 121 122 typedef void (*NautilusFileCallback) (NautilusFile *file, 123 gpointer callback_data); 124 typedef gboolean (*NautilusFileFilterFunc) (NautilusFile *file, 125 gpointer callback_data); 126 typedef void (*NautilusFileListCallback) (GList *file_list, 127 gpointer callback_data); 128 typedef void (*NautilusFileOperationCallback) (NautilusFile *file, 129 GFile *result_location, 130 GError *error, 131 gpointer callback_data); 132 133 134 #define NAUTILUS_FILE_ATTRIBUTES_FOR_ICON (NAUTILUS_FILE_ATTRIBUTE_INFO | NAUTILUS_FILE_ATTRIBUTE_THUMBNAIL) 135 136 typedef void NautilusFileListHandle; 137 138 /* GObject requirements. */ 139 GType nautilus_file_get_type (void); 140 141 /* Getting at a single file. */ 142 NautilusFile * nautilus_file_get (GFile *location); 143 NautilusFile * nautilus_file_get_by_uri (const char *uri); 144 145 /* Get a file only if the nautilus version already exists */ 146 NautilusFile * nautilus_file_get_existing (GFile *location); 147 NautilusFile * nautilus_file_get_existing_by_uri (const char *uri); 148 149 /* Covers for g_object_ref and g_object_unref that provide two conveniences: 150 * 1) Using these is type safe. 151 * 2) You are allowed to call these with NULL, 152 */ 153 NautilusFile * nautilus_file_ref (NautilusFile *file); 154 void nautilus_file_unref (NautilusFile *file); 155 156 G_DEFINE_AUTOPTR_CLEANUP_FUNC (NautilusFile, nautilus_file_unref) 157 158 /* Monitor the file. */ 159 void nautilus_file_monitor_add (NautilusFile *file, 160 gconstpointer client, 161 NautilusFileAttributes attributes); 162 void nautilus_file_monitor_remove (NautilusFile *file, 163 gconstpointer client); 164 165 /* Waiting for data that's read asynchronously. 166 * This interface currently works only for metadata, but could be expanded 167 * to other attributes as well. 168 */ 169 void nautilus_file_call_when_ready (NautilusFile *file, 170 NautilusFileAttributes attributes, 171 NautilusFileCallback callback, 172 gpointer callback_data); 173 void nautilus_file_cancel_call_when_ready (NautilusFile *file, 174 NautilusFileCallback callback, 175 gpointer callback_data); 176 gboolean nautilus_file_check_if_ready (NautilusFile *file, 177 NautilusFileAttributes attributes); 178 void nautilus_file_invalidate_attributes (NautilusFile *file, 179 NautilusFileAttributes attributes); 180 void nautilus_file_invalidate_all_attributes (NautilusFile *file); 181 182 /* Basic attributes for file objects. */ 183 gboolean nautilus_file_contains_text (NautilusFile *file); 184 char * nautilus_file_get_display_name (NautilusFile *file); 185 char * nautilus_file_get_edit_name (NautilusFile *file); 186 char * nautilus_file_get_name (NautilusFile *file); 187 GFile * nautilus_file_get_location (NautilusFile *file); 188 char * nautilus_file_get_description (NautilusFile *file); 189 char * nautilus_file_get_uri (NautilusFile *file); 190 char * nautilus_file_get_uri_scheme (NautilusFile *file); 191 NautilusFile * nautilus_file_get_parent (NautilusFile *file); 192 GFile * nautilus_file_get_parent_location (NautilusFile *file); 193 char * nautilus_file_get_parent_uri (NautilusFile *file); 194 char * nautilus_file_get_parent_uri_for_display (NautilusFile *file); 195 char * nautilus_file_get_thumbnail_path (NautilusFile *file); 196 gboolean nautilus_file_can_get_size (NautilusFile *file); 197 goffset nautilus_file_get_size (NautilusFile *file); 198 time_t nautilus_file_get_mtime (NautilusFile *file); 199 time_t nautilus_file_get_atime (NautilusFile *file); 200 time_t nautilus_file_get_btime (NautilusFile *file); 201 time_t nautilus_file_get_recency (NautilusFile *file); 202 time_t nautilus_file_get_trash_time (NautilusFile *file); 203 GFileType nautilus_file_get_file_type (NautilusFile *file); 204 char * nautilus_file_get_mime_type (NautilusFile *file); 205 char * nautilus_file_get_extension (NautilusFile *file); 206 gboolean nautilus_file_is_mime_type (NautilusFile *file, 207 const char *mime_type); 208 gboolean nautilus_file_is_launchable (NautilusFile *file); 209 gboolean nautilus_file_is_symbolic_link (NautilusFile *file); 210 GMount * nautilus_file_get_mount (NautilusFile *file); 211 char * nautilus_file_get_volume_free_space (NautilusFile *file); 212 char * nautilus_file_get_volume_name (NautilusFile *file); 213 char * nautilus_file_get_symbolic_link_target_path (NautilusFile *file); 214 char * nautilus_file_get_symbolic_link_target_uri (NautilusFile *file); 215 gboolean nautilus_file_is_broken_symbolic_link (NautilusFile *file); 216 gboolean nautilus_file_is_executable (NautilusFile *file); 217 gboolean nautilus_file_is_directory (NautilusFile *file); 218 gboolean nautilus_file_is_regular_file (NautilusFile *file); 219 gboolean nautilus_file_is_user_special_directory (NautilusFile *file, 220 GUserDirectory special_directory); 221 gboolean nautilus_file_is_archive (NautilusFile *file); 222 gboolean nautilus_file_is_in_search (NautilusFile *file); 223 gboolean nautilus_file_is_in_trash (NautilusFile *file); 224 gboolean nautilus_file_is_in_recent (NautilusFile *file); 225 gboolean nautilus_file_is_in_starred (NautilusFile *file); 226 gboolean nautilus_file_is_in_admin (NautilusFile *file); 227 gboolean nautilus_file_is_remote (NautilusFile *file); 228 gboolean nautilus_file_is_other_locations (NautilusFile *file); 229 gboolean nautilus_file_is_starred_location (NautilusFile *file); 230 gboolean nautilus_file_is_home (NautilusFile *file); 231 GError * nautilus_file_get_file_info_error (NautilusFile *file); 232 gboolean nautilus_file_get_directory_item_count (NautilusFile *file, 233 guint *count, 234 gboolean *count_unreadable); 235 void nautilus_file_recompute_deep_counts (NautilusFile *file); 236 NautilusRequestStatus nautilus_file_get_deep_counts (NautilusFile *file, 237 guint *directory_count, 238 guint *file_count, 239 guint *unreadable_directory_count, 240 goffset *total_size, 241 gboolean force); 242 gboolean nautilus_file_should_show_thumbnail (NautilusFile *file); 243 gboolean nautilus_file_should_show_directory_item_count (NautilusFile *file); 244 245 void nautilus_file_set_search_relevance (NautilusFile *file, 246 gdouble relevance); 247 void nautilus_file_set_search_fts_snippet (NautilusFile *file, 248 const gchar *fts_snippet); 249 const gchar* nautilus_file_get_search_fts_snippet (NautilusFile *file); 250 251 void nautilus_file_set_attributes (NautilusFile *file, 252 GFileInfo *attributes, 253 NautilusFileOperationCallback callback, 254 gpointer callback_data); 255 GFilesystemPreviewType nautilus_file_get_filesystem_use_preview (NautilusFile *file); 256 257 char * nautilus_file_get_filesystem_id (NautilusFile *file); 258 259 char * nautilus_file_get_filesystem_type (NautilusFile *file); 260 261 gboolean nautilus_file_get_filesystem_remote (NautilusFile *file); 262 263 NautilusFile * nautilus_file_get_trash_original_file (NautilusFile *file); 264 265 /* Permissions. */ 266 gboolean nautilus_file_can_get_permissions (NautilusFile *file); 267 gboolean nautilus_file_can_set_permissions (NautilusFile *file); 268 guint nautilus_file_get_permissions (NautilusFile *file); 269 gboolean nautilus_file_can_get_owner (NautilusFile *file); 270 gboolean nautilus_file_can_set_owner (NautilusFile *file); 271 gboolean nautilus_file_can_get_group (NautilusFile *file); 272 gboolean nautilus_file_can_set_group (NautilusFile *file); 273 char * nautilus_file_get_owner_name (NautilusFile *file); 274 char * nautilus_file_get_group_name (NautilusFile *file); 275 GList * nautilus_get_user_names (void); 276 GList * nautilus_get_all_group_names (void); 277 GList * nautilus_file_get_settable_group_names (NautilusFile *file); 278 gboolean nautilus_file_can_get_selinux_context (NautilusFile *file); 279 char * nautilus_file_get_selinux_context (NautilusFile *file); 280 281 /* "Capabilities". */ 282 gboolean nautilus_file_can_read (NautilusFile *file); 283 gboolean nautilus_file_can_write (NautilusFile *file); 284 gboolean nautilus_file_can_execute (NautilusFile *file); 285 gboolean nautilus_file_can_rename (NautilusFile *file); 286 gboolean nautilus_file_can_delete (NautilusFile *file); 287 gboolean nautilus_file_can_trash (NautilusFile *file); 288 289 gboolean nautilus_file_can_mount (NautilusFile *file); 290 gboolean nautilus_file_can_unmount (NautilusFile *file); 291 gboolean nautilus_file_can_eject (NautilusFile *file); 292 gboolean nautilus_file_can_start (NautilusFile *file); 293 gboolean nautilus_file_can_start_degraded (NautilusFile *file); 294 gboolean nautilus_file_can_stop (NautilusFile *file); 295 GDriveStartStopType nautilus_file_get_start_stop_type (NautilusFile *file); 296 gboolean nautilus_file_can_poll_for_media (NautilusFile *file); 297 gboolean nautilus_file_is_media_check_automatic (NautilusFile *file); 298 299 void nautilus_file_mount (NautilusFile *file, 300 GMountOperation *mount_op, 301 GCancellable *cancellable, 302 NautilusFileOperationCallback callback, 303 gpointer callback_data); 304 void nautilus_file_unmount (NautilusFile *file, 305 GMountOperation *mount_op, 306 GCancellable *cancellable, 307 NautilusFileOperationCallback callback, 308 gpointer callback_data); 309 void nautilus_file_eject (NautilusFile *file, 310 GMountOperation *mount_op, 311 GCancellable *cancellable, 312 NautilusFileOperationCallback callback, 313 gpointer callback_data); 314 315 void nautilus_file_start (NautilusFile *file, 316 GMountOperation *start_op, 317 GCancellable *cancellable, 318 NautilusFileOperationCallback callback, 319 gpointer callback_data); 320 void nautilus_file_stop (NautilusFile *file, 321 GMountOperation *mount_op, 322 GCancellable *cancellable, 323 NautilusFileOperationCallback callback, 324 gpointer callback_data); 325 void nautilus_file_poll_for_media (NautilusFile *file); 326 327 /* Basic operations for file objects. */ 328 void nautilus_file_set_owner (NautilusFile *file, 329 const char *user_name_or_id, 330 NautilusFileOperationCallback callback, 331 gpointer callback_data); 332 void nautilus_file_set_group (NautilusFile *file, 333 const char *group_name_or_id, 334 NautilusFileOperationCallback callback, 335 gpointer callback_data); 336 void nautilus_file_set_permissions (NautilusFile *file, 337 guint32 permissions, 338 NautilusFileOperationCallback callback, 339 gpointer callback_data); 340 void nautilus_file_rename (NautilusFile *file, 341 const char *new_name, 342 NautilusFileOperationCallback callback, 343 gpointer callback_data); 344 void nautilus_file_batch_rename (GList *files, 345 GList *new_names, 346 NautilusFileOperationCallback callback, 347 gpointer callback_data); 348 void nautilus_file_cancel (NautilusFile *file, 349 NautilusFileOperationCallback callback, 350 gpointer callback_data); 351 352 /* Return true if this file has already been deleted. 353 * This object will be unref'd after sending the files_removed signal, 354 * but it could hang around longer if someone ref'd it. 355 */ 356 gboolean nautilus_file_is_gone (NautilusFile *file); 357 358 /* Used in subclasses that handles the rename of a file. This handles the case 359 * when the file is gone. If this returns TRUE, simply do nothing 360 */ 361 gboolean nautilus_file_rename_handle_file_gone (NautilusFile *file, 362 NautilusFileOperationCallback callback, 363 gpointer callback_data); 364 365 /* Return true if this file is not confirmed to have ever really 366 * existed. This is true when the NautilusFile object has been created, but no I/O 367 * has yet confirmed the existence of a file by that name. 368 */ 369 gboolean nautilus_file_is_not_yet_confirmed (NautilusFile *file); 370 371 /* Simple getting and setting top-level metadata. */ 372 char * nautilus_file_get_metadata (NautilusFile *file, 373 const char *key, 374 const char *default_metadata); 375 GList * nautilus_file_get_metadata_list (NautilusFile *file, 376 const char *key); 377 void nautilus_file_set_metadata (NautilusFile *file, 378 const char *key, 379 const char *default_metadata, 380 const char *metadata); 381 void nautilus_file_set_metadata_list (NautilusFile *file, 382 const char *key, 383 GList *list); 384 385 /* Covers for common data types. */ 386 gboolean nautilus_file_get_boolean_metadata (NautilusFile *file, 387 const char *key, 388 gboolean default_metadata); 389 void nautilus_file_set_boolean_metadata (NautilusFile *file, 390 const char *key, 391 gboolean default_metadata, 392 gboolean metadata); 393 int nautilus_file_get_integer_metadata (NautilusFile *file, 394 const char *key, 395 int default_metadata); 396 void nautilus_file_set_integer_metadata (NautilusFile *file, 397 const char *key, 398 int default_metadata, 399 int metadata); 400 401 #define UNDEFINED_TIME ((time_t) (-1)) 402 403 time_t nautilus_file_get_time_metadata (NautilusFile *file, 404 const char *key); 405 void nautilus_file_set_time_metadata (NautilusFile *file, 406 const char *key, 407 time_t time); 408 409 410 /* Attributes for file objects as user-displayable strings. */ 411 char * nautilus_file_get_string_attribute (NautilusFile *file, 412 const char *attribute_name); 413 char * nautilus_file_get_string_attribute_q (NautilusFile *file, 414 GQuark attribute_q); 415 char * nautilus_file_get_string_attribute_with_default (NautilusFile *file, 416 const char *attribute_name); 417 char * nautilus_file_get_string_attribute_with_default_q (NautilusFile *file, 418 GQuark attribute_q); 419 420 /* Matching with another URI. */ 421 gboolean nautilus_file_matches_uri (NautilusFile *file, 422 const char *uri); 423 424 gboolean nautilus_file_has_local_path (NautilusFile *file); 425 426 /* Comparing two file objects for sorting */ 427 NautilusFileSortType nautilus_file_get_default_sort_type (NautilusFile *file, 428 gboolean *reversed); 429 430 int nautilus_file_compare_for_sort (NautilusFile *file_1, 431 NautilusFile *file_2, 432 NautilusFileSortType sort_type, 433 gboolean directories_first, 434 gboolean reversed); 435 int nautilus_file_compare_for_sort_by_attribute (NautilusFile *file_1, 436 NautilusFile *file_2, 437 const char *attribute, 438 gboolean directories_first, 439 gboolean reversed); 440 int nautilus_file_compare_for_sort_by_attribute_q (NautilusFile *file_1, 441 NautilusFile *file_2, 442 GQuark attribute, 443 gboolean directories_first, 444 gboolean reversed); 445 gboolean nautilus_file_is_date_sort_attribute_q (GQuark attribute); 446 447 int nautilus_file_compare_location (NautilusFile *file_1, 448 NautilusFile *file_2); 449 450 /* Compare display name of file with string for equality */ 451 int nautilus_file_compare_display_name (NautilusFile *file, 452 const char *string); 453 454 /* filtering functions for use by various directory views */ 455 gboolean nautilus_file_is_hidden_file (NautilusFile *file); 456 gboolean nautilus_file_should_show (NautilusFile *file, 457 gboolean show_hidden); 458 GList *nautilus_file_list_filter_hidden (GList *files, 459 gboolean show_hidden); 460 461 462 /* Get the URI that's used when activating the file. 463 * Getting this can require reading the contents of the file. 464 */ 465 gboolean nautilus_file_has_activation_uri (NautilusFile *file); 466 char * nautilus_file_get_activation_uri (NautilusFile *file); 467 GFile * nautilus_file_get_activation_location (NautilusFile *file); 468 GIcon * nautilus_file_get_gicon (NautilusFile *file, 469 NautilusFileIconFlags flags); 470 NautilusIconInfo * nautilus_file_get_icon (NautilusFile *file, 471 int size, 472 int scale, 473 NautilusFileIconFlags flags); 474 GdkPixbuf * nautilus_file_get_icon_pixbuf (NautilusFile *file, 475 int size, 476 gboolean force_size, 477 int scale, 478 NautilusFileIconFlags flags); 479 480 /* Whether the file should open inside a view */ 481 gboolean nautilus_file_opens_in_view (NautilusFile *file); 482 /* Thumbnailing handling */ 483 gboolean nautilus_file_is_thumbnailing (NautilusFile *file); 484 485 /* Convenience functions for dealing with a list of NautilusFile objects that each have a ref. 486 * These are just convenient names for functions that work on lists of GtkObject *. 487 */ 488 GList * nautilus_file_list_ref (GList *file_list); 489 void nautilus_file_list_unref (GList *file_list); 490 void nautilus_file_list_free (GList *file_list); 491 GList * nautilus_file_list_copy (GList *file_list); 492 GList * nautilus_file_list_sort_by_display_name (GList *file_list); 493 void nautilus_file_list_call_when_ready (GList *file_list, 494 NautilusFileAttributes attributes, 495 NautilusFileListHandle **handle, 496 NautilusFileListCallback callback, 497 gpointer callback_data); 498 void nautilus_file_list_cancel_call_when_ready (NautilusFileListHandle *handle); 499 500 GList * nautilus_file_list_filter (GList *files, 501 GList **failed, 502 NautilusFileFilterFunc filter_function, 503 gpointer user_data); 504 gboolean nautilus_file_list_are_all_folders (const GList *files); 505 /* DND */ 506 gboolean nautilus_drag_can_accept_item (NautilusFile *drop_target_item, 507 const char *item_uri); 508 509 gboolean nautilus_drag_can_accept_items (NautilusFile *drop_target_item, 510 const GList *items); 511 512 gboolean nautilus_drag_can_accept_info (NautilusFile *drop_target_item, 513 NautilusIconDndTargetType drag_type, 514 const GList *items); 515 516 /* Debugging */ 517 void nautilus_file_dump (NautilusFile *file); 518 519 typedef struct NautilusFileDetails NautilusFileDetails; 520 521 struct NautilusFile { 522 GObject parent_slot; 523 NautilusFileDetails *details; 524 }; 525 526 /* This is actually a "protected" type, but it must be here so we can 527 * compile the get_date function pointer declaration below. 528 */ 529 typedef enum { 530 NAUTILUS_DATE_TYPE_MODIFIED, 531 NAUTILUS_DATE_TYPE_ACCESSED, 532 NAUTILUS_DATE_TYPE_CREATED, 533 NAUTILUS_DATE_TYPE_TRASHED, 534 NAUTILUS_DATE_TYPE_RECENCY 535 } NautilusDateType; 536 537 gboolean nautilus_file_get_date (NautilusFile *file, 538 NautilusDateType date_type, 539 time_t *date); 540 541 typedef struct { 542 GObjectClass parent_slot; 543 544 /* Subclasses can set this to something other than G_FILE_TYPE_UNKNOWN and 545 it will be used as the default file type. This is useful when creating 546 a "virtual" NautilusFile subclass that you can't actually get real 547 information about. For exaple NautilusDesktopDirectoryFile. */ 548 GFileType default_file_type; 549 550 /* Called when the file notices any change. */ 551 void (* changed) (NautilusFile *file); 552 553 /* Called periodically while directory deep count is being computed. */ 554 void (* updated_deep_count_in_progress) (NautilusFile *file); 555 556 /* Virtual functions (mainly used for trash directory). */ 557 void (* monitor_add) (NautilusFile *file, 558 gconstpointer client, 559 NautilusFileAttributes attributes); 560 void (* monitor_remove) (NautilusFile *file, 561 gconstpointer client); 562 void (* call_when_ready) (NautilusFile *file, 563 NautilusFileAttributes attributes, 564 NautilusFileCallback callback, 565 gpointer callback_data); 566 void (* cancel_call_when_ready) (NautilusFile *file, 567 NautilusFileCallback callback, 568 gpointer callback_data); 569 gboolean (* check_if_ready) (NautilusFile *file, 570 NautilusFileAttributes attributes); 571 gboolean (* get_item_count) (NautilusFile *file, 572 guint *count, 573 gboolean *count_unreadable); 574 NautilusRequestStatus (* get_deep_counts) (NautilusFile *file, 575 guint *directory_count, 576 guint *file_count, 577 guint *unreadable_directory_count, 578 goffset *total_size); 579 gboolean (* get_date) (NautilusFile *file, 580 NautilusDateType type, 581 time_t *date); 582 char * (* get_where_string) (NautilusFile *file); 583 584 void (* set_metadata) (NautilusFile *file, 585 const char *key, 586 const char *value); 587 void (* set_metadata_as_list) (NautilusFile *file, 588 const char *key, 589 char **value); 590 591 void (* mount) (NautilusFile *file, 592 GMountOperation *mount_op, 593 GCancellable *cancellable, 594 NautilusFileOperationCallback callback, 595 gpointer callback_data); 596 void (* unmount) (NautilusFile *file, 597 GMountOperation *mount_op, 598 GCancellable *cancellable, 599 NautilusFileOperationCallback callback, 600 gpointer callback_data); 601 void (* eject) (NautilusFile *file, 602 GMountOperation *mount_op, 603 GCancellable *cancellable, 604 NautilusFileOperationCallback callback, 605 gpointer callback_data); 606 607 void (* start) (NautilusFile *file, 608 GMountOperation *start_op, 609 GCancellable *cancellable, 610 NautilusFileOperationCallback callback, 611 gpointer callback_data); 612 void (* stop) (NautilusFile *file, 613 GMountOperation *mount_op, 614 GCancellable *cancellable, 615 NautilusFileOperationCallback callback, 616 gpointer callback_data); 617 618 void (* poll_for_media) (NautilusFile *file); 619 } NautilusFileClass; 620