forked from AuroraMiddleware/gtk
GtkPlacesSidebar: Stop drives that can be stopped
Removable USB drives or memory sticks should be powered down when the eject button is pressed. For this, we need to call g_drive_stop() instead of g_drive_eject(), provided the drive can be stopped. https://bugzilla.gnome.org/show_bug.cgi?id=723121
This commit is contained in:
parent
04e8d9fa5e
commit
3d17e3f88c
@ -2635,6 +2635,35 @@ unmount_shortcut_cb (GtkMenuItem *item,
|
|||||||
do_unmount_selection (sidebar);
|
do_unmount_selection (sidebar);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
drive_stop_cb (GObject *source_object,
|
||||||
|
GAsyncResult *res,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
GtkPlacesSidebar *sidebar;
|
||||||
|
GError *error;
|
||||||
|
gchar *primary;
|
||||||
|
gchar *name;
|
||||||
|
|
||||||
|
sidebar = user_data;
|
||||||
|
|
||||||
|
error = NULL;
|
||||||
|
if (!g_drive_stop_finish (G_DRIVE (source_object), res, &error))
|
||||||
|
{
|
||||||
|
if (error->code != G_IO_ERROR_FAILED_HANDLED)
|
||||||
|
{
|
||||||
|
name = g_drive_get_name (G_DRIVE (source_object));
|
||||||
|
primary = g_strdup_printf (_("Unable to stop %s"), name);
|
||||||
|
g_free (name);
|
||||||
|
emit_show_error_message (sidebar, primary, error->message);
|
||||||
|
g_free (primary);
|
||||||
|
}
|
||||||
|
g_error_free (error);
|
||||||
|
}
|
||||||
|
|
||||||
|
g_object_unref (sidebar);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
drive_eject_cb (GObject *source_object,
|
drive_eject_cb (GObject *source_object,
|
||||||
GAsyncResult *res,
|
GAsyncResult *res,
|
||||||
@ -2738,8 +2767,14 @@ do_eject (GMount *mount,
|
|||||||
g_volume_eject_with_operation (volume, 0, mount_op, NULL, volume_eject_cb,
|
g_volume_eject_with_operation (volume, 0, mount_op, NULL, volume_eject_cb,
|
||||||
g_object_ref (sidebar));
|
g_object_ref (sidebar));
|
||||||
else if (drive != NULL)
|
else if (drive != NULL)
|
||||||
|
{
|
||||||
|
if (g_drive_can_stop (drive))
|
||||||
|
g_drive_stop (drive, 0, mount_op, NULL, drive_stop_cb,
|
||||||
|
g_object_ref (sidebar));
|
||||||
|
else
|
||||||
g_drive_eject_with_operation (drive, 0, mount_op, NULL, drive_eject_cb,
|
g_drive_eject_with_operation (drive, 0, mount_op, NULL, drive_eject_cb,
|
||||||
g_object_ref (sidebar));
|
g_object_ref (sidebar));
|
||||||
|
}
|
||||||
g_object_unref (mount_op);
|
g_object_unref (mount_op);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2939,35 +2974,6 @@ start_shortcut_cb (GtkMenuItem *item,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
drive_stop_cb (GObject *source_object,
|
|
||||||
GAsyncResult *res,
|
|
||||||
gpointer user_data)
|
|
||||||
{
|
|
||||||
GtkPlacesSidebar *sidebar;
|
|
||||||
GError *error;
|
|
||||||
gchar *primary;
|
|
||||||
gchar *name;
|
|
||||||
|
|
||||||
sidebar = user_data;
|
|
||||||
|
|
||||||
error = NULL;
|
|
||||||
if (!g_drive_stop_finish (G_DRIVE (source_object), res, &error))
|
|
||||||
{
|
|
||||||
if (error->code != G_IO_ERROR_FAILED_HANDLED)
|
|
||||||
{
|
|
||||||
name = g_drive_get_name (G_DRIVE (source_object));
|
|
||||||
primary = g_strdup_printf (_("Unable to stop %s"), name);
|
|
||||||
g_free (name);
|
|
||||||
emit_show_error_message (sidebar, primary, error->message);
|
|
||||||
g_free (primary);
|
|
||||||
}
|
|
||||||
g_error_free (error);
|
|
||||||
}
|
|
||||||
|
|
||||||
g_object_unref (sidebar);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
stop_shortcut_cb (GtkMenuItem *item,
|
stop_shortcut_cb (GtkMenuItem *item,
|
||||||
GtkPlacesSidebar *sidebar)
|
GtkPlacesSidebar *sidebar)
|
||||||
|
Loading…
Reference in New Issue
Block a user