static GtkFileChooser * get_file_chooser (const gchar *title, GtkFileChooserAction action, gboolean select_multiple) { #ifdef USE_GTK_NATIVE_FILE_CHOOSER GtkFileChooserNative *dlg = gtk_file_chooser_native_new (title, GTK_WINDOW (mainwin), action, NULL, NULL); #else GtkWidget *dlg = gtk_file_chooser_dialog_new (title, GTK_WINDOW (mainwin), action, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); if (action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER) { GtkWidget *box = gtk_hbox_new (FALSE, 8); gtk_widget_show (box); GtkWidget *check = gtk_check_button_new_with_mnemonic (_("Follow symlinks")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), deadbeef->conf_get_int ("add_folders_follow_symlinks", 0)); g_signal_connect ((gpointer) check, "toggled", G_CALLBACK (on_follow_symlinks_toggled), NULL); gtk_widget_show (check); gtk_box_pack_start (GTK_BOX (box), check, FALSE, FALSE, 0); gtk_file_chooser_set_extra_widget (GTK_FILE_CHOOSER (dlg), box); } #endif gtk_file_chooser_set_select_multiple (GTK_FILE_CHOOSER (dlg), select_multiple); return GTK_FILE_CHOOSER (dlg); }
static void ide_editor_perspective_actions_open_file (GSimpleAction *action, GVariant *variant, gpointer user_data) { IdeEditorPerspective *self = user_data; GtkFileChooserNative *chooser; IdeWorkbench *workbench; gint ret; g_assert (G_IS_SIMPLE_ACTION (action)); g_assert (IDE_IS_EDITOR_PERSPECTIVE (self)); workbench = ide_widget_get_workbench (GTK_WIDGET (self)); if (workbench == NULL) { g_warning ("Failed to locate workbench"); return; } chooser = gtk_file_chooser_native_new (_("Open File"), GTK_WINDOW (workbench), GTK_FILE_CHOOSER_ACTION_OPEN, _("Open"), _("Cancel")); gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (chooser), FALSE); gtk_file_chooser_set_select_multiple (GTK_FILE_CHOOSER (chooser), TRUE); ret = gtk_native_dialog_run (GTK_NATIVE_DIALOG (chooser)); if (ret == GTK_RESPONSE_ACCEPT) { g_autoptr(GPtrArray) ar = NULL; GSList *files; ar = g_ptr_array_new_with_free_func (g_object_unref); files = gtk_file_chooser_get_files (GTK_FILE_CHOOSER (chooser)); for (const GSList *iter = files; iter; iter = iter->next) g_ptr_array_add (ar, iter->data); g_slist_free (files); if (ar->len > 0) ide_workbench_open_files_async (workbench, (GFile **)ar->pdata, ar->len, "editor", IDE_WORKBENCH_OPEN_FLAGS_NONE, NULL, NULL, NULL); } gtk_native_dialog_destroy (GTK_NATIVE_DIALOG (chooser)); }
static void activate_open (GSimpleAction *action, GVariant *parameter, gpointer user_data) { GApplication *app = user_data; GtkFileChooserNative *native; native = gtk_file_chooser_native_new ("Open File", NULL, GTK_FILE_CHOOSER_ACTION_OPEN, "_Open", "_Cancel"); g_object_set_data_full (G_OBJECT (native), "app", g_object_ref (app), g_object_unref); g_signal_connect (native, "response", G_CALLBACK (open_response_cb), native); gtk_native_dialog_show (GTK_NATIVE_DIALOG (native)); }
GtkFileChooser * ephy_create_file_chooser (const char *title, GtkWidget *parent, GtkFileChooserAction action, EphyFileFilterDefault default_filter) { GtkFileChooser *dialog; GtkFileFilter *filter[EPHY_FILE_FILTER_LAST]; g_autofree char *downloads_dir = NULL; GtkWidget *preview = gtk_image_new (); g_assert (GTK_IS_WINDOW (parent)); g_assert (default_filter >= 0 && default_filter <= EPHY_FILE_FILTER_LAST); dialog = GTK_FILE_CHOOSER (gtk_file_chooser_native_new (title, GTK_WINDOW (parent), action, NULL, _("_Cancel"))); gtk_native_dialog_set_modal (GTK_NATIVE_DIALOG (dialog), TRUE); downloads_dir = ephy_file_get_downloads_dir (); gtk_file_chooser_add_shortcut_folder (dialog, downloads_dir, NULL); if (action == GTK_FILE_CHOOSER_ACTION_OPEN || action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER || action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER) { gtk_file_chooser_native_set_accept_label (GTK_FILE_CHOOSER_NATIVE (dialog), _("_Open")); } else if (action == GTK_FILE_CHOOSER_ACTION_SAVE) { gtk_file_chooser_native_set_accept_label (GTK_FILE_CHOOSER_NATIVE (dialog), _("_Save")); } gtk_file_chooser_set_preview_widget (dialog, preview); gtk_file_chooser_set_use_preview_label (dialog, FALSE); g_signal_connect (dialog, "update-preview", G_CALLBACK (update_preview_cb), preview); if (default_filter != EPHY_FILE_FILTER_NONE) { filter[EPHY_FILE_FILTER_ALL_SUPPORTED] = ephy_file_chooser_add_mime_filter (dialog, _("All supported types"), "text/html", "application/xhtml+xml", "text/xml", "message/rfc822", /* MHTML */ "multipart/related", /* MHTML */ "application/x-mimearchive", /* MHTML */ "image/png", "image/jpeg", "image/gif", "image/webp", NULL); filter[EPHY_FILE_FILTER_WEBPAGES] = ephy_file_chooser_add_mime_filter (dialog, _("Web pages"), "text/html", "application/xhtml+xml", "text/xml", "message/rfc822", /* MHTML */ "multipart/related", /* MHTML */ "application/x-mimearchive", /* MHTML */ NULL); filter[EPHY_FILE_FILTER_IMAGES] = ephy_file_chooser_add_mime_filter (dialog, _("Images"), "image/png", "image/jpeg", "image/gif", "image/webp", NULL); filter[EPHY_FILE_FILTER_ALL] = ephy_file_chooser_add_pattern_filter (dialog, _("All files"), "*", NULL); gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (dialog), filter[default_filter]); } return dialog; }