diff -ur foxtrotgps-1.1.1-original/src/callbacks.c foxtrotgps-1.1.1-patched/src/callbacks.c --- foxtrotgps-1.1.1-original/src/callbacks.c Thu Jun 14 06:41:11 2012 +++ foxtrotgps-1.1.1-patched/src/callbacks.c Thu Aug 29 23:16:13 2013 @@ -775,6 +775,11 @@ trip_starttime = 0; trip_time = 0; trip_maxspeed = 0; + + g_queue_free(trackpoint_list); + trackpoint_list = g_queue_new(); + + repaint_all(); } void @@ -1336,10 +1341,19 @@ { trip_counter_on = (trip_counter_on) ? FALSE : TRUE; - if(trip_counter_on) + if(trip_counter_on) { gtk_button_set_label (button, _("Stop")); - else + } + else { + if (trackpoint_list->tail != NULL) { + if (trackpoint_list->length > TRACKPOINT_LIST_MAX_LENGTH) + g_free(g_queue_pop_head(trackpoint_list)); + + g_queue_push_tail(trackpoint_list, NULL); + } + gtk_button_set_label (button, _("Resume")); + } } void diff -ur foxtrotgps-1.1.1-original/src/gps_functions.c foxtrotgps-1.1.1-patched/src/gps_functions.c --- foxtrotgps-1.1.1-original/src/gps_functions.c Thu Jun 14 06:41:11 2012 +++ foxtrotgps-1.1.1-patched/src/gps_functions.c Thu Aug 29 23:16:13 2013 @@ -169,7 +169,7 @@ 58,58); - if (lat_tmp && lon_tmp) + if (lat_tmp && lon_tmp && trip_counter_on) gdk_draw_line(pixmap, gc, last_x, last_y, x, y); @@ -267,7 +267,7 @@ trip_delta = 0; } - if(trip_delta > TRIP_DELTA_MIN) + if(trip_delta > TRIP_DELTA_MIN && trip_counter_on) { tp->time = gpsdata->fix.time; tp->lat = lat; diff -ur foxtrotgps-1.1.1-original/src/tracks.c foxtrotgps-1.1.1-patched/src/tracks.c --- foxtrotgps-1.1.1-original/src/tracks.c Thu Jun 14 06:41:11 2012 +++ foxtrotgps-1.1.1-patched/src/tracks.c Thu Aug 29 23:16:13 2013 @@ -85,67 +85,49 @@ { counter++; - if (counter % modulo == 0) - { - j++; - if (j > 300) + if (list->data == NULL) { + is_line = FALSE; + } + else { + if (counter % modulo == 0 + || list->prev != NULL + && list->prev->data == NULL) { - break; - } + j++; + if (j > 300) + { + break; + } - trackpoint_t *tp = list->data; + trackpoint_t *tp = list->data; - lat = tp->lat; - lon = tp->lon; + lat = tp->lat; + lon = tp->lon; + + pixel_x = lon2pixel(global_zoom, lon); + pixel_y = lat2pixel(global_zoom, lat); + x = pixel_x - global_x; + y = pixel_y - global_y; - pixel_x = lon2pixel(global_zoom, lon); - pixel_y = lat2pixel(global_zoom, lat); - - x = pixel_x - global_x; - y = pixel_y - global_y; - - - if(is_line) - { - gdk_draw_line (pixmap, gc, x, y, last_x, last_y); - gtk_widget_queue_draw_area ( - map_drawable, - x-4, y-4, - 8,8); + + if(is_line) + { + gdk_draw_line (pixmap, gc, x, y, last_x, last_y); + gtk_widget_queue_draw_area ( + map_drawable, + x-4, y-4, + 8,8); + } + + last_x = x; + last_y = y; + + is_line = TRUE; } - - last_x = x; - last_y = y; - - is_line = TRUE; } } - - - if( - gpsdata && 7==6 && - gpsdata->fix.longitude !=0 && - gpsdata->fix.latitude != 0 && - last_x != 0 && - last_y != 0 - ) - { - pixel_x = lon2pixel(global_zoom, deg2rad(gpsdata->fix.longitude)); - pixel_y = lat2pixel(global_zoom, deg2rad(gpsdata->fix.latitude)); - - x = pixel_x - global_x; - y = pixel_y - global_y; - - - gdk_draw_line (pixmap, gc, x, y, last_x, last_y); - gtk_widget_queue_draw_area ( - map_drawable, - x-4, y-4, - 8,8); - } - }