I found it a bit confusing before, that the list of windows in the
Windows menu was not separated from the list of actions of windows.
This fixes the problem.
Simply adding a separator item to the .ui files doesn't work, because
GtkUIManager removes it. The same thing happens if we add a separator
without adding a real menu item at the same time.
Thanks to John Darrington for suggesting the root of the problem.
static void
insert_menuitem_into_menu (PsppireWindow *window, gpointer key)
{
static void
insert_menuitem_into_menu (PsppireWindow *window, gpointer key)
{
- gchar *filename = g_filename_display_name (key);
- GtkWidget *item = gtk_check_menu_item_new_with_label (filename);
+ gchar *filename;
+ GtkWidget *item;
+ /* Add a separator before adding the first real item. If we add a separator
+ at any other time, sometimes GtkUIManager removes it. */
+ if (g_hash_table_size (window->menuitem_table) == 0)
+ {
+ GtkWidget *separator = gtk_separator_menu_item_new ();
+ gtk_widget_show (separator);
+ gtk_menu_shell_append (window->menu, separator);
+ }
+
+ filename = g_filename_display_name (key);
+ item = gtk_check_menu_item_new_with_label (filename);
g_free (filename);
g_signal_connect (item, "toggled", G_CALLBACK (menu_toggled), NULL);
g_free (filename);
g_signal_connect (item, "toggled", G_CALLBACK (menu_toggled), NULL);