+static void
+test_file_chooser_button (gconstpointer data)
+{
+ const FileChooserButtonTest *setup = data;
+ WindowAndButton w;
+ SignalWatcher *watcher;
+ GtkWidget *fc_dialog;
+ int iterations;
+ int i;
+
+ w = create_window_and_file_chooser_button (setup->action);
+
+ watcher = signal_watcher_new (G_OBJECT (w.fc_button));
+ signal_watcher_watch_signal (watcher, "current-folder-changed");
+ signal_watcher_watch_signal (watcher, "selection-changed");
+
+ if (setup->initial_current_folder)
+ gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (w.fc_button), setup->initial_current_folder);
+
+ if (setup->initial_filename)
+ gtk_file_chooser_select_filename (GTK_FILE_CHOOSER (w.fc_button), setup->initial_filename);
+
+ gtk_widget_show_all (w.window);
+ wait_for_idle ();
+
+ if (setup->initial_current_folder)
+ g_assert (signal_watcher_expect (watcher, "current-folder-changed"));
+
+ if (setup->initial_filename)
+ g_assert (signal_watcher_expect (watcher, "selection-changed"));
+
+ check_that_basename_is_shown (GTK_FILE_CHOOSER_BUTTON (w.fc_button),
+ get_expected_shown_filename (setup->action, setup->initial_current_folder, setup->initial_filename));
+
+ /* If there is a dialog to be opened, we actually test going through it a
+ * couple of times. This ensures that any state that the button frobs for
+ * each appearance of the dialog will make sense.
+ */
+ if (setup->open_dialog)
+ iterations = 2;
+ else
+ iterations = 1;
+
+ for (i = 0; i < iterations; i++)
+ {
+ GtkFileChooser *chooser_to_tweak;
+
+ if (setup->open_dialog)
+ {
+ GList *children;
+
+ /* Hack our way into the file chooser button; get its GtkButton child and click it */
+ children = gtk_container_get_children (GTK_CONTAINER (w.fc_button));
+ g_assert (children && GTK_IS_BUTTON (children->data));
+ gtk_button_clicked (GTK_BUTTON (children->data));
+ g_list_free (children);
+
+ wait_for_idle ();
+
+ fc_dialog = get_file_chooser_dialog_from_button (GTK_FILE_CHOOSER_BUTTON (w.fc_button));
+ }
+
+ if (setup->what_to_tweak == BUTTON)
+ chooser_to_tweak = GTK_FILE_CHOOSER (w.fc_button);
+ else if (setup->what_to_tweak == DIALOG)
+ chooser_to_tweak = GTK_FILE_CHOOSER (fc_dialog);
+ else
+ g_assert_not_reached ();
+
+ /* Okay, now frob the button or its optional dialog */
+
+ if (setup->tweak_current_folder)
+ {
+ if (setup->what_to_tweak == BUTTON)
+ signal_watcher_watch_signal (watcher, "current-folder-changed");
+
+ gtk_file_chooser_set_current_folder (chooser_to_tweak, setup->tweak_current_folder);
+
+ if (setup->what_to_tweak == BUTTON)
+ g_assert (signal_watcher_expect (watcher, "current-folder-changed"));
+ }
+
+ if (setup->tweak_filename)
+ {
+ if (setup->what_to_tweak == BUTTON)
+ signal_watcher_watch_signal (watcher, "selection-changed");
+
+ gtk_file_chooser_select_filename (chooser_to_tweak, setup->tweak_filename);
+
+ if (setup->what_to_tweak == BUTTON)
+ g_assert (signal_watcher_expect (watcher, "selection-changed"));
+ }
+
+ if (setup->unselect_all)
+ {
+ if (setup->what_to_tweak == BUTTON)
+ signal_watcher_watch_signal (watcher, "selection-changed");
+
+ gtk_file_chooser_unselect_all (chooser_to_tweak);
+
+ if (setup->what_to_tweak == BUTTON)
+ g_assert (signal_watcher_expect (watcher, "selection-changed"));
+ }
+
+ wait_for_idle ();
+
+ if (setup->open_dialog)
+ {
+ gtk_dialog_response (GTK_DIALOG (fc_dialog), setup->dialog_response);
+ wait_for_idle ();
+
+ gtk_window_resize (GTK_WINDOW (fc_dialog), 500, 500);
+ }
+
+ if (setup->final_current_folder)
+ {
+ char *folder = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER (w.fc_button));
+
+ g_assert_cmpstr (folder, ==, setup->final_current_folder);
+ g_free (folder);
+ }
+
+ if (setup->final_filename)
+ {
+ char *filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (w.fc_button));
+
+ g_assert_cmpstr (filename, ==, setup->final_filename);
+ g_free (filename);
+ }
+
+ check_that_basename_is_shown (GTK_FILE_CHOOSER_BUTTON (w.fc_button),
+ get_expected_shown_filename (setup->action, setup->final_current_folder, setup->final_filename));
+ }
+
+ signal_watcher_destroy (watcher);
+ gtk_widget_destroy (w.window);
+}
+
+static int
+find_accessible_action_num (AtkObject *object, const char *action_name)
+{
+ AtkAction *action_a;
+ int num_actions;
+ int i;
+
+ action_a = ATK_ACTION (object);
+
+ num_actions = atk_action_get_n_actions (action_a);
+
+ for (i = 0; i < num_actions; i++)
+ if (strcmp (atk_action_get_name (action_a, i), action_name) == 0)
+ return i;
+
+ return -1;
+}
+
+static void
+do_accessible_action (AtkObject *object, const char *action_name)
+{
+ int action_num;
+
+ action_num = find_accessible_action_num (object, action_name);
+ g_assert (action_num != -1);
+
+ atk_action_do_action (ATK_ACTION (object), action_num);
+}
+
+static void
+test_file_chooser_button_combo_box_1 (void)
+{
+ WindowAndButton w;
+ GtkWidget *combo_box;
+ AtkObject *combo_box_a;
+ AtkObject *menu_a;
+ int num_items;
+ int other_index;
+ AtkObject *item_a;
+ GtkWidget *fc_dialog;
+
+ w = create_window_and_file_chooser_button (GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
+
+ gtk_file_chooser_select_filename (GTK_FILE_CHOOSER (w.fc_button), FOLDER_NAME);
+
+ gtk_widget_show_all (w.window);
+
+ /* Get the accessible for the combo box */
+
+ combo_box = find_child_widget_with_atk_role (GTK_WIDGET (w.fc_button), ATK_ROLE_COMBO_BOX);
+ combo_box_a = gtk_widget_get_accessible (combo_box);
+
+ /* Press the combo box to bring up the menu */
+
+ do_accessible_action (combo_box_a, "press");
+ sleep_in_main_loop (); /* have to wait because bringing up the menu is asynchronous... */
+
+ /* Get the menu from the combo box; it's the first child */
+
+ menu_a = atk_object_ref_accessible_child (combo_box_a, 0);
+ g_assert (atk_object_get_role (menu_a) == ATK_ROLE_MENU);
+
+ /* Check that the last item in the menu is the "Other…" one */
+
+ num_items = atk_object_get_n_accessible_children (menu_a);
+ g_assert (num_items > 0);
+
+ other_index = num_items - 1;
+
+ item_a = atk_object_ref_accessible_child (menu_a, other_index);
+ g_assert_cmpstr (atk_object_get_name (item_a), ==, "Other…"); /* FIXME: how do we translate this? */
+
+ /* Activate the item */
+
+ do_accessible_action (item_a, "click");
+
+ /* Cancel the dialog */
+
+ sleep_in_main_loop ();
+ fc_dialog = get_file_chooser_dialog_from_button (GTK_FILE_CHOOSER_BUTTON (w.fc_button));
+
+ gtk_dialog_response (GTK_DIALOG (fc_dialog), GTK_RESPONSE_CANCEL);
+
+ /* Now check the selection in the combo box */
+ check_that_basename_is_shown (GTK_FILE_CHOOSER_BUTTON (w.fc_button), FOLDER_NAME);
+
+ gtk_widget_destroy (w.window);
+}
+
+static void
+setup_file_chooser_button_combo_box_tests (void)
+{
+ g_test_add_func ("/GtkFileChooserButton/combo_box-1", test_file_chooser_button_combo_box_1);
+}
+
+static FileChooserButtonTest button_tests[] =
+ {
+ /* OPEN tests without dialog */
+
+ {
+ "open-1",
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ NULL, /* initial_current_folder */
+ NULL, /* initial_filename */
+ FALSE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ 0, /* dialog_response */
+ FALSE, /* unselect_all */
+ NULL, /* final_current_folder */
+ NULL /* final_filename */
+ },
+ {
+ "open-2",
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ NULL, /* initial_current_folder */
+ FILE_NAME, /* initial_filename */
+ FALSE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ 0, /* dialog_response */
+ FALSE, /* unselect_all */
+ NULL, /* final_current_folder */
+ FILE_NAME /* final_filename */
+ },
+ {
+ "open-3",
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ NULL, /* initial_current_folder */
+ NULL, /* initial_filename */
+ FALSE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ FILE_NAME, /* tweak_filename */
+ 0, /* dialog_response */
+ FALSE, /* unselect_all */
+ NULL, /* final_current_folder */
+ FILE_NAME /* final_filename */
+ },
+ {
+ "open-4",
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ NULL, /* initial_current_folder */
+ FILE_NAME, /* initial_filename */
+ FALSE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ FILE_NAME_2, /* tweak_filename */
+ 0, /* dialog_response */
+ FALSE, /* unselect_all */
+ NULL, /* final_current_folder */
+ FILE_NAME_2 /* final_filename */
+ },
+ {
+ "open-5",
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ FOLDER_NAME, /* initial_current_folder */
+ NULL, /* initial_filename */
+ FALSE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ 0, /* dialog_response */
+ FALSE, /* unselect_all */
+ FOLDER_NAME, /* final_current_folder */
+ NULL /* final_filename */
+ },
+ {
+ "open-6",
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ FOLDER_NAME, /* initial_current_folder */
+ NULL, /* initial_filename */
+ FALSE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ FOLDER_NAME_2, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ 0, /* dialog_response */
+ FALSE, /* unselect_all */
+ FOLDER_NAME_2, /* final_current_folder */
+ NULL /* final_filename */
+ },
+
+ /* SELECT_FOLDER tests without dialog */
+
+ {
+ "select-folder-1",
+ GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+ NULL, /* initial_current_folder */
+ NULL, /* initial_filename */
+ FALSE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ 0, /* dialog_response */
+ FALSE, /* unselect_all */
+ NULL, /* final_current_folder */
+ NULL /* final_filename */
+ },
+ {
+ "select-folder-2",
+ GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+ NULL, /* initial_current_folder */
+ FOLDER_NAME, /* initial_filename */
+ FALSE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ 0, /* dialog_response */
+ FALSE, /* unselect_all */
+ NULL, /* final_current_folder */
+ FOLDER_NAME /* final_filename */
+ },
+ {
+ "select-folder-3",
+ GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+ NULL, /* initial_current_folder */
+ FOLDER_NAME, /* initial_filename */
+ FALSE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ FOLDER_NAME_2, /* tweak_filename */
+ 0, /* dialog_response */
+ FALSE, /* unselect_all */
+ NULL, /* final_current_folder */
+ FOLDER_NAME_2 /* final_filename */
+ },
+ {
+ "select-folder-4",
+ GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+ FOLDER_NAME, /* initial_current_folder */
+ NULL, /* initial_filename */
+ FALSE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ 0, /* dialog_response */
+ FALSE, /* unselect_all */
+ NULL, /* final_current_folder */
+ FOLDER_NAME /* final_filename */
+ },
+ {
+ "select-folder-5",
+ GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+ FOLDER_NAME, /* initial_current_folder */
+ NULL, /* initial_filename */
+ FALSE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ 0, /* dialog_response */
+ FALSE, /* unselect_all */
+ FOLDER_NAME, /* final_current_folder */
+ NULL /* final_filename */
+ },
+ {
+ "select-folder-6",
+ GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+ FOLDER_NAME, /* initial_current_folder */
+ NULL, /* initial_filename */
+ FALSE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ FOLDER_NAME_2, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ 0, /* dialog_response */
+ FALSE, /* unselect_all */
+ NULL, /* final_current_folder */
+ FOLDER_NAME_2 /* final_filename */
+ },
+ {
+ "select-folder-7",
+ GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+ FOLDER_NAME, /* initial_current_folder */
+ NULL, /* initial_filename */
+ FALSE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ FOLDER_NAME_2, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ 0, /* dialog_response */
+ FALSE, /* unselect_all */
+ FOLDER_NAME_2, /* final_current_folder */
+ NULL /* final_filename */
+ },
+ {
+ "select-folder-8",
+ GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+ FOLDER_NAME, /* initial_current_folder */
+ NULL, /* initial_filename */
+ FALSE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ FOLDER_NAME_2, /* tweak_filename */
+ 0, /* dialog_response */
+ FALSE, /* unselect_all */
+ NULL, /* final_current_folder */
+ FOLDER_NAME_2 /* final_filename */
+ },
+
+ /* OPEN tests with dialog, cancelled
+ *
+ * Test names are "open-dialog-cancel-A-B", where A and B can be:
+ *
+ * A:
+ * ni - no initial filename
+ * i - initial filename
+ * nf - no initial folder
+ * f - initial folder
+ *
+ * B:
+ * nt - no tweaks
+ * b - tweak button
+ * d - tweak dialog
+ */
+
+ {
+ "open-dialog-cancel-ni-nt",
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ NULL, /* initial_current_folder */
+ NULL, /* initial_filename */
+ TRUE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ GTK_RESPONSE_CANCEL, /* dialog_response */
+ FALSE, /* unselect_all */
+ NULL, /* final_current_folder */
+ NULL /* final_filename */
+ },
+ {
+ "open-dialog-cancel-ni-b",
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ NULL, /* initial_current_folder */
+ NULL, /* initial_filename */
+ TRUE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ FILE_NAME, /* tweak_filename */
+ GTK_RESPONSE_CANCEL, /* dialog_response */
+ FALSE, /* unselect_all */
+ NULL, /* final_current_folder */
+ FILE_NAME /* final_filename */
+ },
+ {
+ "open-dialog-cancel-ni-d",
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ NULL, /* initial_current_folder */
+ NULL, /* initial_filename */
+ TRUE, /* open_dialog */
+ DIALOG, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ FILE_NAME, /* tweak_filename */
+ GTK_RESPONSE_CANCEL, /* dialog_response */
+ FALSE, /* unselect_all */
+ NULL, /* final_current_folder */
+ NULL /* final_filename */
+ },
+ {
+ "open-dialog-cancel-i-nt",
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ NULL, /* initial_current_folder */
+ FILE_NAME, /* initial_filename */
+ TRUE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ GTK_RESPONSE_CANCEL, /* dialog_response */
+ FALSE, /* unselect_all */
+ NULL, /* final_current_folder */
+ FILE_NAME /* final_filename */
+ },
+ {
+ "open-dialog-cancel-i-b",
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ NULL, /* initial_current_folder */
+ FILE_NAME, /* initial_filename */
+ TRUE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ FILE_NAME_2, /* tweak_filename */
+ GTK_RESPONSE_CANCEL, /* dialog_response */
+ FALSE, /* unselect_all */
+ NULL, /* final_current_folder */
+ FILE_NAME_2 /* final_filename */
+ },
+ {
+ "open-dialog-cancel-i-d",
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ NULL, /* initial_current_folder */
+ FILE_NAME, /* initial_filename */
+ TRUE, /* open_dialog */
+ DIALOG, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ FILE_NAME_2, /* tweak_filename */
+ GTK_RESPONSE_CANCEL, /* dialog_response */
+ FALSE, /* unselect_all */
+ NULL, /* final_current_folder */
+ FILE_NAME /* final_filename */
+ },
+ {
+ "open-dialog-cancel-nf-nt",
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ NULL, /* initial_current_folder */
+ NULL, /* initial_filename */
+ TRUE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ GTK_RESPONSE_CANCEL, /* dialog_response */
+ FALSE, /* unselect_all */
+ NULL, /* final_current_folder */
+ NULL /* final_filename */
+ },
+ {
+ "open-dialog-cancel-nf-b",
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ NULL, /* initial_current_folder */
+ NULL, /* initial_filename */
+ TRUE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ FOLDER_NAME, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ GTK_RESPONSE_CANCEL, /* dialog_response */
+ FALSE, /* unselect_all */
+ FOLDER_NAME, /* final_current_folder */
+ NULL /* final_filename */
+ },
+ {
+ "open-dialog-cancel-nf-d",
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ NULL, /* initial_current_folder */
+ NULL, /* initial_filename */
+ TRUE, /* open_dialog */
+ DIALOG, /* what_to_tweak */
+ FOLDER_NAME, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ GTK_RESPONSE_CANCEL, /* dialog_response */
+ FALSE, /* unselect_all */
+ NULL, /* final_current_folder */
+ NULL /* final_filename */
+ },
+ {
+ "open-dialog-cancel-f-nt",
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ FOLDER_NAME, /* initial_current_folder */
+ NULL, /* initial_filename */
+ TRUE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ GTK_RESPONSE_CANCEL, /* dialog_response */
+ FALSE, /* unselect_all */
+ FOLDER_NAME, /* final_current_folder */
+ NULL /* final_filename */
+ },
+ {
+ "open-dialog-cancel-f-b",
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ FOLDER_NAME, /* initial_current_folder */
+ NULL, /* initial_filename */
+ TRUE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ FOLDER_NAME_2, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ GTK_RESPONSE_CANCEL, /* dialog_response */
+ FALSE, /* unselect_all */
+ FOLDER_NAME_2, /* final_current_folder */
+ NULL /* final_filename */
+ },
+ {
+ "open-dialog-cancel-f-d",
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ FOLDER_NAME, /* initial_current_folder */
+ NULL, /* initial_filename */
+ TRUE, /* open_dialog */
+ DIALOG, /* what_to_tweak */
+ FOLDER_NAME_2, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ GTK_RESPONSE_CANCEL, /* dialog_response */
+ FALSE, /* unselect_all */
+ FOLDER_NAME, /* final_current_folder */
+ NULL /* final_filename */
+ },
+
+ /* OPEN tests with dialog, cancelled via closing the dialog (not by selecting the Cancel button) */
+
+ {
+ "open-dialog-close-ni-nt",
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ NULL, /* initial_current_folder */
+ NULL, /* initial_filename */
+ TRUE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ GTK_RESPONSE_DELETE_EVENT,/* dialog_response */
+ FALSE, /* unselect_all */
+ NULL, /* final_current_folder */
+ NULL /* final_filename */
+ },
+ {
+ "open-dialog-close-ni-b",
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ NULL, /* initial_current_folder */
+ NULL, /* initial_filename */
+ TRUE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ FILE_NAME, /* tweak_filename */
+ GTK_RESPONSE_DELETE_EVENT,/* dialog_response */
+ FALSE, /* unselect_all */
+ NULL, /* final_current_folder */
+ FILE_NAME /* final_filename */
+ },
+ {
+ "open-dialog-close-ni-d",
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ NULL, /* initial_current_folder */
+ NULL, /* initial_filename */
+ TRUE, /* open_dialog */
+ DIALOG, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ FILE_NAME, /* tweak_filename */
+ GTK_RESPONSE_DELETE_EVENT,/* dialog_response */
+ FALSE, /* unselect_all */
+ NULL, /* final_current_folder */
+ NULL /* final_filename */
+ },
+ {
+ "open-dialog-close-i-nt",
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ NULL, /* initial_current_folder */
+ FILE_NAME, /* initial_filename */
+ TRUE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ GTK_RESPONSE_DELETE_EVENT,/* dialog_response */
+ FALSE, /* unselect_all */
+ NULL, /* final_current_folder */
+ FILE_NAME /* final_filename */
+ },
+ {
+ "open-dialog-close-i-b",
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ NULL, /* initial_current_folder */
+ FILE_NAME, /* initial_filename */
+ TRUE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ FILE_NAME_2, /* tweak_filename */
+ GTK_RESPONSE_DELETE_EVENT,/* dialog_response */
+ FALSE, /* unselect_all */
+ NULL, /* final_current_folder */
+ FILE_NAME_2 /* final_filename */
+ },
+ {
+ "open-dialog-close-i-d",
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ NULL, /* initial_current_folder */
+ FILE_NAME, /* initial_filename */
+ TRUE, /* open_dialog */
+ DIALOG, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ FILE_NAME_2, /* tweak_filename */
+ GTK_RESPONSE_DELETE_EVENT,/* dialog_response */
+ FALSE, /* unselect_all */
+ NULL, /* final_current_folder */
+ FILE_NAME /* final_filename */
+ },
+ {
+ "open-dialog-close-nf-nt",
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ NULL, /* initial_current_folder */
+ NULL, /* initial_filename */
+ TRUE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ GTK_RESPONSE_DELETE_EVENT,/* dialog_response */
+ FALSE, /* unselect_all */
+ NULL, /* final_current_folder */
+ NULL /* final_filename */
+ },
+ {
+ "open-dialog-close-nf-b",
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ NULL, /* initial_current_folder */
+ NULL, /* initial_filename */
+ TRUE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ FOLDER_NAME, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ GTK_RESPONSE_DELETE_EVENT,/* dialog_response */
+ FALSE, /* unselect_all */
+ FOLDER_NAME, /* final_current_folder */
+ NULL /* final_filename */
+ },
+ {
+ "open-dialog-close-nf-d",
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ NULL, /* initial_current_folder */
+ NULL, /* initial_filename */
+ TRUE, /* open_dialog */
+ DIALOG, /* what_to_tweak */
+ FOLDER_NAME, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ GTK_RESPONSE_DELETE_EVENT,/* dialog_response */
+ FALSE, /* unselect_all */
+ NULL, /* final_current_folder */
+ NULL /* final_filename */
+ },
+ {
+ "open-dialog-close-f-nt",
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ FOLDER_NAME, /* initial_current_folder */
+ NULL, /* initial_filename */
+ TRUE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ GTK_RESPONSE_DELETE_EVENT,/* dialog_response */
+ FALSE, /* unselect_all */
+ FOLDER_NAME, /* final_current_folder */
+ NULL /* final_filename */
+ },
+ {
+ "open-dialog-close-f-b",
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ FOLDER_NAME, /* initial_current_folder */
+ NULL, /* initial_filename */
+ TRUE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ FOLDER_NAME_2, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ GTK_RESPONSE_DELETE_EVENT,/* dialog_response */
+ FALSE, /* unselect_all */
+ FOLDER_NAME_2, /* final_current_folder */
+ NULL /* final_filename */
+ },
+ {
+ "open-dialog-close-f-d",
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ FOLDER_NAME, /* initial_current_folder */
+ NULL, /* initial_filename */
+ TRUE, /* open_dialog */
+ DIALOG, /* what_to_tweak */
+ FOLDER_NAME_2, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ GTK_RESPONSE_DELETE_EVENT,/* dialog_response */
+ FALSE, /* unselect_all */
+ FOLDER_NAME, /* final_current_folder */
+ NULL /* final_filename */
+ },
+
+ /* SELECT_FOLDER tests with dialog, cancelled */
+
+ {
+ "select-folder-dialog-cancel-1",
+ GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+ NULL, /* initial_current_folder */
+ NULL, /* initial_filename */
+ TRUE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ GTK_RESPONSE_CANCEL, /* dialog_response */
+ FALSE, /* unselect_all */
+ NULL, /* final_current_folder */
+ NULL /* final_filename */
+ },
+ {
+ "select-folder-dialog-cancel-2",
+ GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+ NULL, /* initial_current_folder */
+ FOLDER_NAME, /* initial_filename */
+ TRUE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ GTK_RESPONSE_CANCEL, /* dialog_response */
+ FALSE, /* unselect_all */
+ NULL, /* final_current_folder */
+ FOLDER_NAME /* final_filename */
+ },
+ {
+ "select-folder-dialog-cancel-3",
+ GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+ FOLDER_NAME, /* initial_current_folder */
+ NULL, /* initial_filename */
+ TRUE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ GTK_RESPONSE_CANCEL, /* dialog_response */
+ FALSE, /* unselect_all */
+ FOLDER_NAME, /* final_current_folder */
+ NULL /* final_filename */
+ },
+ {
+ "select-folder-dialog-cancel-4",
+ GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+ FOLDER_NAME, /* initial_current_folder */
+ NULL, /* initial_filename */
+ TRUE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ GTK_RESPONSE_CANCEL, /* dialog_response */
+ FALSE, /* unselect_all */
+ NULL, /* final_current_folder */
+ FOLDER_NAME /* final_filename */
+ },
+ {
+ "select-folder-dialog-cancel-5",
+ GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+ NULL, /* initial_current_folder */
+ NULL, /* initial_filename */
+ TRUE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ FOLDER_NAME, /* tweak_filename */
+ GTK_RESPONSE_CANCEL, /* dialog_response */
+ FALSE, /* unselect_all */
+ NULL, /* final_current_folder */
+ NULL /* final_filename */
+ },
+ {
+ "select-folder-dialog-cancel-6",
+ GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+ NULL, /* initial_current_folder */
+ FOLDER_NAME, /* initial_filename */
+ TRUE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ FOLDER_NAME_2, /* tweak_filename */
+ GTK_RESPONSE_CANCEL, /* dialog_response */
+ FALSE, /* unselect_all */
+ NULL, /* final_current_folder */
+ FOLDER_NAME /* final_filename */
+ },
+ {
+ "select-folder-dialog-cancel-7",
+ GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+ FOLDER_NAME, /* initial_current_folder */
+ NULL, /* initial_filename */
+ TRUE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ FOLDER_NAME_2, /* tweak_filename */
+ GTK_RESPONSE_CANCEL, /* dialog_response */
+ FALSE, /* unselect_all */
+ FOLDER_NAME, /* final_current_folder */
+ NULL /* final_filename */
+ },
+ {
+ "select-folder-dialog-cancel-8",
+ GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+ FOLDER_NAME, /* initial_current_folder */
+ NULL, /* initial_filename */
+ TRUE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ FOLDER_NAME_2, /* tweak_filename */
+ GTK_RESPONSE_CANCEL, /* dialog_response */
+ FALSE, /* unselect_all */
+ NULL, /* final_current_folder */
+ FOLDER_NAME /* final_filename */
+ },
+
+ /* SELECT_FOLDER tests with dialog, cancelled via closing the dialog (not selecting the Cancel button) */
+
+ {
+ "select-folder-dialog-close-1",
+ GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+ NULL, /* initial_current_folder */
+ NULL, /* initial_filename */
+ TRUE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ GTK_RESPONSE_DELETE_EVENT,/* dialog_response */
+ FALSE, /* unselect_all */
+ NULL, /* final_current_folder */
+ NULL /* final_filename */
+ },
+ {
+ "select-folder-dialog-close-2",
+ GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+ NULL, /* initial_current_folder */
+ FOLDER_NAME, /* initial_filename */
+ TRUE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ GTK_RESPONSE_DELETE_EVENT,/* dialog_response */
+ FALSE, /* unselect_all */
+ NULL, /* final_current_folder */
+ FOLDER_NAME /* final_filename */
+ },
+ {
+ "select-folder-dialog-close-3",
+ GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+ FOLDER_NAME, /* initial_current_folder */
+ NULL, /* initial_filename */
+ TRUE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ GTK_RESPONSE_DELETE_EVENT,/* dialog_response */
+ FALSE, /* unselect_all */
+ FOLDER_NAME, /* final_current_folder */
+ NULL /* final_filename */
+ },
+ {
+ "select-folder-dialog-close-4",
+ GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+ FOLDER_NAME, /* initial_current_folder */
+ NULL, /* initial_filename */
+ TRUE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ GTK_RESPONSE_DELETE_EVENT,/* dialog_response */
+ FALSE, /* unselect_all */
+ NULL, /* final_current_folder */
+ FOLDER_NAME /* final_filename */
+ },
+ {
+ "select-folder-dialog-close-5",
+ GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+ NULL, /* initial_current_folder */
+ NULL, /* initial_filename */
+ TRUE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ FOLDER_NAME, /* tweak_filename */
+ GTK_RESPONSE_DELETE_EVENT,/* dialog_response */
+ FALSE, /* unselect_all */
+ NULL, /* final_current_folder */
+ NULL /* final_filename */
+ },
+ {
+ "select-folder-dialog-close-6",
+ GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+ NULL, /* initial_current_folder */
+ FOLDER_NAME, /* initial_filename */
+ TRUE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ FOLDER_NAME_2, /* tweak_filename */
+ GTK_RESPONSE_DELETE_EVENT,/* dialog_response */
+ FALSE, /* unselect_all */
+ NULL, /* final_current_folder */
+ FOLDER_NAME /* final_filename */
+ },
+ {
+ "select-folder-dialog-close-7",
+ GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+ FOLDER_NAME, /* initial_current_folder */
+ NULL, /* initial_filename */
+ TRUE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ FOLDER_NAME_2, /* tweak_filename */
+ GTK_RESPONSE_DELETE_EVENT,/* dialog_response */
+ FALSE, /* unselect_all */
+ FOLDER_NAME, /* final_current_folder */
+ NULL /* final_filename */
+ },
+ {
+ "select-folder-dialog-close-8",
+ GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+ FOLDER_NAME, /* initial_current_folder */
+ NULL, /* initial_filename */
+ TRUE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ FOLDER_NAME_2, /* tweak_filename */
+ GTK_RESPONSE_DELETE_EVENT,/* dialog_response */
+ FALSE, /* unselect_all */
+ NULL, /* final_current_folder */
+ FOLDER_NAME /* final_filename */
+ },
+
+ /* OPEN tests with dialog */
+
+ {
+ "open-dialog-1",
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ NULL, /* initial_current_folder */
+ NULL, /* initial_filename */
+ TRUE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ FILE_NAME, /* tweak_filename */
+ GTK_RESPONSE_ACCEPT, /* dialog_response */
+ FALSE, /* unselect_all */
+ NULL, /* final_current_folder */
+ FILE_NAME /* final_filename */
+ },
+ {
+ "open-dialog-2",
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ NULL, /* initial_current_folder */
+ FILE_NAME, /* initial_filename */
+ TRUE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ GTK_RESPONSE_ACCEPT, /* dialog_response */
+ FALSE, /* unselect_all */
+ NULL, /* final_current_folder */
+ FILE_NAME /* final_filename */
+ },
+ {
+ "open-dialog-3",
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ NULL, /* initial_current_folder */
+ FILE_NAME, /* initial_filename */
+ TRUE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ FILE_NAME_2, /* tweak_filename */
+ GTK_RESPONSE_ACCEPT, /* dialog_response */
+ FALSE, /* unselect_all */
+ NULL, /* final_current_folder */
+ FILE_NAME_2 /* final_filename */
+ },
+ {
+ "open-dialog-4",
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ FOLDER_NAME, /* initial_current_folder */
+ NULL, /* initial_filename */
+ TRUE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ FILE_NAME, /* tweak_filename */
+ GTK_RESPONSE_ACCEPT, /* dialog_response */
+ FALSE, /* unselect_all */
+ NULL, /* final_current_folder */
+ FILE_NAME /* final_filename */
+ },
+
+ /* SELECT_FOLDER tests with dialog */
+
+ {
+ "select-folder-dialog-1",
+ GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+ NULL, /* initial_current_folder */
+ FOLDER_NAME, /* initial_filename */
+ TRUE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ GTK_RESPONSE_ACCEPT, /* dialog_response */
+ FALSE, /* unselect_all */
+ NULL, /* final_current_folder */
+ FOLDER_NAME /* final_filename */
+ },
+ {
+ "select-folder-dialog-2",
+ GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+ FOLDER_NAME, /* initial_current_folder */
+ NULL, /* initial_filename */
+ TRUE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ GTK_RESPONSE_ACCEPT, /* dialog_response */
+ FALSE, /* unselect_all */
+ NULL, /* final_current_folder */
+ FOLDER_NAME /* final_filename */
+ },
+ {
+ "select-folder-dialog-3",
+ GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+ NULL, /* initial_current_folder */
+ FOLDER_NAME, /* initial_filename */
+ TRUE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ FOLDER_NAME_2, /* tweak_filename */
+ GTK_RESPONSE_ACCEPT, /* dialog_response */
+ FALSE, /* unselect_all */
+ NULL, /* final_current_folder */
+ FOLDER_NAME_2 /* final_filename */
+ },
+ {
+ "select-folder-dialog-4",
+ GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+ FOLDER_NAME, /* initial_current_folder */
+ NULL, /* initial_filename */
+ TRUE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ FOLDER_NAME_2, /* tweak_filename */
+ GTK_RESPONSE_ACCEPT, /* dialog_response */
+ FALSE, /* unselect_all */
+ NULL, /* final_current_folder */
+ FOLDER_NAME_2 /* final_filename */
+ },
+
+ /* Unselection tests */
+ {
+ "unselect-all-1",
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ NULL, /* initial_current_folder */
+ NULL, /* initial_filename */
+ FALSE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ 0, /* dialog_response */
+ TRUE, /* unselect_all */
+ NULL, /* final_current_folder */
+ NULL /* final_filename */
+ },
+ {
+ "unselect-all-2",
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ NULL, /* initial_current_folder */
+ FILE_NAME, /* initial_filename */
+ FALSE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ 0, /* dialog_response */
+ TRUE, /* unselect_all */
+ NULL, /* final_current_folder */
+ NULL /* final_filename */
+ },
+ {
+ "unselect-all-3",
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ NULL, /* initial_current_folder */
+ FILE_NAME, /* initial_filename */
+ FALSE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ FILE_NAME_2, /* tweak_filename */
+ 0, /* dialog_response */
+ TRUE, /* unselect_all */
+ NULL, /* final_current_folder */
+ NULL /* final_filename */
+ },
+ {
+ "unselect-all-4",
+ GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+ NULL, /* initial_current_folder */
+ NULL, /* initial_filename */
+ FALSE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ 0, /* dialog_response */
+ TRUE, /* unselect_all */
+ NULL, /* final_current_folder */
+ NULL /* final_filename */
+ },
+ {
+ "unselect-all-5",
+ GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+ NULL, /* initial_current_folder */
+ FOLDER_NAME, /* initial_filename */
+ FALSE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ NULL, /* tweak_filename */
+ 0, /* dialog_response */
+ TRUE, /* unselect_all */
+ NULL, /* final_current_folder */
+ NULL /* final_filename */
+ },
+ {
+ "unselect-all-6",
+ GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+ NULL, /* initial_current_folder */
+ FOLDER_NAME, /* initial_filename */
+ FALSE, /* open_dialog */
+ BUTTON, /* what_to_tweak */
+ NULL, /* tweak_current_folder */
+ FOLDER_NAME_2, /* tweak_filename */
+ 0, /* dialog_response */
+ TRUE, /* unselect_all */
+ NULL, /* final_current_folder */
+ NULL /* final_filename */
+ },
+
+ };
+
+static void
+setup_file_chooser_button_tests (void)
+{
+ int i;
+
+ for (i = 0; i < G_N_ELEMENTS (button_tests); i++)
+ {
+ char *test_name;
+
+ test_name = make_button_test_name (&button_tests[i]);
+ g_test_add_data_func (test_name, &button_tests[i], test_file_chooser_button);
+ g_free (test_name);
+ }
+
+ setup_file_chooser_button_combo_box_tests ();
+}
+
+#ifdef BROKEN_TESTS