--- trunk/src/map-tool.c 2009/09/29 14:30:16 129 +++ trunk/src/map-tool.c 2009/09/30 12:11:22 130 @@ -525,55 +525,75 @@ static void map_setup(map_context_t *context) { char *name = NULL; - /* clear all existing ccahe images */ - osm_gps_map_clear_images (OSM_GPS_MAP(context->widget)); - if(!context->appdata->cur_gpx && !context->appdata->cur_cache) { - /* draw all geocaches */ - gpx_t *gpx = context->appdata->gpx; - while(gpx) { - map_draw_gpx(context->appdata, context->widget, gpx); - gpx = gpx->next; + if(context->state != MAP_ALL) { + printf("map_setp(ALL)\n"); + + /* clear all existing ccahe images */ + osm_gps_map_clear_images (OSM_GPS_MAP(context->widget)); + + /* draw all geocaches */ + gpx_t *gpx = context->appdata->gpx; + while(gpx) { + map_draw_gpx(context->appdata, context->widget, gpx); + gpx = gpx->next; + } + name = g_strdup(_("all")); + context->state = MAP_ALL; } - name = g_strdup(_("all")); - context->state = MAP_ALL; - context->gpx = context->appdata->gpx; } else if(!context->appdata->cur_cache) { - map_draw_gpx(context->appdata, context->widget, context->appdata->cur_gpx); - name = g_strdup(context->appdata->cur_gpx->name); - context->state = MAP_GPX; - context->gpx = context->appdata->cur_gpx; + if(context->state != MAP_GPX) { + printf("map_setp(GPX)\n"); + + /* clear all existing ccahe images */ + osm_gps_map_clear_images (OSM_GPS_MAP(context->widget)); + + map_draw_gpx(context->appdata, context->widget, + context->appdata->cur_gpx); + name = g_strdup(context->appdata->cur_gpx->name); + context->state = MAP_GPX; + } } else { - map_draw_cache(context->widget, context->appdata->cur_cache); - name = g_strdup(context->appdata->cur_cache->name); - context->state = MAP_CACHE; - context->cache = context->appdata->cur_cache; - } + if(context->state != MAP_CACHE) { + printf("map_setp(CACHE)\n"); - char *title = g_strdup_printf(_("Map - %s"), name); - g_free(name); + /* clear all existing ccahe images */ + osm_gps_map_clear_images (OSM_GPS_MAP(context->widget)); - gtk_window_set_title(GTK_WINDOW(context->window), title); + map_draw_cache(context->widget, context->appdata->cur_cache); + name = g_strdup(context->appdata->cur_cache->name); + context->state = MAP_CACHE; + } + } - g_free(title); + if(name) { + char *title = g_strdup_printf(_("Map - %s"), name); + g_free(name); + + gtk_window_set_title(GTK_WINDOW(context->window), title); + + g_free(title); + } else + printf("map_setup(keep)\n"); } +#ifdef USE_MAEMO /* on maemo a window is either on top or completely invisible. this means that */ /* we only need to update the map window if its raised. on ordinary desktops this */ /* is different and we always update */ static gboolean on_focus_in(GtkWidget *widget, GdkEventFocus *event, gpointer data) { - map_context_t *context = (map_context_t*)data; - - printf("map focus in!\n"); + map_setup((map_context_t*)data); return FALSE; } +#endif void map_update(appdata_t *appdata) { - if(appdata->map.context) { - printf("map update\n"); - } +#ifndef USE_MAEMO + if(appdata->map.context) + map_setup(appdata->map.context); +#endif } void map(appdata_t *appdata) { @@ -590,6 +610,7 @@ context = appdata->map.context = g_new0(map_context_t, 1); context->appdata = appdata; context->map_complete = FALSE; + context->state = MAP_NONE; /* cleanup old (pre 0.8.7) path if it exists */ char *old_path = g_strdup_printf("%s/map/", appdata->image_path); @@ -654,8 +675,10 @@ gtk_window_set_default_size(GTK_WINDOW(context->window), 640, 480); #endif +#ifdef USE_MAEMO g_signal_connect(G_OBJECT(context->widget), "focus-in-event", G_CALLBACK(on_focus_in), context); +#endif g_signal_connect(G_OBJECT(context->widget), "configure-event", G_CALLBACK(on_map_configure), context);