[gtk+/gtk-3-10] GtkPlacesSidebar: Stop drives that can be stopped



commit 14c9b54b10bc8df13377326c7b9eac008e7673a2
Author: Matthias Clasen <mclasen redhat com>
Date:   Mon Jan 27 21:52:01 2014 -0500

    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

 gtk/gtkplacessidebar.c |   68 ++++++++++++++++++++++++++----------------------
 1 files changed, 37 insertions(+), 31 deletions(-)
---
diff --git a/gtk/gtkplacessidebar.c b/gtk/gtkplacessidebar.c
index 71e7948..b9ab483 100644
--- a/gtk/gtkplacessidebar.c
+++ b/gtk/gtkplacessidebar.c
@@ -2636,6 +2636,35 @@ unmount_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
 drive_eject_cb (GObject      *source_object,
                 GAsyncResult *res,
                 gpointer      user_data)
@@ -2738,8 +2767,14 @@ do_eject (GMount           *mount,
     g_volume_eject_with_operation (volume, 0, mount_op, NULL, volume_eject_cb,
                                    g_object_ref (sidebar));
   else if (drive != NULL)
-    g_drive_eject_with_operation (drive, 0, mount_op, NULL, drive_eject_cb,
-                                  g_object_ref (sidebar));
+    {
+      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_object_ref (sidebar));
+    }
   g_object_unref (mount_op);
 }
 
@@ -2940,35 +2975,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
 stop_shortcut_cb (GtkMenuItem      *item,
                   GtkPlacesSidebar *sidebar)
 {


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]