1 /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- 2 3 nemo-file.h: Nemo file model. 4 5 Copyright (C) 1999, 2000, 2001 Eazel, Inc. 6 7 This program is free software; you can redistribute it and/or 8 modify it under the terms of the GNU General Public License as 9 published by the Free Software Foundation; either version 2 of the 10 License, or (at your option) any later version. 11 12 This program 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 program; if not, write to the 19 Free Software Foundation, Inc., 51 Franklin Street - Suite 500, 20 Boston, MA 02110-1335, USA. 21 22 Author: Darin Adler <darin@bentspoon.com> 23 */ 24 25 #ifndef NEMO_FILE_H 26 #define NEMO_FILE_H 27 28 #include <gtk/gtk.h> 29 #include <gio/gio.h> 30 #include <pango/pango.h> 31 #include <libnemo-private/nemo-file-attributes.h> 32 #include <libnemo-private/nemo-icon-info.h> 33 34 /* NemoFile is an object used to represent a single element of a 35 * NemoDirectory. It's lightweight and relies on NemoDirectory 36 * to do most of the work. 37 */ 38 39 /* NemoFile is defined both here and in nemo-directory.h. */ 40 #ifndef NEMO_FILE_DEFINED 41 #define NEMO_FILE_DEFINED 42 typedef struct NemoFile NemoFile; 43 #endif 44 45 #define NEMO_TYPE_FILE nemo_file_get_type() 46 #define NEMO_FILE(obj) \ 47 (G_TYPE_CHECK_INSTANCE_CAST ((obj), NEMO_TYPE_FILE, NemoFile)) 48 #define NEMO_FILE_CLASS(klass) \ 49 (G_TYPE_CHECK_CLASS_CAST ((klass), NEMO_TYPE_FILE, NemoFileClass)) 50 #define NEMO_IS_FILE(obj) \ 51 (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NEMO_TYPE_FILE)) 52 #define NEMO_IS_FILE_CLASS(klass) \ 53 (G_TYPE_CHECK_CLASS_TYPE ((klass), NEMO_TYPE_FILE)) 54 #define NEMO_FILE_GET_CLASS(obj) \ 55 (G_TYPE_INSTANCE_GET_CLASS ((obj), NEMO_TYPE_FILE, NemoFileClass)) 56 57 typedef enum { 58 NEMO_FILE_SORT_NONE, 59 NEMO_FILE_SORT_BY_DISPLAY_NAME, 60 NEMO_FILE_SORT_BY_SIZE, 61 NEMO_FILE_SORT_BY_TYPE, 62 NEMO_FILE_SORT_BY_DETAILED_TYPE, 63 NEMO_FILE_SORT_BY_MTIME, 64 NEMO_FILE_SORT_BY_ATIME, 65 NEMO_FILE_SORT_BY_TRASHED_TIME, 66 NEMO_FILE_SORT_BY_BTIME 67 } NemoFileSortType; 68 69 typedef enum { 70 NEMO_REQUEST_NOT_STARTED, 71 NEMO_REQUEST_IN_PROGRESS, 72 NEMO_REQUEST_DONE 73 } NemoRequestStatus; 74 75 typedef enum { 76 NEMO_FILE_ICON_FLAGS_NONE = 0, 77 NEMO_FILE_ICON_FLAGS_USE_THUMBNAILS = (1<<0), 78 NEMO_FILE_ICON_FLAGS_IGNORE_VISITING = (1<<1), 79 NEMO_FILE_ICON_FLAGS_EMBEDDING_TEXT = (1<<2), 80 NEMO_FILE_ICON_FLAGS_FOR_DRAG_ACCEPT = (1<<3), 81 NEMO_FILE_ICON_FLAGS_FOR_OPEN_FOLDER = (1<<4), 82 /* whether the thumbnail size must match the display icon size */ 83 NEMO_FILE_ICON_FLAGS_FORCE_THUMBNAIL_SIZE = (1<<5), 84 /* uses the icon of the mount if present */ 85 NEMO_FILE_ICON_FLAGS_USE_MOUNT_ICON = (1<<6), 86 /* render the mount icon as an emblem over the regular one */ 87 NEMO_FILE_ICON_FLAGS_USE_MOUNT_ICON_AS_EMBLEM = (1<<7), 88 NEMO_FILE_ICON_FLAGS_PIN_HEIGHT_FOR_DESKTOP = (1<<8) 89 } NemoFileIconFlags; 90 91 typedef enum { 92 NEMO_DATE_TYPE_MODIFIED, 93 NEMO_DATE_TYPE_CHANGED, 94 NEMO_DATE_TYPE_ACCESSED, 95 NEMO_DATE_TYPE_PERMISSIONS_CHANGED, 96 NEMO_DATE_TYPE_TRASHED, 97 NEMO_DATE_TYPE_CREATED 98 } NemoDateType; 99 100 typedef enum { 101 NEMO_FILE_TOOLTIP_FLAGS_NONE = 0, 102 NEMO_FILE_TOOLTIP_FLAGS_FILE_TYPE = (1<<0), 103 NEMO_FILE_TOOLTIP_FLAGS_MOD_DATE = (1<<1), 104 NEMO_FILE_TOOLTIP_FLAGS_ACCESS_DATE = (1<<2), 105 NEMO_FILE_TOOLTIP_FLAGS_PATH = (1<<3), 106 NEMO_FILE_TOOLTIP_FLAGS_CREATED_DATE = (1<<4) 107 } NemoFileTooltipFlags; 108 109 typedef enum { 110 NEMO_FILE_LOAD_DEFERRED_ATTRS_NO, 111 NEMO_FILE_LOAD_DEFERRED_ATTRS_YES, 112 NEMO_FILE_LOAD_DEFERRED_ATTRS_PRELOAD 113 } NemoFileLoadDeferredAttrs; 114 115 /* Emblems sometimes displayed for NemoFiles. Do not localize. */ 116 #define NEMO_FILE_EMBLEM_NAME_SYMBOLIC_LINK "symbolic-link" 117 #define NEMO_FILE_EMBLEM_NAME_CANT_READ "noread" 118 #define NEMO_FILE_EMBLEM_NAME_CANT_WRITE "nowrite" 119 #define NEMO_FILE_EMBLEM_NAME_TRASH "trash" 120 #define NEMO_FILE_EMBLEM_NAME_NOTE "note" 121 #define NEMO_FILE_EMBLEM_NAME_FAVORITE "xapp-favorite" 122 123 typedef void (*NemoFileCallback) (NemoFile *file, 124 gpointer callback_data); 125 typedef void (*NemoFileListCallback) (GList *file_list, 126 gpointer callback_data); 127 typedef void (*NemoFileOperationCallback) (NemoFile *file, 128 GFile *result_location, 129 GError *error, 130 gpointer callback_data); 131 typedef int (*NemoWidthMeasureCallback) (const char *string, 132 void *context); 133 typedef char * (*NemoTruncateCallback) (const char *string, 134 int width, 135 void *context); 136 137 #define NEMO_FILE_ATTRIBUTES_FOR_ICON (NEMO_FILE_ATTRIBUTE_INFO | NEMO_FILE_ATTRIBUTE_LINK_INFO | NEMO_FILE_ATTRIBUTE_THUMBNAIL) 138 #define NEMO_FILE_DEFERRED_ATTRIBUTES (NEMO_FILE_ATTRIBUTE_THUMBNAIL | NEMO_FILE_ATTRIBUTE_EXTENSION_INFO) 139 140 typedef void NemoFileListHandle; 141 142 /* GObject requirements. */ 143 GType nemo_file_get_type (void); 144 145 /* Getting at a single file. */ 146 NemoFile * nemo_file_get (GFile *location); 147 NemoFile * nemo_file_get_by_uri (const char *uri); 148 149 /* Get a file only if the nemo version already exists */ 150 NemoFile * nemo_file_get_existing (GFile *location); 151 NemoFile * nemo_file_get_existing_by_uri (const char *uri); 152 153 /* Covers for g_object_ref and g_object_unref that provide two conveniences: 154 * 1) Using these is type safe. 155 * 2) You are allowed to call these with NULL, 156 */ 157 NemoFile * nemo_file_ref (NemoFile *file); 158 void nemo_file_unref (NemoFile *file); 159 160 /* Monitor the file. */ 161 void nemo_file_monitor_add (NemoFile *file, 162 gconstpointer client, 163 NemoFileAttributes attributes); 164 void nemo_file_monitor_remove (NemoFile *file, 165 gconstpointer client); 166 167 /* Waiting for data that's read asynchronously. 168 * This interface currently works only for metadata, but could be expanded 169 * to other attributes as well. 170 */ 171 void nemo_file_call_when_ready (NemoFile *file, 172 NemoFileAttributes attributes, 173 NemoFileCallback callback, 174 gpointer callback_data); 175 void nemo_file_cancel_call_when_ready (NemoFile *file, 176 NemoFileCallback callback, 177 gpointer callback_data); 178 gboolean nemo_file_check_if_ready (NemoFile *file, 179 NemoFileAttributes attributes); 180 void nemo_file_invalidate_attributes (NemoFile *file, 181 NemoFileAttributes attributes); 182 void nemo_file_invalidate_all_attributes (NemoFile *file); 183 184 void nemo_file_increment_thumbnail_try_count (NemoFile *file); 185 186 /* Basic attributes for file objects. */ 187 gboolean nemo_file_contains_text (NemoFile *file); 188 char * nemo_file_get_display_name (NemoFile *file); 189 char * nemo_file_get_edit_name (NemoFile *file); 190 char * nemo_file_get_name (NemoFile *file); 191 const char * nemo_file_peek_name (NemoFile *file); 192 193 GFile * nemo_file_get_location (NemoFile *file); 194 char * nemo_file_get_description (NemoFile *file); 195 char * nemo_file_get_uri (NemoFile *file); 196 char * nemo_file_get_path (NemoFile *file); 197 char * nemo_file_get_uri_scheme (NemoFile *file); 198 NemoFile * nemo_file_get_parent (NemoFile *file); 199 GFile * nemo_file_get_parent_location (NemoFile *file); 200 char * nemo_file_get_parent_uri (NemoFile *file); 201 char * nemo_file_get_parent_uri_for_display (NemoFile *file); 202 gboolean nemo_file_can_get_size (NemoFile *file); 203 goffset nemo_file_get_size (NemoFile *file); 204 time_t nemo_file_get_mtime (NemoFile *file); 205 time_t nemo_file_get_ctime (NemoFile *file); 206 GFileType nemo_file_get_file_type (NemoFile *file); 207 char * nemo_file_get_mime_type (NemoFile *file); 208 gboolean nemo_file_is_mime_type (NemoFile *file, 209 const char *mime_type); 210 gboolean nemo_file_is_launchable (NemoFile *file); 211 gboolean nemo_file_is_symbolic_link (NemoFile *file); 212 gboolean nemo_file_is_mountpoint (NemoFile *file); 213 GMount * nemo_file_get_mount (NemoFile *file); 214 void nemo_file_set_mount (NemoFile *file, 215 GMount *mount); 216 char * nemo_file_get_volume_free_space (NemoFile *file); 217 char * nemo_file_get_volume_name (NemoFile *file); 218 char * nemo_file_get_symbolic_link_target_path (NemoFile *file); 219 char * nemo_file_get_symbolic_link_target_uri (NemoFile *file); 220 gboolean nemo_file_is_broken_symbolic_link (NemoFile *file); 221 gboolean nemo_file_is_nemo_link (NemoFile *file); 222 gboolean nemo_file_is_executable (NemoFile *file); 223 gboolean nemo_file_is_directory (NemoFile *file); 224 gboolean nemo_file_is_user_special_directory (NemoFile *file, 225 GUserDirectory special_directory); 226 gboolean nemo_file_is_archive (NemoFile *file); 227 gboolean nemo_file_is_in_trash (NemoFile *file); 228 gboolean nemo_file_is_in_recent (NemoFile *file); 229 gboolean nemo_file_is_in_favorites (NemoFile *file); 230 gboolean nemo_file_is_unavailable_favorite (NemoFile *file); 231 gboolean nemo_file_is_in_admin (NemoFile *file); 232 gboolean nemo_file_is_in_desktop (NemoFile *file); 233 gboolean nemo_file_is_home (NemoFile *file); 234 gboolean nemo_file_is_desktop_directory (NemoFile *file); 235 GError * nemo_file_get_file_info_error (NemoFile *file); 236 gboolean nemo_file_get_directory_item_count (NemoFile *file, 237 guint *count, 238 gboolean *count_unreadable); 239 void nemo_file_recompute_deep_counts (NemoFile *file); 240 NemoRequestStatus nemo_file_get_deep_counts (NemoFile *file, 241 guint *directory_count, 242 guint *file_count, 243 guint *unreadable_directory_count, 244 guint *hidden_count, 245 goffset *total_size, 246 gboolean force); 247 gboolean nemo_file_should_show_thumbnail (NemoFile *file); 248 void nemo_file_delete_thumbnail (NemoFile *file); 249 gboolean nemo_file_has_loaded_thumbnail (NemoFile *file); 250 gboolean nemo_file_should_show_directory_item_count (NemoFile *file); 251 gboolean nemo_file_should_show_type (NemoFile *file); 252 GList * nemo_file_get_keywords (NemoFile *file); 253 GList * nemo_file_get_emblem_icons (NemoFile *file, 254 NemoFile *view_file); 255 gboolean nemo_file_get_directory_item_mime_types (NemoFile *file, 256 GList **mime_list); 257 258 void nemo_file_set_attributes (NemoFile *file, 259 GFileInfo *attributes, 260 NemoFileOperationCallback callback, 261 gpointer callback_data); 262 GFilesystemPreviewType nemo_file_get_filesystem_use_preview (NemoFile *file); 263 264 char * nemo_file_get_filesystem_id (NemoFile *file); 265 266 NemoFile * nemo_file_get_trash_original_file (NemoFile *file); 267 268 /* Permissions. */ 269 gboolean nemo_file_can_get_permissions (NemoFile *file); 270 gboolean nemo_file_can_set_permissions (NemoFile *file); 271 guint nemo_file_get_permissions (NemoFile *file); 272 gboolean nemo_file_can_get_owner (NemoFile *file); 273 gboolean nemo_file_can_set_owner (NemoFile *file); 274 gboolean nemo_file_can_get_group (NemoFile *file); 275 gboolean nemo_file_can_set_group (NemoFile *file); 276 char * nemo_file_get_owner_name (NemoFile *file); 277 char * nemo_file_get_group_name (NemoFile *file); 278 GList * nemo_get_user_names (void); 279 GList * nemo_get_all_group_names (void); 280 GList * nemo_file_get_settable_group_names (NemoFile *file); 281 gboolean nemo_file_can_get_selinux_context (NemoFile *file); 282 char * nemo_file_get_selinux_context (NemoFile *file); 283 284 /* "Capabilities". */ 285 gboolean nemo_file_can_read (NemoFile *file); 286 gboolean nemo_file_can_write (NemoFile *file); 287 gboolean nemo_file_can_execute (NemoFile *file); 288 gboolean nemo_file_can_rename (NemoFile *file); 289 gboolean nemo_file_can_delete (NemoFile *file); 290 gboolean nemo_file_can_trash (NemoFile *file); 291 292 gboolean nemo_file_can_mount (NemoFile *file); 293 gboolean nemo_file_can_unmount (NemoFile *file); 294 gboolean nemo_file_can_eject (NemoFile *file); 295 gboolean nemo_file_can_start (NemoFile *file); 296 gboolean nemo_file_can_start_degraded (NemoFile *file); 297 gboolean nemo_file_can_stop (NemoFile *file); 298 GDriveStartStopType nemo_file_get_start_stop_type (NemoFile *file); 299 gboolean nemo_file_can_poll_for_media (NemoFile *file); 300 gboolean nemo_file_is_media_check_automatic (NemoFile *file); 301 302 void nemo_file_mount (NemoFile *file, 303 GMountOperation *mount_op, 304 GCancellable *cancellable, 305 NemoFileOperationCallback callback, 306 gpointer callback_data); 307 void nemo_file_unmount (NemoFile *file, 308 GMountOperation *mount_op, 309 GCancellable *cancellable, 310 NemoFileOperationCallback callback, 311 gpointer callback_data); 312 void nemo_file_eject (NemoFile *file, 313 GMountOperation *mount_op, 314 GCancellable *cancellable, 315 NemoFileOperationCallback callback, 316 gpointer callback_data); 317 318 void nemo_file_start (NemoFile *file, 319 GMountOperation *start_op, 320 GCancellable *cancellable, 321 NemoFileOperationCallback callback, 322 gpointer callback_data); 323 void nemo_file_stop (NemoFile *file, 324 GMountOperation *mount_op, 325 GCancellable *cancellable, 326 NemoFileOperationCallback callback, 327 gpointer callback_data); 328 void nemo_file_poll_for_media (NemoFile *file); 329 330 /* Basic operations for file objects. */ 331 void nemo_file_set_owner (NemoFile *file, 332 const char *user_name_or_id, 333 NemoFileOperationCallback callback, 334 gpointer callback_data); 335 void nemo_file_set_group (NemoFile *file, 336 const char *group_name_or_id, 337 NemoFileOperationCallback callback, 338 gpointer callback_data); 339 void nemo_file_set_permissions (NemoFile *file, 340 guint32 permissions, 341 NemoFileOperationCallback callback, 342 gpointer callback_data); 343 void nemo_file_rename (NemoFile *file, 344 const char *new_name, 345 NemoFileOperationCallback callback, 346 gpointer callback_data); 347 void nemo_file_cancel (NemoFile *file, 348 NemoFileOperationCallback callback, 349 gpointer callback_data); 350 351 /* Return true if this file has already been deleted. 352 * This object will be unref'd after sending the files_removed signal, 353 * but it could hang around longer if someone ref'd it. 354 */ 355 gboolean nemo_file_is_gone (NemoFile *file); 356 357 /* Return true if this file is not confirmed to have ever really 358 * existed. This is true when the NemoFile object has been created, but no I/O 359 * has yet confirmed the existence of a file by that name. 360 */ 361 gboolean nemo_file_is_not_yet_confirmed (NemoFile *file); 362 363 /* Simple getting and setting top-level metadata. */ 364 char * nemo_file_get_metadata (NemoFile *file, 365 const char *key, 366 const char *default_metadata); 367 GList * nemo_file_get_metadata_list (NemoFile *file, 368 const char *key); 369 void nemo_file_set_metadata (NemoFile *file, 370 const char *key, 371 const char *default_metadata, 372 const char *metadata); 373 void nemo_file_set_metadata_list (NemoFile *file, 374 const char *key, 375 GList *list); 376 void nemo_file_set_desktop_grid_adjusts (NemoFile *file, 377 const char *key, 378 int int_a, 379 int int_b); 380 void nemo_file_get_desktop_grid_adjusts (NemoFile *file, 381 const char *key, 382 int *int_a, 383 int *int_b); 384 /* Covers for common data types. */ 385 gboolean nemo_file_get_boolean_metadata (NemoFile *file, 386 const char *key, 387 gboolean default_metadata); 388 void nemo_file_set_boolean_metadata (NemoFile *file, 389 const char *key, 390 gboolean default_metadata, 391 gboolean metadata); 392 int nemo_file_get_integer_metadata (NemoFile *file, 393 const char *key, 394 int default_metadata); 395 void nemo_file_set_integer_metadata (NemoFile *file, 396 const char *key, 397 int default_metadata, 398 int metadata); 399 400 #define UNDEFINED_TIME ((time_t) (-1)) 401 402 time_t nemo_file_get_time_metadata (NemoFile *file, 403 const char *key); 404 void nemo_file_set_time_metadata (NemoFile *file, 405 const char *key, 406 time_t time); 407 408 409 /* Attributes for file objects as user-displayable strings. */ 410 char * nemo_file_get_string_attribute (NemoFile *file, 411 const char *attribute_name); 412 char * nemo_file_get_string_attribute_q (NemoFile *file, 413 GQuark attribute_q); 414 char * nemo_file_get_string_attribute_with_default (NemoFile *file, 415 const char *attribute_name); 416 char * nemo_file_get_string_attribute_with_default_q (NemoFile *file, 417 GQuark attribute_q); 418 419 /* Matching with another URI. */ 420 gboolean nemo_file_matches_uri (NemoFile *file, 421 const char *uri); 422 423 /* Is the file local? */ 424 gboolean nemo_file_is_local (NemoFile *file); 425 426 /* Comparing two file objects for sorting */ 427 NemoFileSortType nemo_file_get_default_sort_type (NemoFile *file, 428 gboolean *reversed); 429 const gchar * nemo_file_get_default_sort_attribute (NemoFile *file, 430 gboolean *reversed); 431 432 int nemo_file_compare_for_sort (NemoFile *file_1, 433 NemoFile *file_2, 434 NemoFileSortType sort_type, 435 gboolean directories_first, 436 gboolean reversed); 437 int nemo_file_compare_for_sort_by_attribute (NemoFile *file_1, 438 NemoFile *file_2, 439 const char *attribute, 440 gboolean directories_first, 441 gboolean reversed); 442 int nemo_file_compare_for_sort_by_attribute_q (NemoFile *file_1, 443 NemoFile *file_2, 444 GQuark attribute, 445 gboolean directories_first, 446 gboolean reversed); 447 gboolean nemo_file_is_date_sort_attribute_q (GQuark attribute); 448 449 int nemo_file_compare_display_name (NemoFile *file_1, 450 const char *pattern); 451 int nemo_file_compare_location (NemoFile *file_1, 452 NemoFile *file_2); 453 454 /* filtering functions for use by various directory views */ 455 gboolean nemo_file_is_hidden_file (NemoFile *file); 456 gboolean nemo_file_should_show (NemoFile *file, 457 gboolean show_hidden, 458 gboolean show_foreign); 459 GList *nemo_file_list_filter_hidden (GList *files, 460 gboolean show_hidden); 461 462 463 /* Get the URI that's used when activating the file. 464 * Getting this can require reading the contents of the file. 465 */ 466 gboolean nemo_file_is_launcher (NemoFile *file); 467 gboolean nemo_file_is_foreign_link (NemoFile *file); 468 gboolean nemo_file_is_trusted_link (NemoFile *file); 469 gboolean nemo_file_has_activation_uri (NemoFile *file); 470 char * nemo_file_get_activation_uri (NemoFile *file); 471 GFile * nemo_file_get_activation_location (NemoFile *file); 472 473 char * nemo_file_get_drop_target_uri (NemoFile *file); 474 475 GIcon * nemo_file_get_gicon (NemoFile *file, 476 NemoFileIconFlags flags); 477 gchar * nemo_file_get_control_icon_name (NemoFile *file); 478 479 NemoIconInfo * nemo_file_get_icon (NemoFile *file, 480 int size, 481 int max_width, 482 int scale, 483 NemoFileIconFlags flags); 484 GdkPixbuf * nemo_file_get_icon_pixbuf (NemoFile *file, 485 int size, 486 gboolean force_size, 487 int scale, 488 NemoFileIconFlags flags); 489 490 gboolean nemo_file_has_open_window (NemoFile *file); 491 void nemo_file_set_has_open_window (NemoFile *file, 492 gboolean has_open_window); 493 494 /* Thumbnailing handling */ 495 gboolean nemo_file_is_thumbnailing (NemoFile *file); 496 497 /* Convenience functions for dealing with a list of NemoFile objects that each have a ref. 498 * These are just convenient names for functions that work on lists of GtkObject *. 499 */ 500 GList * nemo_file_list_ref (GList *file_list); 501 void nemo_file_list_unref (GList *file_list); 502 void nemo_file_list_free (GList *file_list); 503 GList * nemo_file_list_copy (GList *file_list); 504 GList * nemo_file_list_from_uris (GList *uri_list); 505 GList * nemo_file_list_sort_by_display_name (GList *file_list); 506 void nemo_file_list_call_when_ready (GList *file_list, 507 NemoFileAttributes attributes, 508 NemoFileListHandle **handle, 509 NemoFileListCallback callback, 510 gpointer callback_data); 511 void nemo_file_list_cancel_call_when_ready (NemoFileListHandle *handle); 512 513 char * nemo_file_get_owner_as_string (NemoFile *file, 514 gboolean include_real_name); 515 char * nemo_file_get_type_as_string (NemoFile *file); 516 char * nemo_file_get_detailed_type_as_string (NemoFile *file); 517 518 gchar * nemo_file_construct_tooltip (NemoFile *file, NemoFileTooltipFlags flags); 519 520 gboolean nemo_file_has_thumbnail_access_problem (NemoFile *file); 521 522 gint nemo_file_get_monitor_number (NemoFile *file); 523 void nemo_file_set_monitor_number (NemoFile *file, gint monitor); 524 void nemo_file_get_position (NemoFile *file, GdkPoint *point); 525 void nemo_file_set_position (NemoFile *file, gint x, gint y); 526 gboolean nemo_file_get_is_desktop_orphan (NemoFile *file); 527 void nemo_file_set_is_desktop_orphan (NemoFile *file, gboolean is_desktop_orphan); 528 529 gboolean nemo_file_get_pinning (NemoFile *file); 530 void nemo_file_set_pinning (NemoFile *file, gboolean pin); 531 gboolean nemo_file_get_is_favorite (NemoFile *file); 532 void nemo_file_set_is_favorite (NemoFile *file, gboolean favorite); 533 void nemo_file_set_load_deferred_attrs (NemoFile *file, 534 NemoFileLoadDeferredAttrs load_deferred_attrs); 535 NemoFileLoadDeferredAttrs nemo_file_get_load_deferred_attrs (NemoFile *file); 536 /* Debugging */ 537 void nemo_file_dump (NemoFile *file); 538 539 typedef struct NemoFileDetails NemoFileDetails; 540 541 struct NemoFile { 542 GObject parent_slot; 543 NemoFileDetails *details; 544 }; 545 546 typedef struct { 547 GObjectClass parent_slot; 548 549 /* Subclasses can set this to something other than G_FILE_TYPE_UNKNOWN and 550 it will be used as the default file type. This is useful when creating 551 a "virtual" NemoFile subclass that you can't actually get real 552 information about. For exaple NemoDesktopDirectoryFile. */ 553 GFileType default_file_type; 554 555 /* Called when the file notices any change. */ 556 void (* changed) (NemoFile *file); 557 558 /* Called periodically while directory deep count is being computed. */ 559 void (* updated_deep_count_in_progress) (NemoFile *file); 560 561 /* Virtual functions (mainly used for trash directory). */ 562 void (* monitor_add) (NemoFile *file, 563 gconstpointer client, 564 NemoFileAttributes attributes); 565 void (* monitor_remove) (NemoFile *file, 566 gconstpointer client); 567 void (* call_when_ready) (NemoFile *file, 568 NemoFileAttributes attributes, 569 NemoFileCallback callback, 570 gpointer callback_data); 571 void (* cancel_call_when_ready) (NemoFile *file, 572 NemoFileCallback callback, 573 gpointer callback_data); 574 gboolean (* check_if_ready) (NemoFile *file, 575 NemoFileAttributes attributes); 576 gboolean (* get_item_count) (NemoFile *file, 577 guint *count, 578 gboolean *count_unreadable); 579 NemoRequestStatus (* get_deep_counts) (NemoFile *file, 580 guint *directory_count, 581 guint *file_count, 582 guint *unreadable_directory_count, 583 guint *hidden_count, 584 goffset *total_size); 585 gboolean (* get_date) (NemoFile *file, 586 NemoDateType type, 587 time_t *date); 588 char * (* get_where_string) (NemoFile *file); 589 590 void (* set_metadata) (NemoFile *file, 591 const char *key, 592 const char *value); 593 void (* set_metadata_as_list) (NemoFile *file, 594 const char *key, 595 char **value); 596 gchar * (* get_metadata) (NemoFile *file, 597 const char *key); 598 gchar ** (* get_metadata_as_list) (NemoFile *file, 599 const char *key); 600 void (* mount) (NemoFile *file, 601 GMountOperation *mount_op, 602 GCancellable *cancellable, 603 NemoFileOperationCallback callback, 604 gpointer callback_data); 605 void (* unmount) (NemoFile *file, 606 GMountOperation *mount_op, 607 GCancellable *cancellable, 608 NemoFileOperationCallback callback, 609 gpointer callback_data); 610 void (* eject) (NemoFile *file, 611 GMountOperation *mount_op, 612 GCancellable *cancellable, 613 NemoFileOperationCallback callback, 614 gpointer callback_data); 615 616 void (* start) (NemoFile *file, 617 GMountOperation *start_op, 618 GCancellable *cancellable, 619 NemoFileOperationCallback callback, 620 gpointer callback_data); 621 void (* stop) (NemoFile *file, 622 GMountOperation *mount_op, 623 GCancellable *cancellable, 624 NemoFileOperationCallback callback, 625 gpointer callback_data); 626 627 void (* poll_for_media) (NemoFile *file); 628 } NemoFileClass; 629 630 #endif /* NEMO_FILE_H */ 631