A file chooser dialog, suitable for "File/Open" or "File/Save" commands
<gtk-file-chooser-dialog>
is a dialog box suitable for use with
"File/Open" or "File/Save as" commands. This widget works by putting a
<gtk-file-chooser-widget>
inside a <gtk-dialog>
. It exposes the
<gtk-file-chooser-iface>
interface, so you can use all of the
<gtk-file-chooser>
functions on the file chooser dialog as well as those
for <gtk-dialog>
.
Note that <gtk-file-chooser-dialog>
does not have any methods of its own.
Instead, you should use the functions that work on a <gtk-file-chooser>
.
In the simplest of cases, you can the following code to use
<gtk-file-chooser-dialog>
to select a file for opening:
GtkWidget *dialog; dialog = gtk_file_chooser_dialog_new ("Open File", parent_window, GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) { char *filename; filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); open_file (filename); g_free (filename); } gtk_widget_destroy (dialog);
To use a dialog for saving, you can use this:
GtkWidget *dialog; dialog = gtk_file_chooser_dialog_new ("Save File", parent_window, GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL); gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), TRUE); if (user_edited_a_new_document) { gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), default_folder_for_saving); gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog), "Untitled document"); } else gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (dialog), filename_for_existing_document); if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) { char *filename; filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); save_to_file (filename); g_free (filename); } gtk_widget_destroy (dialog);
<gtk-file-chooser-dialog>
inherits from <gtk-dialog>
, so buttons
that go in its action area have response codes such as
<gtk-response-accept>
and <gtk-response-cancel>
. For example, you
could call gtk-file-chooser-dialog-new
as follows:
GtkWidget *dialog; dialog = gtk_file_chooser_dialog_new ("Open File", parent_window, GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL);
This will create buttons for "Cancel" and "Open" that use stock response
identifiers from <gtk-response-type>
. For most dialog boxes you can use
your own custom response codes rather than the ones in
<gtk-response-type>
, but <gtk-file-chooser-dialog>
assumes that
its "accept"-type action, e.g. an "Open" or "Save" button, will have one
of the following response codes:
This is because <gtk-file-chooser-dialog>
must intercept responses and
switch to folders if appropriate, rather than letting the dialog terminate
— the implementation uses these known response codes to know which
responses can be blocked if appropriate.
To summarize, make sure you use a stock response code when you use
<gtk-file-chooser-dialog>
to ensure proper operation.