weather: Take global location switch into account

The setting to globally disable location settings altogether isn't
handled by the geoclue service itself, but by the authorization
agent. This means that:

 - it doesn't apply to system components
   (which gnome-shell is now considered[0])
 - it doesn't apply once the geoclue connection
   has been authorized

However users can reasonably expect that we won't use location services
after they disabled them, so handle the setting explicitly.

[0] https://cgit.freedesktop.org/geoclue/commit/?id=a4cef6c0ad08

https://bugzilla.gnome.org/show_bug.cgi?id=780252
This commit is contained in:
Florian Müllner 2017-03-19 14:31:19 +01:00
parent 7c9f76944b
commit 74e1058183

View File

@ -28,6 +28,10 @@ const WeatherClient = new Lang.Class({
this._gclueStarting = false;
this._gclueLocationChangedId = 0;
this._locationSettings = new Gio.Settings({ schema_id: 'org.gnome.system.location' });
this._locationSettings.connect('changed::enabled',
Lang.bind(this, this._updateAutoLocation));
this._world = GWeather.Location.get_world();
let providers = GWeather.Provider.METAR |
@ -82,7 +86,8 @@ const WeatherClient = new Lang.Class({
},
get _useAutoLocation() {
return this._autoLocationRequested;
return this._autoLocationRequested &&
this._locationSettings.get_boolean('enabled');
},
_loadInfo: function() {
@ -174,6 +179,10 @@ const WeatherClient = new Lang.Class({
this._autoLocationRequested = useAutoLocation;
this._updateAutoLocation();
},
_updateAutoLocation: function() {
this._updateLocationMonitoring();
if (this._useAutoLocation)