Package ch.bailu.gtk.gtk
Class FileChooserNative
java.lang.Object
ch.bailu.gtk.type.Type
ch.bailu.gtk.type.Pointer
ch.bailu.gtk.gobject.Object
ch.bailu.gtk.gtk.NativeDialog
ch.bailu.gtk.gtk.FileChooserNative
- All Implemented Interfaces:
PointerInterface
`GtkFileChooserNative` is an abstraction of a dialog suitable
for use with “File Open” or “File Save as” commands.
By default, this just uses a `GtkFileChooserDialog` to implement
the actual dialog. However, on some 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), `GtkFileChooserNative` may call
the proper APIs (portals) to let the user choose a file and make it
available to the application.
While the API of `GtkFileChooserNative` closely mirrors `GtkFileChooserDialog`,
the main difference is that there is no access to any `GtkWindow` or `GtkWidget`
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
[class@Gtk.NativeDialog] functions.
Note that unlike `GtkFileChooserDialog`, `GtkFileChooserNative` objects
are not toplevel widgets, and GTK does not keep them alive. It is your
responsibility to keep a reference until you are done with the
object.
## Typical usage
In the simplest of cases, you can the following code to use
`GtkFileChooserNative` to select a file for opening:
```c
static void
on_response (GtkNativeDialog *native,
int response)
{
if (response == GTK_RESPONSE_ACCEPT)
{
GtkFileChooser *chooser = GTK_FILE_CHOOSER (native);
GFile *file = gtk_file_chooser_get_file (chooser);
open_file (file);
g_object_unref (file);
}
g_object_unref (native);
}
// ...
GtkFileChooserNative *native;
GtkFileChooserAction action = GTK_FILE_CHOOSER_ACTION_OPEN;
native = gtk_file_chooser_native_new ("Open File",
parent_window,
action,
"_Open",
"_Cancel");
g_signal_connect (native, "response", G_CALLBACK (on_response), NULL);
gtk_native_dialog_show (GTK_NATIVE_DIALOG (native));
```
To use a `GtkFileChooserNative` for saving, you can use this:
```c
static void
on_response (GtkNativeDialog *native,
int response)
{
if (response == GTK_RESPONSE_ACCEPT)
{
GtkFileChooser *chooser = GTK_FILE_CHOOSER (native);
GFile *file = gtk_file_chooser_get_file (chooser);
save_to_file (file);
g_object_unref (file);
}
g_object_unref (native);
}
// ...
GtkFileChooserNative *native;
GtkFileChooser *chooser;
GtkFileChooserAction action = GTK_FILE_CHOOSER_ACTION_SAVE;
native = gtk_file_chooser_native_new ("Save File",
parent_window,
action,
"_Save",
"_Cancel");
chooser = GTK_FILE_CHOOSER (native);
if (user_edited_a_new_document)
gtk_file_chooser_set_current_name (chooser, _("Untitled document"));
else
gtk_file_chooser_set_file (chooser, existing_file, NULL);
g_signal_connect (native, "response", G_CALLBACK (on_response), NULL);
gtk_native_dialog_show (GTK_NATIVE_DIALOG (native));
```
For more information on how to best set up a file dialog,
see the [class@Gtk.FileChooserDialog] documentation.
## Response Codes
`GtkFileChooserNative` inherits from [class@Gtk.NativeDialog],
which means it will return %GTK_RESPONSE_ACCEPT if the user accepted,
and %GTK_RESPONSE_CANCEL if he pressed cancel. It can also return
%GTK_RESPONSE_DELETE_EVENT if the window was unexpectedly closed.
## Differences from `GtkFileChooserDialog`
There are a few things in the [iface@Gtk.FileChooser] interface that
are not possible to use with `GtkFileChooserNative`, 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 `GtkFileChooser` has, but
there are some things it does not handle:
* Any [class@Gtk.FileFilter] added using a mimetype
If any of these features are used the regular `GtkFileChooserDialog`
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 `GtkFileChooser`
are not supported:
* Shortcut folders.
for use with “File Open” or “File Save as” commands.
By default, this just uses a `GtkFileChooserDialog` to implement
the actual dialog. However, on some 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), `GtkFileChooserNative` may call
the proper APIs (portals) to let the user choose a file and make it
available to the application.
While the API of `GtkFileChooserNative` closely mirrors `GtkFileChooserDialog`,
the main difference is that there is no access to any `GtkWindow` or `GtkWidget`
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
[class@Gtk.NativeDialog] functions.
Note that unlike `GtkFileChooserDialog`, `GtkFileChooserNative` objects
are not toplevel widgets, and GTK does not keep them alive. It is your
responsibility to keep a reference until you are done with the
object.
## Typical usage
In the simplest of cases, you can the following code to use
`GtkFileChooserNative` to select a file for opening:
```c
static void
on_response (GtkNativeDialog *native,
int response)
{
if (response == GTK_RESPONSE_ACCEPT)
{
GtkFileChooser *chooser = GTK_FILE_CHOOSER (native);
GFile *file = gtk_file_chooser_get_file (chooser);
open_file (file);
g_object_unref (file);
}
g_object_unref (native);
}
// ...
GtkFileChooserNative *native;
GtkFileChooserAction action = GTK_FILE_CHOOSER_ACTION_OPEN;
native = gtk_file_chooser_native_new ("Open File",
parent_window,
action,
"_Open",
"_Cancel");
g_signal_connect (native, "response", G_CALLBACK (on_response), NULL);
gtk_native_dialog_show (GTK_NATIVE_DIALOG (native));
```
To use a `GtkFileChooserNative` for saving, you can use this:
```c
static void
on_response (GtkNativeDialog *native,
int response)
{
if (response == GTK_RESPONSE_ACCEPT)
{
GtkFileChooser *chooser = GTK_FILE_CHOOSER (native);
GFile *file = gtk_file_chooser_get_file (chooser);
save_to_file (file);
g_object_unref (file);
}
g_object_unref (native);
}
// ...
GtkFileChooserNative *native;
GtkFileChooser *chooser;
GtkFileChooserAction action = GTK_FILE_CHOOSER_ACTION_SAVE;
native = gtk_file_chooser_native_new ("Save File",
parent_window,
action,
"_Save",
"_Cancel");
chooser = GTK_FILE_CHOOSER (native);
if (user_edited_a_new_document)
gtk_file_chooser_set_current_name (chooser, _("Untitled document"));
else
gtk_file_chooser_set_file (chooser, existing_file, NULL);
g_signal_connect (native, "response", G_CALLBACK (on_response), NULL);
gtk_native_dialog_show (GTK_NATIVE_DIALOG (native));
```
For more information on how to best set up a file dialog,
see the [class@Gtk.FileChooserDialog] documentation.
## Response Codes
`GtkFileChooserNative` inherits from [class@Gtk.NativeDialog],
which means it will return %GTK_RESPONSE_ACCEPT if the user accepted,
and %GTK_RESPONSE_CANCEL if he pressed cancel. It can also return
%GTK_RESPONSE_DELETE_EVENT if the window was unexpectedly closed.
## Differences from `GtkFileChooserDialog`
There are a few things in the [iface@Gtk.FileChooser] interface that
are not possible to use with `GtkFileChooserNative`, 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 `GtkFileChooser` has, but
there are some things it does not handle:
* Any [class@Gtk.FileFilter] added using a mimetype
If any of these features are used the regular `GtkFileChooserDialog`
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 `GtkFileChooser`
are not supported:
* Shortcut folders.
-
Nested Class Summary
Nested classes/interfaces inherited from class ch.bailu.gtk.gtk.NativeDialog
NativeDialog.OnResponse
Nested classes/interfaces inherited from class ch.bailu.gtk.gobject.Object
Object.OnBindingTransformFunc, Object.OnDestroyNotify, Object.OnDuplicateFunc, Object.OnNotify, Object.OnToggleNotify, Object.OnWeakNotify
-
Field Summary
Fields inherited from class ch.bailu.gtk.gtk.NativeDialog
SIGNAL_ON_RESPONSE
Fields inherited from class ch.bailu.gtk.gobject.Object
SIGNAL_ON_NOTIFY
-
Constructor Summary
ConstructorDescriptionFileChooserNative
(PointerContainer pointer) FileChooserNative
(Str title, Window parent, int action, Str accept_label, Str cancel_label) Creates a new `GtkFileChooserNative`.FileChooserNative
(String title, Window parent, int action, String accept_label, String cancel_label) Creates a new `GtkFileChooserNative`. -
Method Summary
Modifier and TypeMethodDescriptionImplements interfaceFileChooser
.Retrieves the custom label text for the accept button.Retrieves the custom label text for the cancel button.static ClassHandler
static int
static long
static TypeSystem.TypeSize
static long
static TypeSystem.TypeSize
void
setAcceptLabel
(Str accept_label) Sets the custom label text for the accept button.void
setAcceptLabel
(String accept_label) Sets the custom label text for the accept button.void
setCancelLabel
(Str cancel_label) Sets the custom label text for the cancel button.void
setCancelLabel
(String cancel_label) Sets the custom label text for the cancel button.Methods inherited from class ch.bailu.gtk.gtk.NativeDialog
destroy, getModal, getTitle, getTransientFor, getVisible, hide, onResponse, setModal, setTitle, setTitle, setTransientFor, show
Methods inherited from class ch.bailu.gtk.gobject.Object
addToggleRef, bindProperty, bindProperty, bindPropertyFull, bindPropertyFull, bindPropertyWithClosures, bindPropertyWithClosures, compatControl, connect, connect, disconnect, disconnect, dupData, dupData, dupQdata, forceFloating, freezeNotify, get, get, getData, getData, getProperty, getProperty, getQdata, interfaceFindProperty, interfaceInstallProperty, isFloating, notify, notify, notifyByPspec, onNotify, ref, refSink, removeToggleRef, replaceData, replaceData, replaceQdata, runDispose, set, set, setData, setData, setDataFull, setDataFull, setProperty, setProperty, setQdata, setQdataFull, stealData, stealData, stealQdata, takeRef, thawNotify, unref, watchClosure, weakRef, weakUnref
Methods inherited from class ch.bailu.gtk.type.Pointer
asCPointer, cast, connectSignal, disconnectSignals, disconnectSignals, equals, hashCode, throwIfNull, throwNullPointerException, toString, unregisterCallbacks, unregisterCallbacks
Methods inherited from class ch.bailu.gtk.type.Type
asCPointer, asCPointer, asCPointerNotNull, asJnaPointer, asJnaPointer, asPointer, asPointer, cast, cast, throwIfNull
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
Methods inherited from interface ch.bailu.gtk.type.PointerInterface
asCPointerNotNull, asJnaPointer, asPointer, isNotNull, isNull
-
Constructor Details
-
FileChooserNative
-
FileChooserNative
public FileChooserNative(@Nullable Str title, @Nullable Window parent, int action, @Nullable Str accept_label, @Nullable Str cancel_label) Creates a new `GtkFileChooserNative`.- Parameters:
title
- Title of the nativeparent
- Transient parent of the nativeaction
- Open or save mode for the dialogaccept_label
- text to go in the accept button, or %NULL for the defaultcancel_label
- text to go in the cancel button, or %NULL for the default
-
FileChooserNative
public FileChooserNative(String title, @Nullable Window parent, int action, String accept_label, String cancel_label) Creates a new `GtkFileChooserNative`.- Parameters:
title
- Title of the nativeparent
- Transient parent of the nativeaction
- Open or save mode for the dialogaccept_label
- text to go in the accept button, or %NULL for the defaultcancel_label
- text to go in the cancel button, or %NULL for the default
-
-
Method Details
-
getClassHandler
-
getAcceptLabel
Retrieves the custom label text for the accept button.- Returns:
- The custom label
-
getCancelLabel
Retrieves the custom label text for the cancel button.- Returns:
- The custom label
-
setAcceptLabel
Sets the custom label text for the accept button.
If characters in @label are preceded by an underscore, they are
underlined. If you need a literal underscore character in a label,
use “__” (two underscores). The first underlined character represents
a keyboard accelerator called a mnemonic.
Pressing Alt and that key should activate the button.- Parameters:
accept_label
- custom label
-
setAcceptLabel
Sets the custom label text for the accept button.
If characters in @label are preceded by an underscore, they are
underlined. If you need a literal underscore character in a label,
use “__” (two underscores). The first underlined character represents
a keyboard accelerator called a mnemonic.
Pressing Alt and that key should activate the button.- Parameters:
accept_label
- custom label
-
setCancelLabel
Sets the custom label text for the cancel button.
If characters in @label are preceded by an underscore, they are
underlined. If you need a literal underscore character in a label,
use “__” (two underscores). The first underlined character represents
a keyboard accelerator called a mnemonic.
Pressing Alt and that key should activate the button.- Parameters:
cancel_label
- custom label
-
setCancelLabel
Sets the custom label text for the cancel button.
If characters in @label are preceded by an underscore, they are
underlined. If you need a literal underscore character in a label,
use “__” (two underscores). The first underlined character represents
a keyboard accelerator called a mnemonic.
Pressing Alt and that key should activate the button.- Parameters:
cancel_label
- custom label
-
asFileChooser
Implements interfaceFileChooser
. Call this to get access to interface functions.- Returns:
FileChooser
-
getTypeID
public static long getTypeID() -
getParentTypeID
public static long getParentTypeID() -
getTypeSize
-
getParentTypeSize
-
getInstanceSize
public static int getInstanceSize()
-