static int run_file_chooser(GtkFileChooser *dlg) { #ifdef USE_GTK_NATIVE_FILE_CHOOSER return gtk_native_dialog_run (GTK_NATIVE_DIALOG (dlg)); #else return gtk_dialog_run (GTK_DIALOG (dlg)); #endif }
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)); }