summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Linus Torvalds <torvalds@linux-foundation.org>2013-02-10 12:06:18 -0800
committerGravatar Dirk Hohndel <dirk@hohndel.org>2013-02-10 12:10:26 -0800
commit05990b107de746064486f4f1c79a2383e1dfd63f (patch)
tree3c7dd65a31dcdae03c07e1d688fb1edd78e58ded
parent68eca79dfdaec7dfd1c534f1d8daf8421ea94579 (diff)
downloadsubsurface-05990b107de746064486f4f1c79a2383e1dfd63f.tar.gz
Fix saving of changed GPS entry
We can't use gps_changed() in the gps_map_callback function, because that will actually change the GPS data in the dive being edited, which in turn will then cause us to later (when we *really* want to change it) not match the master dive data any more, and think we shouldn't edit the dive at all. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r--info.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/info.c b/info.c
index 6a568120f..46b370892 100644
--- a/info.c
+++ b/info.c
@@ -669,22 +669,27 @@ static void update_gps_entry(int lat, int lon)
}
}
+#if HAVE_OSM_GPS_MAP
static void update_gps_entry_callback(float lat, float lon)
{
update_gps_entry(lat * 1000000, lon * 1000000);
+ location_update.set_by_hand = 1;
}
-#if HAVE_OSM_GPS_MAP
static gboolean gps_map_callback(GtkWidget *w, gpointer data)
{
+ double latitude, longitude;
const char *gps_text = NULL;
- struct dive *dive = location_update.dive;
+ struct dive fake_dive;
+
+ memset(&fake_dive, 0, sizeof(fake_dive));
if (location_update.entry) {
gps_text = gtk_entry_get_text(location_update.entry);
- (void)gps_changed(dive, NULL, gps_text);
+ parse_gps_text(gps_text, &latitude, &longitude);
+ fake_dive.latitude.udeg = rint(latitude * 1000000);
+ fake_dive.longitude.udeg = rint(longitude * 1000000);
}
- show_gps_location(dive, update_gps_entry_callback);
- location_update.set_by_hand = 1;
+ show_gps_location(&fake_dive, update_gps_entry_callback);
return TRUE;
}
#endif