+static void
+insert_menuitem_into_menu (PsppireWindow *window, gpointer key)
+{
+ GtkWidget *item = gtk_check_menu_item_new_with_label (key);
+
+ gtk_widget_show (item);
+
+ gtk_menu_shell_append (window->menu, item);
+
+ gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item),
+ (psppire_window_register_lookup (psppire_window_register_new (), key) == window));
+
+ g_hash_table_insert (window->menuitem_table, key, item);
+}
+
+static void
+insert_item (gpointer key, gpointer value, gpointer data)
+{
+ PsppireWindow *window = PSPPIRE_WINDOW (data);
+
+ if ( NULL != g_hash_table_lookup (window->menuitem_table, key))
+ return;
+
+ insert_menuitem_into_menu (window, key);
+}
+
+/* Insert a new item into the window menu */
+static void
+insert_menuitem (GObject *reg, const gchar *key, gpointer data)
+{
+ PsppireWindow *window = PSPPIRE_WINDOW (data);
+
+ insert_menuitem_into_menu (window, (gpointer) key);
+}
+
+
+static void
+remove_menuitem (PsppireWindowRegister *reg, const gchar *key, gpointer data)
+{
+ PsppireWindow *window = PSPPIRE_WINDOW (data);
+ GtkWidget *item ;
+
+ if ( !GTK_WIDGET_REALIZED (window))
+ return;
+
+ item = g_hash_table_lookup (window->menuitem_table, key);
+
+ g_hash_table_remove (window->menuitem_table, key);
+
+ gtk_container_remove (GTK_CONTAINER (window->menu), item);
+}