[gnome-shell/hotplug: 13/13] automount: handle the drive-eject-button signal



commit a904101b057cfb7432b7dfdb2c24b8c7466989fc
Author: Cosimo Cecchi <cosimoc gnome org>
Date:   Mon Jun 27 12:13:54 2011 -0400

    automount: handle the drive-eject-button signal
    
    The implementation is untested, as the signal is not emitted from the
    Gdu GVfs volume monitor yet.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=653520

 js/ui/automountManager.js |   34 ++++++++++++++++++++++++++++++++++
 1 files changed, 34 insertions(+), 0 deletions(-)
---
diff --git a/js/ui/automountManager.js b/js/ui/automountManager.js
index 883324c..82c87a8 100644
--- a/js/ui/automountManager.js
+++ b/js/ui/automountManager.js
@@ -104,6 +104,9 @@ AutomountManager.prototype = {
         this._volumeMonitor.connect('drive-disconnected',
                                     Lang.bind(this,
                                               this._onDriveDisconnected));
+        this._volumeMonitor.connect('drive-eject-button',
+                                    Lang.bind(this,
+                                              this._onDriveEjectButton));
 
         Mainloop.idle_add(Lang.bind(this, this._startupMountAll));
     },
@@ -154,6 +157,37 @@ AutomountManager.prototype = {
         global.play_theme_sound(0, 'device-removed-media');        
     },
 
+    _onDriveEjectButton: function(monitor, drive) {
+        // TODO: this code path is not tested, as the GVfs volume monitor
+        // doesn't emit this signal just yet.
+        if (!this.ckListener.sessionActive)
+            return;
+
+        // we force stop/eject in this case, so we don't have to pass a
+        // mount operation object
+        if (drive.can_stop()) {
+            drive.stop
+                (Gio.MountUnmountFlags.FORCE, null, null,
+                 Lang.bind(this, function(drive, res) {
+                     try {
+                         drive.stop_finish(res);
+                     } catch (e) {
+                         log("Unable to stop the drive after drive-eject-button " + e.toString());
+                     }
+                 }));
+        } else if (drive.can_eject()) {
+            drive.eject_with_operation 
+                (Gio.MountUnmountFlags.FORCE, null, null,
+                 Lang.bind(this, function(drive, res) {
+                     try {
+                         drive.eject_with_operation_finish(res);
+                     } catch (e) {
+                         log("Unable to eject the drive after drive-eject-button " + e.toString());
+                     }
+                 }));
+        }
+    },
+
     _onVolumeAdded: function(monitor, volume) {
         this._checkAndMountVolume(volume, true, true);
     },



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