Bug 709574 - gnome-shell-extensions-drive-menu not ejecting devices & detecting hard drive partitions as external device
gnome-shell-extensions-drive-menu not ejecting devices & detecting hard drive...
Status: CLOSED WONTFIX
Product: Fedora
Classification: Fedora
Component: gnome-shell-extensions (Show other bugs)
15
i686 Unspecified
unspecified Severity unspecified
: ---
: ---
Assigned To: Rahul Sundaram
Fedora Extras Quality Assurance
:
Depends On:
Blocks:
  Show dependency treegraph
 
Reported: 2011-05-31 23:59 EDT by Pratyush Sahay
Modified: 2012-08-07 13:17 EDT (History)
10 users (show)

See Also:
Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of:
Environment:
Last Closed: 2012-08-07 13:17:49 EDT
Type: ---
Regression: ---
Mount Type: ---
Documentation: ---
CRM:
Verified Versions:
Category: ---
oVirt Team: ---
RHEL 7.3 requirements from Atomic Host:


Attachments (Terms of Use)
Patch for /usr/share/gnome-shell/js/ui/placeDisplay.js to update eject/unmount (1.07 KB, patch)
2011-07-14 14:31 EDT, Jim Helm
no flags Details | Diff

  None (edit)
Description Pratyush Sahay 2011-05-31 23:59:16 EDT
Description of problem: 
1) Clicking on the external device name in the menu of this extension triggers nautilus to open the device, whereas the expected behaviour is unmounting the device.

2) Even the hard drive partitions mounted via /etc/fstab are being shown in the menu. Dont think its the expected behaviour, and hard drive partitions werent being shown until the last update.

3) Also, probably because of (2) above, the drive-menu icon is being shown perennially even without any external drives being mounted. Earlier, the icon used to get triggered to show up only when an external device was mounted.


Version-Release number of selected component (if applicable):
gnome-shell-3.0.2-1.fc15.i686
gnome-shell-extensions-drive-menu-3.0.2-1.g63dd27cgit.fc15.noarch


How reproducible: Always, since the last update


Steps to Reproduce:
1. Mount external device, and click on the drive-menu icon to try to unmount.
2. Having any mounted hard drive partitions via /etc/fstab
3.
  
Actual results:


Expected results:


Additional info:
Comment 1 Timur Kristóf 2011-06-01 07:23:46 EDT
Hello,

The drive-menu extension does work the way you described.

- If you click on a menu item, it opens the hard drive in Nautilus
- It unmounts the device when you click on the unmount icon

I don't know about /etc/fstab, but the rest of what you described has been working for me as you described, ever since I fist installed this extension.
Comment 2 Pratyush Sahay 2011-06-01 08:15:11 EDT
I think i didnt explain point (1) properly. Am doing it here again :

Description of problem: 
1) Clicking on the external device "name" in the menu of this extension triggers
nautilus to open the device(as expected). But, clicking on the "unmount icon" is also triggering nautilus,whereas the expected behaviour is unmounting the device.

Until the last update, it was working quite normal. But ever since these problems have cropped up.


(In reply to comment #1)
> Hello,
> 
> The drive-menu extension does work the way you described.
> 
> - If you click on a menu item, it opens the hard drive in Nautilus
> - It unmounts the device when you click on the unmount icon
> 
> I don't know about /etc/fstab, but the rest of what you described has been
> working for me as you described, ever since I fist installed this extension.
Comment 3 Jim Helm 2011-06-01 21:14:45 EDT
http://git.gnome.org/browse/gnome-shell-extensions/commit/?id=63dd27c4f593fd7c75aa9508a5ff6d0745762ff4

See comments from above on the recent rewrite that is at the root of this.  It's using mounts instead of drives and different calls to do the unmount/eject... clicking on the eject icon results in the following showing up in  ~/.xsession-errors .  Looks like Mount.eject() is not being exposed to the gnome-shell js binding.

    JS ERROR: !!!   Exception was: TypeError: this._mount.eject is not a function
    JS ERROR: !!!     lineNumber = '110'
    JS ERROR: !!!     fileName = '/usr/share/gnome-shell/js/ui/placeDisplay.js'
    JS ERROR: !!!     stack = '()@/usr/share/gnome-shell/js/ui/placeDisplay.js:110
([object _private_St_Button],1)@/usr/share/gnome-shell/extensions/drive-menu@gnome-shell-extensions.gnome.org/extension.js:39
([object _private_St_Button],1)@/usr/share/gjs-1.0/lang.js:110
'
    JS ERROR: !!!     message = 'this._mount.eject is not a function'

I haven't gotten as far as finding how gjs is exposed to the Gio class hierarchy in C... hopefully the last commiter knows more and can explain how to fix it... or an alternate method for getting at the eject() method (which I have not been able to find on any drive/volume/mount objects using looking glass).
Comment 4 Jim Helm 2011-06-01 22:10:03 EDT
Ok... this works... maybe it'll make its way upstream:

/usr/share/gnome-shell/js/ui:
$ diff -u placeDisplay.js.orig placeDisplay.js
--- placeDisplay.js.orig	2011-06-01 18:58:24.246003007 -0700
+++ placeDisplay.js	2011-06-01 19:07:55.075053659 -0700
@@ -107,7 +107,7 @@
             return;
 
         if (this._mount.can_eject())
-            this._mount.eject(0, null, Lang.bind(this, this._removeFinish));
+            this._mount.eject_with_operation(0, null, null, Lang.bind(this, this._removeFinish));
         else
             this._mount.unmount(0, null, Lang.bind(this, this._removeFinish));
     },
