/* * Copyright (C) 2006, 2007 John Costigan. * * POI and GPS-Info code originally written by Cezary Jackiewicz. * * Default map data provided by http://www.openstreetmap.org/ * * This file is part of Maemo Mapper. * * Maemo Mapper is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Maemo Mapper is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Maemo Mapper. If not, see . */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #define _GNU_SOURCE #include #include #include #include #ifndef LEGACY # include # include #else # include # include #endif #include "types.h" #include "data.h" #include "defines.h" #include "cmenu.h" #include "display.h" #include "gdk-pixbuf-rotate.h" #include "menu.h" #include "path.h" #include "poi.h" #include "util.h" #define GCONF_SUPL_KEY_PREFIX "/system/osso/supl" #define GCONF_KEY_SUPL_LAT GCONF_SUPL_KEY_PREFIX"/pos_latitude" #define GCONF_KEY_SUPL_LON GCONF_SUPL_KEY_PREFIX"/pos_longitude" #define GCONF_KEY_SUPL_TIME GCONF_SUPL_KEY_PREFIX"/pos_timestamp" static void cmenu_show_latlon(gint unitx, gint unity) { gdouble lat, lon; gint tmp_degformat = _degformat; gint fallback_deg_format = _degformat; gchar buffer[80], tmp1[LL_FMT_LEN], tmp2[LL_FMT_LEN]; printf("%s()\n", __PRETTY_FUNCTION__); unit2latlon(unitx, unity, lat, lon); // Check that the current coord system supports the select position if(!coord_system_check_lat_lon (lat, lon, &fallback_deg_format)) { _degformat = fallback_deg_format; } format_lat_lon(lat, lon, tmp1, tmp2); if(DEG_FORMAT_ENUM_TEXT[_degformat].field_2_in_use) { snprintf(buffer, sizeof(buffer), "%s: %s\n" "%s: %s", DEG_FORMAT_ENUM_TEXT[_degformat].long_field_1, tmp1, DEG_FORMAT_ENUM_TEXT[_degformat].long_field_2, tmp2); } else { snprintf(buffer, sizeof(buffer), "%s: %s", DEG_FORMAT_ENUM_TEXT[_degformat].long_field_1, tmp1); } MACRO_BANNER_SHOW_INFO(_window, buffer); _degformat = tmp_degformat; vprintf("%s(): return\n", __PRETTY_FUNCTION__); } static void cmenu_clip_latlon(gint unitx, gint unity) { gchar buffer[80]; gdouble lat, lon; printf("%s()\n", __PRETTY_FUNCTION__); unit2latlon(unitx, unity, lat, lon); snprintf(buffer, sizeof(buffer), "%.06f,%.06f", lat, lon); gtk_clipboard_set_text( gtk_clipboard_get(GDK_SELECTION_CLIPBOARD), buffer, -1); vprintf("%s(): return\n", __PRETTY_FUNCTION__); } static void cmenu_route_to(gint unitx, gint unity) { gchar buffer[80]; gchar strlat[32]; gchar strlon[32]; gdouble lat, lon; printf("%s()\n", __PRETTY_FUNCTION__); unit2latlon(unitx, unity, lat, lon); g_ascii_formatd(strlat, 32, "%.06f", lat); g_ascii_formatd(strlon, 32, "%.06f", lon); snprintf(buffer, sizeof(buffer), "%s, %s", strlat, strlon); route_download(buffer); vprintf("%s(): return\n", __PRETTY_FUNCTION__); } static void cmenu_distance_to(gint unitx, gint unity) { gchar buffer[80]; gdouble lat, lon; printf("%s()\n", __PRETTY_FUNCTION__); unit2latlon(unitx, unity, lat, lon); snprintf(buffer, sizeof(buffer), "%s: %.02f %s", _("Distance"), calculate_distance(_gps.lat, _gps.lon, lat, lon) * UNITS_CONVERT[_units], UNITS_ENUM_TEXT[_units]); MACRO_BANNER_SHOW_INFO(_window, buffer); vprintf("%s(): return\n", __PRETTY_FUNCTION__); } static void cmenu_add_route(gint unitx, gint unity) { printf("%s()\n", __PRETTY_FUNCTION__); MACRO_PATH_INCREMENT_TAIL(_route); screen2unit(_cmenu_position_x, _cmenu_position_y, _route.tail->unitx, _route.tail->unity); route_find_nearest_point(); map_force_redraw(); vprintf("%s(): return\n", __PRETTY_FUNCTION__); } static gboolean cmenu_cb_loc_show_latlon(GtkMenuItem *item) { gint unitx, unity; gdouble lat, lon; printf("%s()\n", __PRETTY_FUNCTION__); screen2unit(_cmenu_position_x, _cmenu_position_y, unitx, unity); unit2latlon(unitx, unity, lat, lon); latlon_dialog(lat, lon); vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__); return TRUE; } static gboolean cmenu_cb_loc_route_to(GtkMenuItem *item) { gint unitx, unity; printf("%s()\n", __PRETTY_FUNCTION__); screen2unit(_cmenu_position_x, _cmenu_position_y, unitx, unity); cmenu_route_to(unitx, unity); vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__); return TRUE; } static gboolean cmenu_cb_loc_download_poi(GtkMenuItem *item) { gint unitx, unity; printf("%s()\n", __PRETTY_FUNCTION__); screen2unit(_cmenu_position_x, _cmenu_position_y, unitx, unity); poi_download_dialog(unitx, unity); vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__); return TRUE; } static gboolean cmenu_cb_loc_browse_poi(GtkMenuItem *item) { gint unitx, unity; printf("%s()\n", __PRETTY_FUNCTION__); screen2unit(_cmenu_position_x, _cmenu_position_y, unitx, unity); poi_browse_dialog(unitx, unity); vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__); return TRUE; } static gboolean cmenu_cb_loc_distance_to(GtkMenuItem *item) { gint unitx, unity; printf("%s()\n", __PRETTY_FUNCTION__); screen2unit(_cmenu_position_x, _cmenu_position_y, unitx, unity); cmenu_distance_to(unitx, unity); vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__); return TRUE; } static gboolean cmenu_cb_loc_add_route(GtkMenuItem *item) { gint unitx, unity; printf("%s()\n", __PRETTY_FUNCTION__); screen2unit(_cmenu_position_x, _cmenu_position_y, unitx, unity); cmenu_add_route(unitx, unity); vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__); return TRUE; } static gboolean cmenu_cb_loc_add_way(GtkMenuItem *item) { gint unitx, unity; printf("%s()\n", __PRETTY_FUNCTION__); screen2unit(_cmenu_position_x, _cmenu_position_y, unitx, unity); route_add_way_dialog(unitx, unity); vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__); return TRUE; } static gboolean cmenu_cb_loc_add_poi(GtkMenuItem *item) { gint unitx, unity; printf("%s()\n", __PRETTY_FUNCTION__); screen2unit(_cmenu_position_x, _cmenu_position_y, unitx, unity); poi_add_dialog(_window, unitx, unity); vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__); return TRUE; } static gboolean cmenu_cb_loc_set_gps(GtkMenuItem *item) { printf("%s()\n", __PRETTY_FUNCTION__); screen2unit(_cmenu_position_x, _cmenu_position_y, _pos.unitx, _pos.unity); unit2latlon(_pos.unitx, _pos.unity, _gps.lat, _gps.lon); /* Move mark to new location. */ map_refresh_mark(_center_mode > 0); GConfClient *gconf_client = gconf_client_get_default(); GTimeVal curtime; gconf_client_set_float(gconf_client, GCONF_KEY_SUPL_LON, _gps.lon, NULL); gconf_client_set_float(gconf_client, GCONF_KEY_SUPL_LAT, _gps.lat, NULL); g_get_current_time(&curtime); gconf_client_set_float(gconf_client, GCONF_KEY_SUPL_TIME, curtime.tv_sec, NULL); g_object_unref(gconf_client); vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__); return TRUE; } static gboolean cmenu_cb_loc_apply_correction(GtkMenuItem *item) { printf("%s()\n", __PRETTY_FUNCTION__); if(gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(item))) { /* Get difference between tap point and GPS location. */ gint unitx, unity; screen2unit(_cmenu_position_x, _cmenu_position_y, unitx, unity); _map_correction_unitx = unitx - _pos.unitx; _map_correction_unity = unity - _pos.unity; map_refresh_mark(TRUE); MACRO_BANNER_SHOW_INFO(_window, _("Map correction applied.")); } else { _map_correction_unitx = 0; _map_correction_unity = 0; map_refresh_mark(TRUE); MACRO_BANNER_SHOW_INFO(_window, _("Map correction removed.")); } printf("Map correction now set to: %d, %d\n"); vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__); return TRUE; } static gboolean cmenu_cb_way_show_latlon(GtkMenuItem *item) { gint unitx, unity; WayPoint *way; printf("%s()\n", __PRETTY_FUNCTION__); screen2unit(_cmenu_position_x, _cmenu_position_y, unitx, unity); if((way = find_nearest_waypoint(unitx, unity))) cmenu_show_latlon(way->point->unitx, way->point->unity); else { MACRO_BANNER_SHOW_INFO(_window, _("There are no waypoints.")); } vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__); return TRUE; } static gboolean cmenu_cb_way_show_desc(GtkMenuItem *item) { gint unitx, unity; WayPoint *way; printf("%s()\n", __PRETTY_FUNCTION__); screen2unit(_cmenu_position_x, _cmenu_position_y, unitx, unity); if((way = find_nearest_waypoint(unitx, unity))) { MACRO_BANNER_SHOW_INFO(_window, way->desc); } else { MACRO_BANNER_SHOW_INFO(_window, _("There are no waypoints.")); } vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__); return TRUE; } static gboolean cmenu_cb_way_clip_latlon(GtkMenuItem *item) { gint unitx, unity; WayPoint *way; printf("%s()\n", __PRETTY_FUNCTION__); screen2unit(_cmenu_position_x, _cmenu_position_y, unitx, unity); if((way = find_nearest_waypoint(unitx, unity))) cmenu_clip_latlon(way->point->unitx, way->point->unity); else { MACRO_BANNER_SHOW_INFO(_window, _("There are no waypoints.")); } vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__); return TRUE; } static gboolean cmenu_cb_way_clip_desc(GtkMenuItem *item) { gint unitx, unity; WayPoint *way; printf("%s()\n", __PRETTY_FUNCTION__); screen2unit(_cmenu_position_x, _cmenu_position_y, unitx, unity); if((way = find_nearest_waypoint(unitx, unity))) gtk_clipboard_set_text( gtk_clipboard_get(GDK_SELECTION_CLIPBOARD), way->desc, -1); else { MACRO_BANNER_SHOW_INFO(_window, _("There are no waypoints.")); } vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__); return TRUE; } static gboolean cmenu_cb_way_route_to(GtkMenuItem *item) { gint unitx, unity; WayPoint *way; printf("%s()\n", __PRETTY_FUNCTION__); screen2unit(_cmenu_position_x, _cmenu_position_y, unitx, unity); if((way = find_nearest_waypoint(unitx, unity))) cmenu_route_to(way->point->unitx, way->point->unity); else { MACRO_BANNER_SHOW_INFO(_window, _("There are no waypoints.")); } vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__); return TRUE; } static gboolean cmenu_cb_way_distance_to(GtkMenuItem *item) { gint unitx, unity; WayPoint *way; printf("%s()\n", __PRETTY_FUNCTION__); screen2unit(_cmenu_position_x, _cmenu_position_y, unitx, unity); if((way = find_nearest_waypoint(unitx, unity))) route_show_distance_to(way->point); else { MACRO_BANNER_SHOW_INFO(_window, _("There are no waypoints.")); } vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__); return TRUE; } static gboolean cmenu_cb_way_delete(GtkMenuItem *item) { gint unitx, unity; WayPoint *way; printf("%s()\n", __PRETTY_FUNCTION__); screen2unit(_cmenu_position_x, _cmenu_position_y, unitx, unity); if((way = find_nearest_waypoint(unitx, unity))) { gchar buffer[BUFFER_SIZE]; GtkWidget *confirm; snprintf(buffer, sizeof(buffer), "%s:\n%s\n", _("Confirm delete of waypoint"), way->desc); confirm = hildon_note_new_confirmation(GTK_WINDOW(_window), buffer); if(GTK_RESPONSE_OK == gtk_dialog_run(GTK_DIALOG(confirm))) { Point *pdel_min, *pdel_max, *pdel_start, *pdel_end; gint num_del; /* Delete surrounding route data, too. */ if(way == _route.whead) pdel_min = _route.head; else pdel_min = way[-1].point; if(way == _route.wtail) pdel_max = _route.tail; else pdel_max = way[1].point; /* Find largest continuous segment around the waypoint, EXCLUDING * pdel_min and pdel_max. */ for(pdel_start = way->point - 1; pdel_start->unity && pdel_start > pdel_min; pdel_start--) { } for(pdel_end = way->point + 1; pdel_end->unity && pdel_end < pdel_max; pdel_end++) { } /* If pdel_end is set to _route.tail, and if _route.tail is a * non-zero point, then delete _route.tail. */ if(pdel_end == _route.tail && pdel_end->unity) pdel_end++; /* delete _route.tail too */ /* else, if *both* endpoints are zero points, delete one. */ else if(!pdel_start->unity && !pdel_end->unity) pdel_start--; /* Delete BETWEEN pdel_start and pdel_end, exclusive. */ num_del = pdel_end - pdel_start - 1; memmove(pdel_start + 1, pdel_end, (_route.tail - pdel_end + 1) * sizeof(Point)); _route.tail -= num_del; /* Remove waypoint and move/adjust subsequent waypoints. */ g_free(way->desc); while(way++ != _route.wtail) { way[-1] = *way; way[-1].point -= num_del; } _route.wtail--; route_find_nearest_point(); map_force_redraw(); } gtk_widget_destroy(confirm); } else { MACRO_BANNER_SHOW_INFO(_window, _("There are no waypoints.")); } vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__); return TRUE; } static gboolean cmenu_cb_way_add_poi(GtkMenuItem *item) { gint unitx, unity; WayPoint *way; printf("%s()\n", __PRETTY_FUNCTION__); screen2unit(_cmenu_position_x, _cmenu_position_y, unitx, unity); if((way = find_nearest_waypoint(unitx, unity))) poi_add_dialog(_window, way->point->unitx, way->point->unity); else { MACRO_BANNER_SHOW_INFO(_window, _("There are no waypoints.")); } vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__); return TRUE; } static gboolean cmenu_cb_poi_route_to(GtkMenuItem *item) { gint unitx, unity; PoiInfo poi; printf("%s()\n", __PRETTY_FUNCTION__); screen2unit(_cmenu_position_x, _cmenu_position_y, unitx, unity); if(select_poi(unitx, unity, &poi, FALSE)) /* FALSE = not quick */ { gint unitx, unity; latlon2unit(poi.lat, poi.lon, unitx, unity); cmenu_route_to(unitx, unity); } vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__); return TRUE; } static gboolean cmenu_cb_poi_distance_to(GtkMenuItem *item) { gint unitx, unity; PoiInfo poi; printf("%s()\n", __PRETTY_FUNCTION__); screen2unit(_cmenu_position_x, _cmenu_position_y, unitx, unity); if(select_poi(unitx, unity, &poi, FALSE)) /* FALSE = not quick */ { gint unitx, unity; latlon2unit(poi.lat, poi.lon, unitx, unity); cmenu_distance_to(unitx, unity); } vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__); return TRUE; } static gboolean cmenu_cb_poi_add_route(GtkMenuItem *item) { gint unitx, unity; PoiInfo poi; printf("%s()\n", __PRETTY_FUNCTION__); screen2unit(_cmenu_position_x, _cmenu_position_y, unitx, unity); if(select_poi(unitx, unity, &poi, FALSE)) /* FALSE = not quick */ { gint unitx, unity; latlon2unit(poi.lat, poi.lon, unitx, unity); cmenu_add_route(unitx, unity); } vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__); return TRUE; } static gboolean cmenu_cb_poi_add_way(GtkMenuItem *item) { gint unitx, unity; PoiInfo poi; printf("%s()\n", __PRETTY_FUNCTION__); screen2unit(_cmenu_position_x, _cmenu_position_y, unitx, unity); if(select_poi(unitx, unity, &poi, FALSE)) /* FALSE = not quick */ { gint unitx, unity; latlon2unit(poi.lat, poi.lon, unitx, unity); route_add_way_dialog(unitx, unity); } vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__); return TRUE; } static gboolean cmenu_cb_poi_edit_poi(GtkMenuItem *item) { PoiInfo poi; gint unitx, unity; printf("%s()\n", __PRETTY_FUNCTION__); memset(&poi, 0, sizeof(poi)); screen2unit(_cmenu_position_x, _cmenu_position_y, unitx, unity); select_poi(unitx, unity, &poi, FALSE); /* FALSE = not quick */ poi_view_dialog(_window, &poi); if(poi.label) g_free(poi.label); if(poi.desc) g_free(poi.desc); if(poi.clabel) g_free(poi.clabel); vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__); return TRUE; } static gboolean cmenu_cb_hide(GtkMenuItem *item) { printf("%s()\n", __PRETTY_FUNCTION__); if(_mouse_is_down) g_mutex_unlock(_mouse_mutex); _mouse_is_down = _mouse_is_dragging = FALSE; vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__); return TRUE; } void cmenu_init() { /* Create needed handles. */ GtkWidget *submenu; GtkWidget *menu_item; printf("%s()\n", __PRETTY_FUNCTION__); /* Setup the context menu. */ _map_cmenu = GTK_MENU(gtk_menu_new()); /* Setup the map context menu. */ gtk_menu_append(_map_cmenu, menu_item = gtk_menu_item_new_with_label(_("Tap Point"))); gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item), submenu = gtk_menu_new()); /* Setup the map context menu. */ gtk_menu_append(submenu, _cmenu_loc_show_latlon_item = gtk_menu_item_new_with_label(_("Show Position"))); gtk_menu_append(submenu, gtk_separator_menu_item_new()); gtk_menu_append(submenu, _cmenu_loc_distance_to_item = gtk_menu_item_new_with_label(_("Show Distance to"))); gtk_menu_append(submenu, _cmenu_loc_route_to_item = gtk_menu_item_new_with_label(_("Download Route to..."))); gtk_menu_append(submenu, _cmenu_loc_download_poi_item = gtk_menu_item_new_with_label(_("Download POI..."))); gtk_menu_append(submenu, _cmenu_loc_browse_poi_item = gtk_menu_item_new_with_label(_("Browse POI..."))); gtk_menu_append(submenu, gtk_separator_menu_item_new()); gtk_menu_append(submenu, _cmenu_loc_add_route_item = gtk_menu_item_new_with_label(_("Add Route Point"))); gtk_menu_append(submenu, _cmenu_loc_add_way_item = gtk_menu_item_new_with_label(_("Add Waypoint..."))); gtk_menu_append(submenu, _cmenu_loc_add_poi_item = gtk_menu_item_new_with_label(_("Add POI..."))); gtk_menu_append(submenu, gtk_separator_menu_item_new()); gtk_menu_append(submenu, _cmenu_loc_set_gps_item = gtk_menu_item_new_with_label(_("Set as GPS Location"))); gtk_menu_append(submenu, _cmenu_loc_apply_correction_item = gtk_check_menu_item_new_with_label( _("Apply Map Correction"))); gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(_cmenu_loc_apply_correction_item), _map_correction_unitx != 0 || _map_correction_unity != 0); /* Setup the waypoint context menu. */ gtk_menu_append(_map_cmenu, menu_item = gtk_menu_item_new_with_label(_("Waypoint"))); gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item), submenu = gtk_menu_new()); gtk_menu_append(submenu, _cmenu_way_show_latlon_item = gtk_menu_item_new_with_label(_("Show Position"))); gtk_menu_append(submenu, _cmenu_way_show_desc_item = gtk_menu_item_new_with_label(_("Show Description"))); gtk_menu_append(submenu, _cmenu_way_clip_latlon_item = gtk_menu_item_new_with_label(_("Copy Position"))); gtk_menu_append(submenu, _cmenu_way_clip_desc_item = gtk_menu_item_new_with_label(_("Copy Description"))); gtk_menu_append(submenu, gtk_separator_menu_item_new()); gtk_menu_append(submenu, _cmenu_way_distance_to_item = gtk_menu_item_new_with_label(_("Show Distance to"))); gtk_menu_append(submenu, _cmenu_way_route_to_item = gtk_menu_item_new_with_label(_("Download Route to..."))); gtk_menu_append(submenu, _cmenu_way_delete_item = gtk_menu_item_new_with_label(_("Delete..."))); gtk_menu_append(submenu, gtk_separator_menu_item_new()); gtk_menu_append(submenu, _cmenu_way_add_poi_item = gtk_menu_item_new_with_label(_("Add POI..."))); gtk_menu_append(submenu, gtk_separator_menu_item_new()); gtk_menu_append(submenu, _cmenu_way_goto_nextway_item = gtk_menu_item_new_with_label(_("Go to Next"))); /* Setup the POI context menu. */ gtk_menu_append(_map_cmenu, _cmenu_poi_submenu = gtk_menu_item_new_with_label(_("POI"))); gtk_menu_item_set_submenu(GTK_MENU_ITEM(_cmenu_poi_submenu), submenu = gtk_menu_new()); gtk_menu_append(submenu, _cmenu_poi_edit_poi_item = gtk_menu_item_new_with_label(_("View/Edit..."))); gtk_menu_append(submenu, gtk_separator_menu_item_new()); gtk_menu_append(submenu, _cmenu_poi_distance_to_item = gtk_menu_item_new_with_label(_("Show Distance to"))); gtk_menu_append(submenu, _cmenu_poi_route_to_item = gtk_menu_item_new_with_label(_("Download Route to..."))); gtk_menu_append(submenu, gtk_separator_menu_item_new()); gtk_menu_append(submenu, _cmenu_poi_add_route_item = gtk_menu_item_new_with_label(_("Add Route Point"))); gtk_menu_append(submenu, _cmenu_poi_add_way_item = gtk_menu_item_new_with_label(_("Add Waypoint..."))); gtk_menu_append(submenu, gtk_separator_menu_item_new()); gtk_menu_append(submenu, _cmenu_poi_goto_nearpoi_item = gtk_menu_item_new_with_label(_("Go to Nearest"))); /* Connect signals for context menu. */ g_signal_connect(G_OBJECT(_cmenu_loc_show_latlon_item), "activate", G_CALLBACK(cmenu_cb_loc_show_latlon), NULL); g_signal_connect(G_OBJECT(_cmenu_loc_route_to_item), "activate", G_CALLBACK(cmenu_cb_loc_route_to), NULL); g_signal_connect(G_OBJECT(_cmenu_loc_download_poi_item), "activate", G_CALLBACK(cmenu_cb_loc_download_poi), NULL); g_signal_connect(G_OBJECT(_cmenu_loc_browse_poi_item), "activate", G_CALLBACK(cmenu_cb_loc_browse_poi), NULL); g_signal_connect(G_OBJECT(_cmenu_loc_distance_to_item), "activate", G_CALLBACK(cmenu_cb_loc_distance_to), NULL); g_signal_connect(G_OBJECT(_cmenu_loc_add_route_item), "activate", G_CALLBACK(cmenu_cb_loc_add_route), NULL); g_signal_connect(G_OBJECT(_cmenu_loc_add_way_item), "activate", G_CALLBACK(cmenu_cb_loc_add_way), NULL); g_signal_connect(G_OBJECT(_cmenu_loc_add_poi_item), "activate", G_CALLBACK(cmenu_cb_loc_add_poi), NULL); g_signal_connect(G_OBJECT(_cmenu_loc_set_gps_item), "activate", G_CALLBACK(cmenu_cb_loc_set_gps), NULL); g_signal_connect(G_OBJECT(_cmenu_loc_apply_correction_item), "toggled", G_CALLBACK(cmenu_cb_loc_apply_correction), NULL); g_signal_connect(G_OBJECT(_cmenu_way_show_latlon_item), "activate", G_CALLBACK(cmenu_cb_way_show_latlon), NULL); g_signal_connect(G_OBJECT(_cmenu_way_show_desc_item), "activate", G_CALLBACK(cmenu_cb_way_show_desc), NULL); g_signal_connect(G_OBJECT(_cmenu_way_clip_latlon_item), "activate", G_CALLBACK(cmenu_cb_way_clip_latlon), NULL); g_signal_connect(G_OBJECT(_cmenu_way_clip_desc_item), "activate", G_CALLBACK(cmenu_cb_way_clip_desc), NULL); g_signal_connect(G_OBJECT(_cmenu_way_route_to_item), "activate", G_CALLBACK(cmenu_cb_way_route_to), NULL); g_signal_connect(G_OBJECT(_cmenu_way_distance_to_item), "activate", G_CALLBACK(cmenu_cb_way_distance_to), NULL); g_signal_connect(G_OBJECT(_cmenu_way_delete_item), "activate", G_CALLBACK(cmenu_cb_way_delete), NULL); g_signal_connect(G_OBJECT(_cmenu_way_add_poi_item), "activate", G_CALLBACK(cmenu_cb_way_add_poi), NULL); g_signal_connect(G_OBJECT(_cmenu_way_goto_nextway_item), "activate", G_CALLBACK(menu_cb_view_goto_nextway), NULL); g_signal_connect(G_OBJECT(_cmenu_poi_edit_poi_item), "activate", G_CALLBACK(cmenu_cb_poi_edit_poi), NULL); g_signal_connect(G_OBJECT(_cmenu_poi_route_to_item), "activate", G_CALLBACK(cmenu_cb_poi_route_to), NULL); g_signal_connect(G_OBJECT(_cmenu_poi_distance_to_item), "activate", G_CALLBACK(cmenu_cb_poi_distance_to), NULL); g_signal_connect(G_OBJECT(_cmenu_poi_add_route_item), "activate", G_CALLBACK(cmenu_cb_poi_add_route), NULL); g_signal_connect(G_OBJECT(_cmenu_poi_add_way_item), "activate", G_CALLBACK(cmenu_cb_poi_add_way), NULL); g_signal_connect(G_OBJECT(_cmenu_poi_goto_nearpoi_item), "activate", G_CALLBACK(menu_cb_view_goto_nearpoi), NULL); gtk_widget_show_all(GTK_WIDGET(_map_cmenu)); #ifdef MAEMO_CHANGES gtk_widget_tap_and_hold_setup(_map_widget, GTK_WIDGET(_map_cmenu), NULL, 0); #endif /* Add a "hide" signal event handler to handle dismissing the context * menu. */ g_signal_connect(GTK_WIDGET(_map_cmenu), "hide", G_CALLBACK(cmenu_cb_hide), NULL); vprintf("%s(): return\n", __PRETTY_FUNCTION__); }