[Sugar-devel] [PATCH] Fix external media mounting (#3911)

Daniel Drake dsd at laptop.org
Tue Sep 25 13:45:52 EDT 2012


The GVolumeMonitor used for mounting devices must not drop out
of scope, otherwise it will be destroyed, and no signals will be
receieved. Move it into global scope.

Update mount and unmount calls for introspection.

Remove dead code from volumestoolbar.
---
 extensions/deviceicon/volume.py      | 10 ++++++----
 src/jarabe/journal/volumestoolbar.py |  7 -------
 src/jarabe/view/palettes.py          |  8 +++++---
 3 files changed, 11 insertions(+), 14 deletions(-)

diff --git a/extensions/deviceicon/volume.py b/extensions/deviceicon/volume.py
index ec7b2e2..fe9e0e3 100644
--- a/extensions/deviceicon/volume.py
+++ b/extensions/deviceicon/volume.py
@@ -34,6 +34,7 @@ from jarabe.frame.frameinvoker import FrameWidgetInvoker
 
 
 _icons = {}
+volume_monitor = None
 
 
 class DeviceView(TrayIcon):
@@ -100,6 +101,7 @@ def setup(tray):
 
 
 def _setup_volumes(tray):
+    global volume_monitor
     volume_monitor = Gio.VolumeMonitor.get()
 
     for volume in volume_monitor.get_volumes():
@@ -121,17 +123,17 @@ def _mount(volume, tray):
     # Follow Nautilus behaviour here
     # since it has the same issue with removable device
     # and it would be good to not invent our own workflow
-    if hasattr(volume, 'should_automount') and not volume.should_automount():
+    if not volume.should_automount():
         return
 
     #TODO: should be done by some other process, like gvfs-hal-volume-monitor
-    #TODO: use volume.should_automount() when it gets into pygtk
     if volume.get_mount() is None and volume.can_mount():
         #TODO: pass None as mount_operation, or better, SugarMountOperation
-        volume.mount(Gtk.MountOperation(tray.get_toplevel()), _mount_cb)
+        volume.mount(0, Gtk.MountOperation(parent=tray.get_toplevel()), None,
+                     _mount_cb, None)
 
 
-def _mount_cb(volume, result):
+def _mount_cb(volume, result, user_data):
     logging.debug('_mount_cb %r %r', volume, result)
     volume.mount_finish(result)
 
diff --git a/src/jarabe/journal/volumestoolbar.py b/src/jarabe/journal/volumestoolbar.py
index 8f4692d..1fc368e 100644
--- a/src/jarabe/journal/volumestoolbar.py
+++ b/src/jarabe/journal/volumestoolbar.py
@@ -251,13 +251,6 @@ class VolumesToolbar(Gtk.Toolbar):
         if button.props.active:
             self.emit('volume-changed', button.mount_point)
 
-    def _unmount_activated_cb(self, menu_item, mount):
-        logging.debug('VolumesToolbar._unmount_activated_cb: %r', mount)
-        mount.unmount(self.__unmount_cb)
-
-    def __unmount_cb(self, source, result):
-        logging.debug('__unmount_cb %r %r', source, result)
-
     def _get_button_for_mount(self, mount):
         mount_point = mount.get_root().get_path()
         for button in self.get_children():
diff --git a/src/jarabe/view/palettes.py b/src/jarabe/view/palettes.py
index 35475d0..89d47db 100644
--- a/src/jarabe/view/palettes.py
+++ b/src/jarabe/view/palettes.py
@@ -246,11 +246,13 @@ class VolumePalette(Palette):
         self.connect('popup', self.__popup_cb)
 
     def __unmount_activate_cb(self, menu_item):
-        self._mount.unmount(self.__unmount_cb)
+        mount_op = Gtk.MountOperation(parent=self.content_box.get_toplevel())
+        self._mount.unmount_with_operation(0, mount_op, None,
+                                           self.__unmount_cb, None)
 
-    def __unmount_cb(self, mount, result):
+    def __unmount_cb(self, mount, result, user_data):
         logging.debug('__unmount_cb %r %r', mount, result)
-        mount.unmount_finish(result)
+        mount.unmount_with_operation_finish(result)
 
     def __popup_cb(self, palette):
         mount_point = self._mount.get_root().get_path()
-- 
1.7.11.4



More information about the Sugar-devel mailing list