@@ -115,7 +115,7 @@
     _removeFinish: function(o, res, data) {
         try {
             if (this._mount.can_eject())
-                this._mount.eject_finish(res);
+                this._mount.eject_with_operation_finish(res,null);
             else
                 this._mount.unmount_finish(res);
         } catch (e) {
Comment 5 Tim Niemueller 2011-06-20 08:37:04 EDT
Can this be integrated into the package as a patch until it is upstream, please.
Comment 6 Jim Helm 2011-06-20 15:59:12 EDT
I've not run into any major issues with the patch yet.  The one minor annoyance is that sometimes it returns an error that it couldn't unmount... when the unmount/eject actually did work.  I haven't tried to track it down, as it doesn't happen all the time.
Comment 7 Yunier Soler Franco 2011-06-22 10:18:38 EDT
Unmount/Eject OK  

/usr/share/gnome-shell/js/ui:
diff -u placeDisplay.js.orig placeDisplay.js
--- placeDisplay.js.orig	2011-06-22 10:15:53.252859820 -0400
+++ placeDisplay.js	2011-06-22 10:04:15.869401688 -0400
@@ -109,7 +109,7 @@
         if (this._mount.can_eject())
             this._mount.eject_with_operation(0, null, null, Lang.bind(this, this._removeFinish));
         else
-            this._mount.unmount(0, null, Lang.bind(this, this._removeFinish));
+            this._mount.unmount_with_operation(0, null, null, Lang.bind(this, this._removeFinish));
     },
 
     _removeFinish: function(o, res, data) {
@@ -117,7 +117,7 @@
             if (this._mount.can_eject())
                 this._mount.eject_with_operation_finish(res,null);
             else
-                this._mount.unmount_finish(res);
+                this._mount.unmount_with_operation_finish(res,null);
         } catch (e) {
             let message = _("Failed to unmount '%s'").format(o.get_name());
             Main.overview.shellInfo.setMessage(message,
Comment 8 Jim Helm 2011-06-22 20:26:15 EDT
Ah. I didn't catch the umount changes in addition to the eject changes... thx.
Comment 9 Jim Helm 2011-06-22 20:37:24 EDT
ok. I did already have those changes locally... but for some reason didn't capture it in the patch I posted above. Apologies for that.

Full patch for gnome-shell-3.0.2-1.fc15.x86_64.rpm would be:



--- placeDisplay.js.orig	2011-05-25 13:00:44.000000000 -0700
+++ placeDisplay.js	2011-06-22 17:36:45.823700699 -0700
@@ -107,17 +107,17 @@
             return;
 
         if (this._mount.can_eject())
-            this._mount.eject(0, null, Lang.bind(this, this._removeFinish));
+            this._mount.eject_with_operation(0, null, null, Lang.bind(this, this._removeFinish));
         else
-            this._mount.unmount(0, null, Lang.bind(this, this._removeFinish));
+            this._mount.unmount_with_operation(0, null, null, Lang.bind(this, this._removeFinish));
     },
 
     _removeFinish: function(o, res, data) {
         try {
             if (this._mount.can_eject())
-                this._mount.eject_finish(res);
+                this._mount.eject_with_operation_finish(res,null);
             else
-                this._mount.unmount_finish(res);
+                this._mount.unmount_with_operations_finish(res,null);
         } catch (e) {
             let message = _("Failed to unmount '%s'").format(o.get_name());
             Main.overview.shellInfo.setMessage(message,
Comment 10 Eduardo VM 2011-07-04 01:00:46 EDT
I still have this bug. Is there any chance to patch under i686 too?
Comment 11 JokeDude 2011-07-12 04:54:56 EDT
Hi, does someone have a working rpm (64bit) version of the drive menu extension, I am not sure how to patch it, or is the problem actually in the gnome-shell itself?

My current gnome-shell is 3.0.2-4 and the drive-menu extension is 3.0.2-1

I did try and copy the patch in Comment 9, to a file and then patch the gnome-shell-3.0.2-1.fc15.x86_64.rpm, but it gave me an error message, and did nothing other than create a reject file.

Any help to fix this would be appreciated.
Comment 12 JokeDude 2011-07-12 05:11:42 EDT
(In reply to comment #11)
> Hi, does someone have a working rpm (64bit) version of the drive menu
> extension, I am not sure how to patch it, or is the problem actually in the
> gnome-shell itself?
> 
> My current gnome-shell is 3.0.2-4 and the drive-menu extension is 3.0.2-1
> 
> I did try and copy the patch in Comment 9, to a file and then patch the
> gnome-shell-3.0.2-1.fc15.x86_64.rpm, but it gave me an error message, and did
> nothing other than create a reject file.
> 
> Any help to fix this would be appreciated.

Hmmm, did some more digging, had a look at the .xsession-errors and then found the placeDisplay.js location, and patched that file directly using the patch in comment 9, and it worked, so ignore my comment 11.

But I now have the problem where an error pops-up saying it failed to unmount the device, but it does as per comment 6. Has this issue been resolved yet?
Comment 13 Jim Helm 2011-07-13 18:41:13 EDT
Not by me... I'm not a maintainer - just a user - and now that it's working (ejecting my dvds), I've just been ignoring the "error".  It's not worth it to me to spend the time to fix that particular quirk.

And sorry about the patch... guess it would have been good idea to explicitly mention how to patch the placeDisplay.js file.

put the patch contents in file (e.g: /tmp/placeDisplay.patch).
# as root
cd /usr/share/gnome-shell/js/ui
patch placeDisplay.js < /tmp/placeDisplay.patch
Comment 14 JokeDude 2011-07-14 06:08:42 EDT
Hi Jim, I think I found the problem regarding the error message.
It looks like a typo in the patch.

The last line that starts with a + reads:

+                this._mount.unmount_with_operations_finish(res,null);

and I am sure it should read:

+                this._mount.unmount_with_operation_finish(res,null);

(singular operation)

I made the change to placeDisplay.js and since then have not had any error messages. Could you please confirm this?
Comment 15 Jim Helm 2011-07-14 14:31:01 EDT
Created attachment 513241 [details]
Patch for /usr/share/gnome-shell/js/ui/placeDisplay.js to update eject/unmount

g_volume_eject and g_volume_eject_finish (same for unmount) were deprecated in Gio 2.22, and apparently have been removed completely in the current version.  This patch updates the remove: and _removeFinish: methods of PlaceDeviceInfo to use the new *_with_operation g_volume methods.
Comment 16 Jim Helm 2011-07-14 14:32:23 EDT
Thanks JokeDude.  That explains the intermittent failures - if the volume was already unmounted, it would eject with no errors.  Updated patch attached to ticket.  Just need to get the fix pushed to the upstream source now.
Comment 17 Fedora End Of Life 2012-08-07 13:17:51 EDT
This message is a notice that Fedora 15 is now at end of life. Fedora
has stopped maintaining and issuing updates for Fedora 15. It is
Fedora's policy to close all bug reports from releases that are no
longer maintained. At this time, all open bugs with a Fedora 'version'
of '15' have been closed as WONTFIX.

(Please note: Our normal process is to give advanced warning of this
occurring, but we forgot to do that. A thousand apologies.)

Package Maintainer: If you wish for this bug to remain open because you
plan to fix it in a currently maintained version, feel free to reopen
this bug and simply change the 'version' to a later Fedora version.

Bug Reporter: Thank you for reporting this issue and we are sorry that
we were unable to fix it before Fedora 15 reached end of life. If you
would still like to see this bug fixed and are able to reproduce it
against a later version of Fedora, you are encouraged to click on
"Clone This Bug" (top right of this page) and open it against that
version of Fedora.

Although we aim to fix as many bugs as possible during every release's
lifetime, sometimes those efforts are overtaken by events. Often a
more recent Fedora release includes newer upstream software that fixes
bugs or makes them obsolete.

The process we are following is described here:
http://fedoraproject.org/wiki/BugZappers/HouseKeeping

Note You need to log in before you can comment on or make changes to this bug.