Index: src/cmenu.c =================================================================== --- src/cmenu.c (revision 15) +++ src/cmenu.c (revision 16) @@ -57,6 +57,10 @@ #define GCONF_KEY_SUPL_LON GCONF_SUPL_KEY_PREFIX"/pos_longitude" #define GCONF_KEY_SUPL_TIME GCONF_SUPL_KEY_PREFIX"/pos_timestamp" +static GtkWidget *cmenu_quick_tap = NULL; +static GtkWidget *cmenu_quick_waypoint = NULL; +static GtkWidget *cmenu_quick_poi = NULL; + static void cmenu_show_latlon(gint unitx, gint unity) { @@ -671,6 +675,49 @@ } static gboolean +cmenu_cb_show(GtkMenuItem *item) +{ + gint unitx, unity; + PoiInfo poi; + gboolean fallback = TRUE; + printf("%s()\n", __PRETTY_FUNCTION__); + + screen2unit(_cmenu_position_x, _cmenu_position_y, unitx, unity); + + gtk_widget_hide(cmenu_quick_tap); + gtk_widget_hide(cmenu_quick_waypoint); + gtk_widget_hide(cmenu_quick_poi); + + /* poi? */ + if(select_poi(unitx, unity, &poi, TRUE)) + { + gtk_widget_show(cmenu_quick_poi); + g_free(poi.label); + g_free(poi.desc); + g_free(poi.clabel); + fallback = FALSE; + } + + /* waypoint? */ + if((_show_paths & ROUTES_MASK) && _route.whead <= _route.wtail) + { + WayPoint *way = find_nearest_waypoint(unitx, unity); + if(way) + { + gtk_widget_show(cmenu_quick_waypoint); + fallback = FALSE; + } + } + + /* fall back to tap point */ + if(fallback) + gtk_widget_show(cmenu_quick_tap); + + vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__); + return TRUE; +} + +static gboolean cmenu_cb_hide(GtkMenuItem *item) { printf("%s()\n", __PRETTY_FUNCTION__); @@ -693,6 +740,21 @@ /* Setup the context menu. */ _map_cmenu = GTK_MENU(gtk_menu_new()); + /* Setup quick menu. */ + gtk_menu_append(_map_cmenu, cmenu_quick_tap + = gtk_menu_item_new_with_label(_("Show Distance to"))); + g_signal_connect(G_OBJECT(cmenu_quick_tap), "activate", + G_CALLBACK(cmenu_cb_loc_distance_to), NULL); + gtk_menu_append(_map_cmenu, cmenu_quick_waypoint + = gtk_menu_item_new_with_label(_("Show Description"))); + g_signal_connect(G_OBJECT(cmenu_quick_waypoint), "activate", + G_CALLBACK(cmenu_cb_way_show_desc), NULL); + gtk_menu_append(_map_cmenu, cmenu_quick_poi + = gtk_menu_item_new_with_label(_("View/Edit POI..."))); + g_signal_connect(G_OBJECT(cmenu_quick_poi), "activate", + G_CALLBACK(cmenu_cb_poi_edit_poi), NULL); + gtk_menu_append(_map_cmenu, gtk_separator_menu_item_new()); + /* Setup the map context menu. */ gtk_menu_append(_map_cmenu, menu_item = gtk_menu_item_new_with_label(_("Tap Point"))); @@ -838,6 +900,8 @@ gtk_widget_tap_and_hold_setup(_map_widget, GTK_WIDGET(_map_cmenu), NULL, 0); #endif + g_signal_connect(GTK_WIDGET(_map_cmenu), "show", + G_CALLBACK(cmenu_cb_show), NULL); /* Add a "hide" signal event handler to handle dismissing the context * menu. */ g_signal_connect(GTK_WIDGET(_map_cmenu), "hide",