Package: gtk

Class gtk:file-chooser-native

Superclasses

gtk:native-dialog, gtk:file-chooser, gobject:object, common-lisp:standard-object, common-lisp:t

Documented Subclasses

None

Direct Slots

accept-label
The accept-label property of type :string (Read / Write)
The text used for the label on the accept button in the dialog, or nil to use the default text.
cancel-label
The cancel-label property of type :string (Read / Write)
The text used for the label on the cancel button in the dialog, or nil to use the default text.

Details

The gtk:file-chooser-native widget is an abstraction of a dialog box suitable for use with "File/Open" or "File/Save as" commands. By default, this just uses a gtk:file-chooser-dialog widget to implement the actual dialog. However, on certain platforms, such as Windows and macOS, the native platform file chooser is used instead. When the application is running in a sandboxed environment without direct filesystem access (such as Flatpak), the gtk:file-chooser-native widget may call the proper APIs (portals) to let the user choose a file and make it available to the application.

While the API of gtk:file-chooser-native widget closely mirrors the gtk:file-chooser-dialog widget, the main difference is that there is no access to any gtk:window or gtk:widget widget for the dialog. This is required, as there may not be one in the case of a platform native dialog. Showing, hiding and running the dialog is handled by the gtk:native-dialog functions.

Typical usage
In the simplest of cases, you can the following code to use the gtk:file-chooser-dialog widget to select a file for opening:
GtkFileChooserNative *native;
GtkFileChooserAction action = GTK_FILE_CHOOSER_ACTION_OPEN;
gint res;

native = gtk_file_chooser_native_new ("Open File", parent_window, action, "_Open", "_Cancel");

res = gtk_native_dialog_run (GTK_NATIVE_DIALOG (native)); if (res == GTK_RESPONSE_ACCEPT) { char *filename; GtkFileChooser *chooser = GTK_FILE_CHOOSER (native); filename = gtk_file_chooser_get_filename (chooser); open_file (filename); g_free (filename); }

g_object_unref (native);
To use a dialog for saving, you can use this:
GtkFileChooserNative *native;
GtkFileChooser *chooser;
GtkFileChooserAction action = GTK_FILE_CHOOSER_ACTION_SAVE;
gint res;

native = gtk_file_chooser_native_new ("Save File", parent_window, action, "_Save", "_Cancel"); chooser = GTK_FILE_CHOOSER (native);

gtk_file_chooser_set_do_overwrite_confirmation (chooser, TRUE);

if (user_edited_a_new_document) gtk_file_chooser_set_current_name (chooser, _("Untitled document")); else gtk_file_chooser_set_filename (chooser, existing_filename);

res = gtk_native_dialog_run (GTK_NATIVE_DIALOG (native)); if (res == GTK_RESPONSE_ACCEPT) { char *filename;

filename = gtk_file_chooser_get_filename (chooser); save_to_file (filename); g_free (filename); }

g_object_unref (native);
For more information on how to best set up a file dialog, see the gtk:file-chooser-dialog documentation.

Response Codes
The gtk:file-chooser-native widget inherits from the gtk:native-dialog class, which means it will return :accept if the user accepted, and :cancel if he pressed Cancel. It can also return :delete-event if the window was unexpectedly closed.

Differences from GtkFileChooserDialog
There are a few things in the gtk:file-chooser API that are not possible to use with the gtk:file-chooser-native widget, as such use would prohibit the use of a native dialog.

There is no support for the signals that are emitted when the user navigates in the dialog, including:
  • "current-folder-changed"
  • "selection-changed"
  • "file-activated"
  • "confirm-overwrite"
You can also not use the methods that directly control user navigation: If you need any of the above you will have to use the gtk:file-chooser-dialog widget directly.

No operations that change the dialog work while the dialog is visible. Set all the properties that are required before showing the dialog.

Win32 details
On windows the IFileDialog implementation (added in Windows Vista) is used. It supports many of the features that the gtk:file-chooser-dialog widget does, but there are some things it does not handle: If any of these features are used the regular gtk:file-chooser-dialog widget will be used in place of the native one.

Portal details
When the org.freedesktop.portal.FileChooser portal is available on the session bus, it is used to bring up an out-of-process file chooser. Depending on the kind of session the application is running in, this may or may not be a GTK file chooser. In this situation, the following things are not supported and will be silently ignored:
macOS details
On macOS the NSSavePanel and NSOpenPanel classes are used to provide native file chooser dialogs. Some features provided by the gtk:file-chooser-dialog widget are not supported:
  • Extra widgets added with the gtk:file-chooser-extra-widget function, unless the widget is an instance of the gtk:label widget, in which case the label text will be used to set the NSSavePanel message instance property.
  • Use of custom previews by connecting to the "update-preview" signal.
  • Any gtk:file-filter object added with a custom filter.
  • Shortcut folders.
 

Returned by

Slot Access Functions

Inherited Slot Access Functions

See also

#2023-6-12