[gnome-maps/wip/fix-geoloc: 7/10] MainWindow: more robust track toggle
- From: Mattias Bengtsson <mattiasb src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-maps/wip/fix-geoloc: 7/10] MainWindow: more robust track toggle
- Date: Thu, 18 Jul 2013 04:47:07 +0000 (UTC)
commit 544077199b32a03729d7b272cfcf71ecb0655c4e
Author: Mattias Bengtsson <mattias jc bengtsson gmail com>
Date: Thu Jul 11 04:07:28 2013 +0200
MainWindow: more robust track toggle
Make the track user location toggle just represent a GSettingsAction.
This makes the code a bit cleaner and also the app a bit more robus in
case of a user fiddling with gsettings while Maps is running.
src/main-window.ui | 1 +
src/mainWindow.js | 62 ++++++++++++++++++++++++++--------------------------
src/mapView.js | 1 +
3 files changed, 33 insertions(+), 31 deletions(-)
---
diff --git a/src/main-window.ui b/src/main-window.ui
index b5082ed..4911841 100644
--- a/src/main-window.ui
+++ b/src/main-window.ui
@@ -40,6 +40,7 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="symbolic-icon-name">find-location-symbolic</property>
+ <property name="action_name">win.track-user-location</property>
</object>
<packing>
<property name="pack_type">start</property>
diff --git a/src/mainWindow.js b/src/mainWindow.js
index ab0ad4f..b6b8978 100644
--- a/src/mainWindow.js
+++ b/src/mainWindow.js
@@ -70,37 +70,20 @@ const MainWindow = new Lang.Class({
this.mapView = new MapView.MapView();
- let trackUserLocation = Application.settings.get_boolean('track-user-location');
-
- let onViewMoved = Lang.bind(this,
- function () {
- if (!this.mapView.userLocationVisible())
- toggle.active = false;
- });
-
- // Disable animation for goto animation on startup only
- let animateGotoUserLocation = !trackUserLocation;
- toggle.connect('toggled', Lang.bind(this,
- function() {
- if (this._onViewMovedId > 0) {
- this.mapView.disconnect(this._onViewMovedId);
- this._onViewMovedId = 0;
- }
-
- if (toggle.active) {
- let goneToUserLocationId = this.mapView.connect('gone-to-user-location', Lang.bind(this,
- function () {
- this.mapView.disconnect(goneToUserLocationId);
- this._onViewMovedId = this.mapView.connect('view-moved', onViewMoved);
- }));
- this.mapView.gotoUserLocation(animateGotoUserLocation);
- if (!animateGotoUserLocation)
- animateGotoUserLocation = true;
- }
-
- Application.settings.set_boolean('track-user-location', toggle.active);
- }));
- toggle.active = trackUserLocation;
+ if(Application.settings.get_boolean('track-user-location'))
+ this.mapView.gotoUserLocation(false);
+
+ this._connectMapMove();
+ this.mapView.connect('going-to-user-location',
+ this._disconnectMapMove.bind(this));
+ this.mapView.connect('gone-to-user-location',
+ this._connectMapMove.bind(this));
+
+ Application.settings.connect('changed::track-user-location', (function() {
+ if(Application.settings.get_boolean('track-user-location')) {
+ this.mapView.gotoUserLocation(true);
+ }
+ }).bind(this));
grid.add(this.mapView);
@@ -127,6 +110,8 @@ const MainWindow = new Lang.Class({
signalHandlers: { activate: this._onMapTypeActivate }
}
], this);
+ this.window.add_action(
+ Application.settings.create_action('track-user-location'));
},
_saveWindowGeometry: function() {
@@ -182,6 +167,21 @@ const MainWindow = new Lang.Class({
}));
},
+ _connectMapMove: function() {
+ if(!this._viewMovedId) {
+ this._viewMovedId = this.mapView.connect('view-moved', (function() {
+ if (!this.mapView.userLocationVisible())
+ Application.settings.set_boolean('track-user-location', false);
+ }).bind(this));
+ }
+ },
+ _disconnectMapMove: function() {
+ if(this._viewMovedId) {
+ this.mapView.disconnect(this._viewMovedId);
+ this._viewMovedId = undefined;
+ }
+ },
+
_onWindowStateEvent: function(widget, event) {
let window = widget.get_window();
let state = window.get_state();
diff --git a/src/mapView.js b/src/mapView.js
index adaff7a..192471f 100644
--- a/src/mapView.js
+++ b/src/mapView.js
@@ -128,6 +128,7 @@ const MapView = new Lang.Class({
},
gotoUserLocation: function(animate) {
+ this.emit('going-to-user-location');
this._userLocation.once("gone-to",
this.emit.bind(this, 'gone-to-user-location'));
this._userLocation.goTo(animate);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]