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.
Default value: nil
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.
Default value: nil

Details

The gtk:file-chooser-native class is an abstraction of a dialog 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 object may call the proper APIs (portals) to let the user choose a file and make it available to the application.

While the API of the gtk:file-chooser-native object closely mirrors the gtk:file-chooser-dialog widget, the main difference is that there is no access to any gtk:window or gtk:widget object 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.

Response Codes

The gtk:file-chooser-native class inherits from the gtk:native-dialog class, which means it will return the :accept value if the user accepted, and the :cancel value if the user pressed cancel. It can also return the :delete-event value 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.

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:
  • Any GtkFileFilter added using a mimetype.
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.

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:
  • Shortcut folders.

Examples

In the simplest of cases, you can use the following code to use the gtk:file-chooser-dialog widget to select a file for opening:
(defun create-file-chooser-native (&optional parent)
  (let ((native (gtk:file-chooser-native-new "Open File"
                                             parent
                                             :open
                                             "_Open"
                                             "_Cancel")))
    ;; Connect a signal handler
    (g:signal-connect native "response"
        (lambda (dialog response)
          (when (eq :accept
                    (gtk:response-type-keyword response))
            (let* ((file (gtk:file-chooser-file dialog))
                   (launcher (gtk:file-launcher-new file)))
              ;; Open the file
              (gtk:file-launcher-launch launcher parent nil
                  (lambda (source result)
                    (declare (ignore source result))
                    (format t "Opened the file ~a~%"
                              (g:file-basename file))))))))
    ;; Show the native file chooser
    (gtk:native-dialog-show native)))    
For more information on how to best set up a file dialog, see the gtk:file-chooser-dialog widget.

Warning

The gtk:file-chooser-native implementation is deprecated since 4.10. Use the gtk:file-dialog implementation instead.
 

Returned by

Slot Access Functions

Inherited Slot Access Functions

See also

2024-5-22