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:
parent
6786aee5ed
commit
98327b0c13
@ -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;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user