Index: src/display.c =================================================================== --- src/display.c (revision 17) +++ src/display.c (revision 18) @@ -2916,6 +2916,35 @@ return success; } +TapType +get_tap_type(gint x, gint y) +{ + TapType type = TAP_TYPE_NONE; + PoiInfo poi; + gint unitx, unity; + printf("%s()\n", __PRETTY_FUNCTION__); + + screen2unit(x, y, unitx, unity); + + if(select_poi(unitx, unity, &poi, TRUE)) + { + type = TAP_TYPE_POI; + g_free(poi.label); + g_free(poi.desc); + g_free(poi.clabel); + } + + if((_show_paths & ROUTES_MASK) && _route.whead <= _route.wtail) + { + WayPoint *way = find_nearest_waypoint(unitx, unity); + if(way) + type = TAP_TYPE_WAYPOINT; + } + + vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__); + return type; +} + void display_init() { Index: src/cmenu.c =================================================================== --- src/cmenu.c (revision 17) +++ src/cmenu.c (revision 18) @@ -677,42 +677,28 @@ static gboolean cmenu_cb_show(GtkMenuItem *item) { - gint unitx, unity; - PoiInfo poi; - gboolean fallback = TRUE; + TapType type; printf("%s()\n", __PRETTY_FUNCTION__); - screen2unit(_cmenu_position_x, _cmenu_position_y, unitx, unity); + type = get_tap_type(_cmenu_position_x, _cmenu_position_y); 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)) + switch(type) { - 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) - { + case TAP_TYPE_POI: + gtk_widget_show(cmenu_quick_poi); + break; + case TAP_TYPE_WAYPOINT: gtk_widget_show(cmenu_quick_waypoint); - fallback = FALSE; - } + break; + case TAP_TYPE_NONE: + gtk_widget_show(cmenu_quick_tap); + break; } - /* fall back to tap point */ - if(fallback) - gtk_widget_show(cmenu_quick_tap); - vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__); return TRUE; } Index: src/types.h =================================================================== --- src/types.h (revision 17) +++ src/types.h (revision 18) @@ -272,6 +272,13 @@ DEG_FORMAT_ENUM_COUNT } DegFormat; +typedef enum +{ + TAP_TYPE_NONE, + TAP_TYPE_POI, + TAP_TYPE_WAYPOINT +} TapType; + typedef struct _CoordFormatSetup CoordFormatSetup; struct _CoordFormatSetup { Index: src/display.h =================================================================== --- src/display.h (revision 17) +++ src/display.h (revision 18) @@ -74,6 +74,8 @@ GnomeVFSHandle **handle_out, gint *size_out, gchar **dir, gchar **file, GtkFileChooserAction chooser_action); +TapType get_tap_type(gint x, gint y); + void display_init(void); #ifdef INCLUDE_APRS