+static gboolean layers_panel_new_layer ( gpointer lpnl[2] )
+{
+ return vik_layers_panel_new_layer ( lpnl[0], GPOINTER_TO_INT(lpnl[1]) );
+}
+
+/**
+ * Create menu popup on demand
+ * @full: offer cut/copy options as well - not just the new layer options
+ */
+static GtkWidget* layers_panel_create_popup ( VikLayersPanel *vlp, gboolean full )
+{
+ GtkWidget *menu = gtk_menu_new ();
+ GtkWidget *menuitem;
+ guint ii;
+
+ if ( full ) {
+ for ( ii = 0; ii < G_N_ELEMENTS(entries); ii++ ) {
+ if ( entries[ii].stock_id ) {
+ menuitem = gtk_image_menu_item_new_with_mnemonic ( entries[ii].label );
+ gtk_image_menu_item_set_image ( (GtkImageMenuItem*)menuitem, gtk_image_new_from_stock (entries[ii].stock_id, GTK_ICON_SIZE_MENU) );
+ }
+ else
+ menuitem = gtk_menu_item_new_with_mnemonic ( entries[ii].label );
+
+ g_signal_connect_swapped ( G_OBJECT(menuitem), "activate", G_CALLBACK(entries[ii].callback), vlp );
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
+ gtk_widget_show ( menuitem );
+ }
+ }
+
+ GtkWidget *submenu = gtk_menu_new();
+ menuitem = gtk_menu_item_new_with_mnemonic ( _("New Layer") );
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
+ gtk_widget_show ( menuitem );
+ gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), submenu );
+
+ // Static: so memory accessible yet not continually allocated
+ static gpointer lpnl[VIK_LAYER_NUM_TYPES][2];
+
+ for ( ii = 0; ii < VIK_LAYER_NUM_TYPES; ii++ ) {
+ if ( vik_layer_get_interface(ii)->icon ) {
+ menuitem = gtk_image_menu_item_new_with_mnemonic ( vik_layer_get_interface(ii)->name );
+ gtk_image_menu_item_set_image ( (GtkImageMenuItem*)menuitem, gtk_image_new_from_pixbuf ( vik_layer_load_icon (ii) ) );
+ }
+ else
+ menuitem = gtk_menu_item_new_with_mnemonic ( vik_layer_get_interface(ii)->name );
+
+ lpnl[ii][0] = vlp;
+ lpnl[ii][1] = GINT_TO_POINTER(ii);
+
+ g_signal_connect_swapped ( G_OBJECT(menuitem), "activate", G_CALLBACK(layers_panel_new_layer), lpnl[ii] );
+ gtk_menu_shell_append (GTK_MENU_SHELL (submenu), menuitem);
+ gtk_widget_show ( menuitem );
+ }
+
+ return menu;
+}
+
+static void vik_layers_panel_init ( VikLayersPanel *vlp )