+ {
+ GtkRecentFilter *filter = gtk_recent_filter_new ();
+
+ gtk_recent_filter_add_mime_type (filter, "application/x-spss-sav");
+ gtk_recent_filter_add_mime_type (filter, "application/x-spss-por");
+
+ gtk_recent_chooser_set_sort_type (GTK_RECENT_CHOOSER (menu_data), GTK_RECENT_SORT_MRU);
+
+ gtk_recent_chooser_add_filter (GTK_RECENT_CHOOSER (menu_data), filter);
+ }
+
+ g_signal_connect (menu_data, "selection-done", G_CALLBACK (on_recent_data_select), dw);
+
+ {
+ GtkRecentFilter *filter = gtk_recent_filter_new ();
+
+ gtk_recent_filter_add_pattern (filter, "*.sps");
+ gtk_recent_filter_add_pattern (filter, "*.SPS");
+
+ gtk_recent_chooser_set_sort_type (GTK_RECENT_CHOOSER (menu_files), GTK_RECENT_SORT_MRU);
+
+ gtk_recent_chooser_add_filter (GTK_RECENT_CHOOSER (menu_files), filter);
+ }
+
+ g_signal_connect (menu_files, "selection-done", G_CALLBACK (on_recent_files_select), dw);
+ }
+
+ gtk_menu_attach (GTK_MENU (menu), gtk_separator_menu_item_new (), 0, 1, 12, 13);
+
+ {
+ GtkWidget *quit = gtk_menu_item_new_with_mnemonic (_("_Quit"));
+ gtk_menu_attach (GTK_MENU (menu), quit, 0, 1, 13, 14);
+
+ connect_action_to_menuitem (G_ACTION_MAP (g_application_get_default ()),
+ "quit", quit, "<Ctrl>Q");
+ }
+
+ g_object_set (menuitem, "submenu", menu, NULL);
+ gtk_widget_show_all (menuitem);
+
+ return menuitem;
+}
+
+
+static GtkWidget *
+create_edit_menu (PsppireDataWindow *dw)
+{
+ int i = 0;
+ GtkWidget *menuitem = gtk_menu_item_new_with_mnemonic (_("_Edit"));
+
+ GtkWidget *menu = gtk_menu_new ();
+
+ dw->mi_insert_var = gtk_menu_item_new_with_mnemonic (_("_Insert Variable"));
+ dw->mi_insert_case = gtk_menu_item_new_with_mnemonic (_("_Insert Case"));
+ GtkWidget *go_to_variable = gtk_menu_item_new_with_mnemonic (_("_Go To Variable..."));
+ dw->mi_go_to_case = gtk_menu_item_new_with_mnemonic (_("_Go To Case..."));
+
+ gtk_menu_attach (GTK_MENU (menu), dw->mi_insert_var, 0, 1, i, i + 1); ++i;
+ gtk_menu_attach (GTK_MENU (menu), dw->mi_insert_case, 0, 1, i, i + 1); ++i;
+
+ g_signal_connect_swapped (dw->mi_insert_case, "activate", G_CALLBACK (insert_case_at_row), dw);
+ g_signal_connect_swapped (dw->mi_go_to_case, "activate", G_CALLBACK (goto_case), dw);
+ g_signal_connect_swapped (dw->mi_insert_var, "activate", G_CALLBACK (insert_variable), dw);
+
+ GAction *a = g_action_map_lookup_action (G_ACTION_MAP (dw), "PsppireDialogActionVarInfo");
+ g_assert (a);
+ g_signal_connect_swapped (go_to_variable, "activate", G_CALLBACK (psppire_dialog_action_activate_null), a);
+
+ gtk_menu_attach (GTK_MENU (menu), go_to_variable, 0, 1, i, i + 1); ++i;
+ gtk_menu_attach (GTK_MENU (menu), dw->mi_go_to_case, 0, 1, i, i + 1); ++i;
+
+ {
+ GtkAccelGroup *ag = gtk_accel_group_new ();
+
+ dw->mi_edit_separator = gtk_separator_menu_item_new ();
+ gtk_menu_attach (GTK_MENU (menu), dw->mi_edit_separator, 0, 1, i, i + 1); ++i;
+
+ dw->mi_cut = gtk_menu_item_new_with_mnemonic (_("Cu_t"));
+ gtk_menu_attach (GTK_MENU (menu), dw->mi_cut, 0, 1, i, i + 1); ++i;
+ g_signal_connect_swapped (dw->mi_cut, "activate", G_CALLBACK (on_cut), dw);
+
+ gtk_window_add_accel_group (GTK_WINDOW (dw), ag);
+ gtk_widget_add_accelerator (dw->mi_cut, "activate", ag,
+ 'X', GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
+
+ dw->mi_copy = gtk_menu_item_new_with_mnemonic (_("_Copy"));
+ gtk_menu_attach (GTK_MENU (menu), dw->mi_copy, 0, 1, i, i + 1); ++i;
+ g_signal_connect_swapped (dw->mi_copy, "activate", G_CALLBACK (on_copy), dw);
+ gtk_widget_add_accelerator (dw->mi_copy, "activate", ag,
+ 'C', GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
+
+ dw->mi_paste = gtk_menu_item_new_with_mnemonic (_("_Paste"));
+ gtk_menu_attach (GTK_MENU (menu), dw->mi_paste, 0, 1, i, i + 1); ++i;
+ g_signal_connect_swapped (dw->mi_paste, "activate", G_CALLBACK (on_paste), dw);
+ gtk_widget_add_accelerator (dw->mi_paste, "activate", ag,
+ 'V', GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
+
+ dw->mi_clear_variables = gtk_menu_item_new_with_mnemonic (_("Clear _Variables"));
+ gtk_menu_attach (GTK_MENU (menu), dw->mi_clear_variables, 0, 1, i, i + 1); ++i;
+ g_signal_connect_swapped (dw->mi_clear_variables, "activate", G_CALLBACK (on_clear_variables), dw);
+
+ dw->mi_clear_cases = gtk_menu_item_new_with_mnemonic (_("Cl_ear Cases"));
+ gtk_menu_attach (GTK_MENU (menu), dw->mi_clear_cases, 0, 1, i, i + 1); ++i;
+ g_signal_connect_swapped (dw->mi_clear_cases, "activate", G_CALLBACK (on_clear_cases), dw);
+ }
+
+ {
+ dw->mi_find_separator = gtk_separator_menu_item_new ();
+ gtk_menu_attach (GTK_MENU (menu), dw->mi_find_separator, 0, 1, i, i + 1); ++i;
+
+ dw->mi_find = gtk_menu_item_new_with_mnemonic (_("_Find..."));
+ g_signal_connect_swapped (dw->mi_find, "activate", G_CALLBACK (find_dialog), dw);
+ gtk_menu_attach (GTK_MENU (menu), dw->mi_find, 0, 1, i, i + 1); ++i;
+ }