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",
