Allow interaction when unmounting mounts

For details, see bug 587482. The new api:

 - Provide new _with_operation() variants of all unmount and eject methods

 - Add GMountOperation::show-processes signal
   - this can be used to show processes blocking an unmount operation

 - Deprecate all unmount and eject methods

 - Add g_drive_can_start_degraded() method
   - this is to avoid auto-starting degraded drives

 - Make g_drive_stop() resp. g_file_stop_mountable() take a GMountOperation
   - these ops were recently added and not yet public API so it's fine
     to change how they work

 - Provide a way to poll mountable files, e.g. g_file_poll_mountable()

 - Add some missing file attributes for mountable files
  - G_FILE_ATTRIBUTE_MOUNTABLE_UNIX_DEVICE_FILE
    - needed for the GDU Nautilus extensions to format a volume
  - G_FILE_ATTRIBUTE_MOUNTABLE_CAN_START_DEGRADED:
    - mimics g_drive_can_start_degraded()
  - G_FILE_ATTRIBUTE_MOUNTABLE_CAN_POLL:
    - mimics g_drive_can_poll_for_media()
  - G_FILE_ATTRIBUTE_MOUNTABLE_IS_MEDIA_CHECK_AUTOMATIC
    - mimics g_drive_is_media_check_automatic()
This commit is contained in:
David Zeuthen
2009-07-05 21:59:38 -04:00
committed by Matthias Clasen
parent c85ff0c750
commit 99a1c47343
16 changed files with 1027 additions and 45 deletions

View File

@@ -99,6 +99,8 @@ G_BEGIN_DECLS
* @should_automount: Returns %TRUE if the #GVolume should be automatically mounted.
* @get_activation_root: Returns the activation root for the #GVolume if it is known in advance or %NULL if
* it is not known.
* @eject_with_operation: Starts ejecting a #GVolume using a #GMountOperation. Since 2.22.
* @eject_with_operation_finish: Finishes an eject operation using a #GMountOperation. Since 2.22.
*
* Interface for implementing operations for mountable volumes.
**/
@@ -148,6 +150,15 @@ struct _GVolumeIface
GFile * (* get_activation_root) (GVolume *volume);
void (* eject_with_operation) (GVolume *volume,
GMountUnmountFlags flags,
GMountOperation *mount_operation,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean (* eject_with_operation_finish) (GVolume *volume,
GAsyncResult *result,
GError **error);
};
GType g_volume_get_type (void) G_GNUC_CONST;
@@ -169,6 +180,7 @@ void g_volume_mount (GVolume *volume,
gboolean g_volume_mount_finish (GVolume *volume,
GAsyncResult *result,
GError **error);
#ifndef G_DISABLE_DEPRECATED
void g_volume_eject (GVolume *volume,
GMountUnmountFlags flags,
GCancellable *cancellable,
@@ -177,12 +189,23 @@ void g_volume_eject (GVolume *volume,
gboolean g_volume_eject_finish (GVolume *volume,
GAsyncResult *result,
GError **error);
#endif
char * g_volume_get_identifier (GVolume *volume,
const char *kind);
char ** g_volume_enumerate_identifiers (GVolume *volume);
GFile * g_volume_get_activation_root (GVolume *volume);
void g_volume_eject_with_operation (GVolume *volume,
GMountUnmountFlags flags,
GMountOperation *mount_operation,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean g_volume_eject_with_operation_finish (GVolume *volume,
GAsyncResult *result,
GError **error);
G_END_DECLS
#endif /* __G_VOLUME_H__ */