--- trunk/src/map-tool.c 2009/08/02 18:37:10 38 +++ trunk/src/map-tool.c 2009/08/02 19:05:24 40 @@ -29,6 +29,9 @@ GtkWidget *widget; GtkWidget *zoomin, *zoomout, *gps; gint handler_id; +#if MAEMO_VERSION_MAJOR == 5 + GtkWidget *old_view; +#endif } map_context_t; #define PROXY_KEY "/system/http_proxy/" @@ -152,10 +155,26 @@ } } +#if MAEMO_VERSION_MAJOR == 5 +static void on_window_destroy(GtkWidget *widget, map_context_t *context) { + printf("destroy map view\n"); + + /* restore cur_view */ + context->appdata->cur_view = context->old_view; + + gtk_timeout_remove(context->handler_id); + g_free(context); +} +#endif + void map(appdata_t *appdata) { - map_context_t context; - context.appdata = appdata; + map_context_t *context = g_new0(map_context_t, 1); + context->appdata = appdata; +#if MAEMO_VERSION_MAJOR == 5 + GtkWidget *window = hildon_stackable_window_new(); + gtk_window_set_title(GTK_WINDOW(window), _("Map")); +#else GtkWidget *dialog = gtk_dialog_new_with_buttons(_("Map"), GTK_WINDOW(appdata->window), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, @@ -167,13 +186,14 @@ #else gtk_window_set_default_size(GTK_WINDOW(dialog), 800, 480); #endif +#endif GtkWidget *hbox = gtk_hbox_new(FALSE, 0); char *path = g_strdup_printf("%s/map/", appdata->image_path); const char *proxy = get_proxy_uri(appdata); - context.widget = g_object_new(OSM_TYPE_GPS_MAP, + context->widget = g_object_new(OSM_TYPE_GPS_MAP, "repo-uri", MAP_SOURCE_OPENSTREETMAP, "tile-cache", path, proxy?"proxy-uri":NULL, proxy, @@ -184,50 +204,59 @@ /* draw all geocaches */ gpx_t *gpx = appdata->gpx; while(gpx) { - map_draw_cachelist(context.widget, gpx->cache); + map_draw_cachelist(context->widget, gpx->cache); gpx = gpx->next; } - g_signal_connect(G_OBJECT(context.widget), "configure-event", - G_CALLBACK(on_map_configure), &context); + g_signal_connect(G_OBJECT(context->widget), "configure-event", + G_CALLBACK(on_map_configure), context); #if 0 - g_signal_connect(G_OBJECT(context.widget), "button-release-event", - G_CALLBACK(on_map_button_release_event), &context); + g_signal_connect(G_OBJECT(context->widget), "button-release-event", + G_CALLBACK(on_map_button_release_event), context); #endif - gtk_box_pack_start_defaults(GTK_BOX(hbox), context.widget); + gtk_box_pack_start_defaults(GTK_BOX(hbox), context->widget); /* zoom button box */ GtkWidget *vbox = gtk_vbox_new(FALSE,0); - context.zoomin = + context->zoomin = map_add_button(GTK_STOCK_ZOOM_IN, G_CALLBACK(cb_map_zoomin), - &context, _("Zoom in")); - gtk_box_pack_start(GTK_BOX(vbox), context.zoomin, FALSE, FALSE, 0); + context, _("Zoom in")); + gtk_box_pack_start(GTK_BOX(vbox), context->zoomin, FALSE, FALSE, 0); - context.zoomout = + context->zoomout = map_add_button(GTK_STOCK_ZOOM_OUT, G_CALLBACK(cb_map_zoomout), - &context, _("Zoom out")); - gtk_box_pack_start(GTK_BOX(vbox), context.zoomout, FALSE, FALSE, 0); + context, _("Zoom out")); + gtk_box_pack_start(GTK_BOX(vbox), context->zoomout, FALSE, FALSE, 0); - context.gps = + context->gps = map_add_button(GTK_STOCK_HOME, G_CALLBACK(cb_map_gps), - &context, _("Jump to GPS position")); - gtk_widget_set_sensitive(context.gps, FALSE); + context, _("Jump to GPS position")); + gtk_widget_set_sensitive(context->gps, FALSE); /* install handler for timed updates of the gps button */ - context.handler_id = gtk_timeout_add(1000, map_gps_update, &context); - gtk_box_pack_start(GTK_BOX(vbox), context.gps, FALSE, FALSE, 0); + context->handler_id = gtk_timeout_add(1000, map_gps_update, context); + gtk_box_pack_start(GTK_BOX(vbox), context->gps, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0); +#if MAEMO_VERSION_MAJOR == 5 + /* prevent some of the main screen things */ + context->old_view = appdata->cur_view; + appdata->cur_view = NULL; + + g_signal_connect(G_OBJECT(window), "destroy", + G_CALLBACK(on_window_destroy), context); + + gtk_container_add(GTK_CONTAINER(window), hbox); + gtk_widget_show_all(GTK_WIDGET(window)); + +#else gtk_box_pack_start_defaults(GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox); - gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_CLOSE); - gtk_widget_show_all(dialog); - gtk_dialog_run(GTK_DIALOG(dialog)); - - gtk_timeout_remove(context.handler_id); - + gtk_timeout_remove(context->handler_id); gtk_widget_destroy(dialog); + g_free(context); +#endif }