automount: only autorun volumes marked as allowed

Port code from g-s-d to mark volumes as allowed for autorun, and check
for it when running the notification.

https://bugzilla.gnome.org/show_bug.cgi?id=653520
This commit is contained in:
Cosimo Cecchi 2011-06-22 09:45:03 -04:00
parent 6786aee5ed
commit 98327b0c13
2 changed files with 30 additions and 8 deletions

View File

@ -13,6 +13,8 @@ const ScreenSaver = imports.misc.screenSaver;
const SETTINGS_SCHEMA = 'org.gnome.desktop.media-handling'; const SETTINGS_SCHEMA = 'org.gnome.desktop.media-handling';
const SETTING_ENABLE_AUTOMOUNT = 'automount'; const SETTING_ENABLE_AUTOMOUNT = 'automount';
const AUTORUN_EXPIRE_TIMEOUT_SECS = 10;
const ConsoleKitSessionIface = { const ConsoleKitSessionIface = {
name: 'org.freedesktop.ConsoleKit.Session', name: 'org.freedesktop.ConsoleKit.Session',
methods: [{ name: 'IsActive', methods: [{ name: 'IsActive',
@ -128,13 +130,6 @@ AutomountManager.prototype = {
params = Params.parse(params, { checkSession: true, params = Params.parse(params, { checkSession: true,
useMountOp: true }); useMountOp: true });
if (!this._settings.get_boolean(SETTING_ENABLE_AUTOMOUNT))
return;
if (!volume.should_automount() ||
!volume.can_mount())
return;
if (params.checkSession) { if (params.checkSession) {
// if we're not in the current ConsoleKit session, // if we're not in the current ConsoleKit session,
// don't attempt automount // don't attempt automount
@ -149,16 +144,32 @@ AutomountManager.prototype = {
} }
} }
if (!this._settings.get_boolean(SETTING_ENABLE_AUTOMOUNT) ||
!volume.should_automount() ||
!volume.can_mount()) {
// allow the autorun to run anyway; this can happen if the
// mount gets added programmatically later, even if
// should_automount() or can_mount() are false, like for
// blank optical media.
this._allowAutorun(volume);
this._allowAutorunExpire(volume);
return;
}
// TODO: mount op // TODO: mount op
this._mountVolume(volume, null); this._mountVolume(volume, null);
}, },
_mountVolume: function(volume, operation) { _mountVolume: function(volume, operation) {
this._allowAutorun(volume);
volume.mount(0, operation, null, volume.mount(0, operation, null,
Lang.bind(this, this._onVolumeMounted)); Lang.bind(this, this._onVolumeMounted));
}, },
_onVolumeMounted: function(volume, res) { _onVolumeMounted: function(volume, res) {
this._allowAutorunExpire(volume);
try { try {
volume.mount_finish(res); volume.mount_finish(res);
} catch (e) { } catch (e) {
@ -172,5 +183,16 @@ AutomountManager.prototype = {
this._volumeQueue.filter(function(element) { this._volumeQueue.filter(function(element) {
return (element != volume); return (element != volume);
}); });
},
_allowAutorun: function(volume) {
volume.allowAutorun = true;
},
_allowAutorunExpire: function(volume) {
Mainloop.timeout_add_seconds(AUTORUN_EXPIRE_TIMEOUT_SECS, function() {
volume.allowAutorun = false;
return false;
});
} }
} }

View File

@ -30,7 +30,7 @@ function ignoreAutorunForMount(mount) {
let volume = mount.get_volume(); let volume = mount.get_volume();
if ((root.is_native() && !isMountRootHidden(root)) || if ((root.is_native() && !isMountRootHidden(root)) ||
(volume && volume.should_automount())) (volume && volume.allowAutorun && volume.should_automount()))
return false; return false;
return true; return true;