File nautilus-open-unmounted-drive-error-bug264956.patch of Package nautilus
diff -Npur nau_old/src/file-manager/fm-directory-view.c nau_new/src/file-manager/fm-directory-view.c
--- nau_old/src/file-manager/fm-directory-view.c 2007-08-17 13:32:20.000000000 +0800
+++ nau_new/src/file-manager/fm-directory-view.c 2007-08-17 13:36:00.000000000 +0800
@@ -280,8 +280,14 @@ typedef struct {
gboolean mounting;
gboolean cancelled;
gulong file_changed_id;
+ GnomeVFSDrive *drive;
} ActivateParameters;
+typedef struct {
+ ActivateParameters *parameters;
+ GnomeVFSDrive *drive;
+} DriveBeingMounted;
+
enum {
GNOME_COPIED_FILES,
UTF8_STRING
@@ -7455,41 +7461,42 @@ static void
activation_file_changed_after_drive_mounted (NautilusFile *file,
gpointer data)
{
+ DriveBeingMounted *drive_being_mounted;
ActivateParameters *parameters;
-
- parameters = data;
+
+ drive_being_mounted = data;
+ parameters = drive_being_mounted->parameters;
g_signal_handler_disconnect (parameters->file, parameters->file_changed_id);
parameters->file_changed_id = 0;
activate_activation_uri_ready_callback (parameters->file, parameters);
+ gnome_vfs_drive_unref (drive_being_mounted->drive);
+ g_free (drive_being_mounted);
}
+/*dliang mark */
static void
activation_drive_mounted_callback (gboolean succeeded,
char *error,
char *detailed_error,
gpointer callback_data)
{
+ DriveBeingMounted *drive_being_mounted;
ActivateParameters *parameters;
-
- parameters = callback_data;
+ drive_being_mounted = callback_data;
+ parameters = drive_being_mounted->parameters;
parameters->mounted = TRUE;
parameters->mounting = FALSE;
if (succeeded && !parameters->cancelled) {
- GnomeVFSDrive *drive;
-
- /* fprintf (stderr, "LOG: activation_drive_mounted_callback(): drive got mounted successfully\n"); */
-
- drive = nautilus_file_get_drive (parameters->file); /* we don't own this reference */
- g_assert (drive != NULL);
-
- if (gnome_vfs_drive_is_mounted (drive)) {
+ if (gnome_vfs_drive_is_mounted (drive_being_mounted->drive)) {
/* fprintf (stderr, "LOG: activation_drive_mounted_callback(): drive is really mounted; activating...\n"); */
activate_activation_uri_ready_callback (parameters->file,
parameters);
+ gnome_vfs_drive_unref (drive_being_mounted->drive);
+ g_free (drive_being_mounted);
} else {
/* Hack alert: Here, the drive is already mounted, but
* gnome-vfs-volume-monitor thinks that it is not. This
@@ -7504,7 +7511,7 @@ activation_drive_mounted_callback (gbool
parameters->file_changed_id =
g_signal_connect (parameters->file, "changed",
G_CALLBACK (activation_file_changed_after_drive_mounted),
- parameters);
+ drive_being_mounted);
}
} else {
/* fprintf (stderr, "LOG: activation_drive_mounted_callback(): drive didn't get mounted\n"); */
@@ -7516,10 +7523,10 @@ activation_drive_mounted_callback (gbool
detailed_error,
NULL);
}
-
+ gnome_vfs_drive_unref (drive_being_mounted->drive);
nautilus_file_unref (parameters->file);
-
g_free (parameters);
+ g_free (drive_being_mounted);
}
}
@@ -7555,8 +7562,13 @@ activate_activation_uri_ready_callback (
if (drive != NULL &&
!gnome_vfs_drive_is_mounted (drive)) {
parameters->mounting = TRUE;
+
+ DriveBeingMounted *drive_being_mounted;
+ drive_being_mounted = g_new (DriveBeingMounted, 1);
+ drive_being_mounted->parameters = parameters;
+ drive_being_mounted->drive = gnome_vfs_drive_ref (drive);
/* fprintf (stderr, "LOG: activate_activation_uri_ready_callback() calling gnome_vfs_drive_mount()\n"); */
- gnome_vfs_drive_mount (drive, activation_drive_mounted_callback, callback_data);
+ gnome_vfs_drive_mount (drive, activation_drive_mounted_callback, drive_being_mounted);
return;
}
}