GtkFileChooser
File chooser interface used by GtkFileChooserWidget and GtkFileChooserDialog
#GtkFileChooser is an interface that can be implemented by file
selection widgets. In GTK+, the main objects that implement this
interface are #GtkFileChooserWidget, #GtkFileChooserDialog, and
#GtkFileChooserButton. You do not need to write an object that
implements the #GtkFileChooser interface unless you are trying to
adapt an existing file selector to expose a standard programming
interface.
File Names and Encodings
When the user is finished selecting files in a
#GtkFileChooser, your program can get the selected names
either as filenames or as URIs. For URIs, the normal escaping
rules are applied if the URI contains non-ASCII characters.
However, filenames are always returned in
the character set specified by the
G_FILENAME_ENCODING environment variable.
Please see the Glib documentation for more details about this
variable.
This means that while you can pass the result of
gtk_file_chooser_get_filename() to
open(2) or
fopen(3), you may not be able to
directly set it as the text of a #GtkLabel widget unless you
convert it first to UTF-8, which all GTK+ widgets expect.
You should use g_filename_to_utf8() to convert filenames
into strings that can be passed to GTK+ widgets.
Adding a Preview Widget
You can add a custom preview widget to a file chooser and then
get notification about when the preview needs to be updated.
To install a preview widget, use
gtk_file_chooser_set_preview_widget(). Then, connect to the
#GtkFileChooser::update-preview signal to get notified when
you need to update the contents of the preview.
Your callback should use
gtk_file_chooser_get_preview_filename() to see what needs
previewing. Once you have generated the preview for the
corresponding file, you must call
gtk_file_chooser_set_preview_widget_active() with a boolean
flag that indicates whether your callback could successfully
generate a preview.
Sample Usage
{
GtkImage *preview;
...
preview = gtk_image_new ();
gtk_file_chooser_set_preview_widget (my_file_chooser, preview);
g_signal_connect (my_file_chooser, "update-preview",
G_CALLBACK (update_preview_cb), preview);
}
static void
update_preview_cb (GtkFileChooser *file_chooser, gpointer data)
{
GtkWidget *preview;
char *filename;
GdkPixbuf *pixbuf;
gboolean have_preview;
preview = GTK_WIDGET (data);
filename = gtk_file_chooser_get_preview_filename (file_chooser);
pixbuf = gdk_pixbuf_new_from_file_at_size (filename, 128, 128, NULL);
have_preview = (pixbuf != NULL);
g_free (filename);
gtk_image_set_from_pixbuf (GTK_IMAGE (preview), pixbuf);
if (pixbuf)
gdk_pixbuf_unref (pixbuf);
gtk_file_chooser_set_preview_widget_active (file_chooser, have_preview);
}
Adding Extra Widgets
You can add extra widgets to a file chooser to provide options
that are not present in the default design. For example, you
can add a toggle button to give the user the option to open a
file in read-only mode. You can use
gtk_file_chooser_set_extra_widget() to insert additional
widgets in a file chooser.
Sample Usage
{
GtkWidget *toggle;
...
toggle = gtk_check_button_new_with_label ("Open file read-only");
gtk_widget_show (toggle);
gtk_file_chooser_set_extra_widget (my_file_chooser, toggle);
}
If you want to set more than one extra widget in the file
chooser, you can a container such as a GtkVBox or a GtkTable
and include your widgets in it. Then, set the container as
the whole extra widget.
Key Bindings
Internally, GTK+ implements a file chooser's graphical user
interface with the private
GtkFileChooserDefaultClass. This
widget has several key
bindings and their associated signals. This section
describes the available key binding signals.
GtkFileChooser key binding example
The default keys that activate the key-binding signals in
GtkFileChooserDefaultClass are as
follows:
Signal nameKeylocation-popupControlLup-folderAltUpdown-folderAltDownhome-folderAltHome
To change these defaults to something else, you could
include the following fragment in your
.gtkrc-2.0 file:
binding "my-own-gtkfilechooser-bindings" {
bind "<Alt><Shift>l" {
"location-popup" ()
}
bind "<Alt><Shift>Up" {
"up-folder" ()
}
bind "<Alt><Shift>Down" {
"down-folder" ()
}
bind "<Alt><Shift>Home" {
"home-folder-folder" ()
}
}
class "GtkFileChooserDefault" binding "my-own-gtkfilechooser-bindings"
The "GtkFileChooserDefault::location-popup" signal
void user_function (GtkFileChooserDefault *chooser,
gpointer user_data);
This is used to make the file chooser show a "Location"
dialog which the user can use to manually type the name of
the file he wishes to select. By default this is bound to
ControlL.
chooser :
the object which received the signal.
user_data :
user data set when the signal handler was connected.
The "GtkFileChooserDefault::up-folder" signal
void user_function (GtkFileChooserDefault *chooser,
gpointer user_data);
This is used to make the file chooser go to the parent of
the current folder in the file hierarchy. By default this
is bound to
AltUp.
chooser :
the object which received the signal.
user_data :
user data set when the signal handler was connected.
The "GtkFileChooserDefault::down-folder" signal
void user_function (GtkFileChooserDefault *chooser,
gpointer user_data);
This is used to make the file chooser go to a child of the
current folder in the file hierarchy. The subfolder that
will be used is displayed in the path bar widget of the file
chooser. For example, if the path bar is showing
"/foo/bar/baz", then this will cause
the file chooser to switch to the "baz" subfolder. By
default this is bound to
AltDown.
chooser :
the object which received the signal.
user_data :
user data set when the signal handler was connected.
The "GtkFileChooserDefault::home-folder" signal
void user_function (GtkFileChooserDefault *chooser,
gpointer user_data);
This is used to make the file chooser show the user's home
folder in the file list. By default this is bound to
AltHome.
chooser :
the object which received the signal.
user_data :
user data set when the signal handler was connected.
#GtkFileChooserDialog, #GtkFileChooserWidget, #GtkFileChooserButton
@filechooser: the object which received the signal.
@filechooser: the object which received the signal.
@filechooser: the object which received the signal.
@filechooser: the object which received the signal.
Describes whether a #GtkFileChooser is being used to open
existing files or to save to a possibly new file.
@GTK_FILE_CHOOSER_ACTION_OPEN: Indicates open mode. The file chooser
will only let the user pick an existing file.
@GTK_FILE_CHOOSER_ACTION_SAVE: Indicates save mode. The file chooser
will let the user pick an existing file, or type in a new
filename.
@GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER: Indicates an Open mode for
selecting folders. The file chooser will let the user pick an
existing folder.
@GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER: Indicates a mode for creating a
new folder. The file chooser will let the user name an existing or
new folder.
Used to get the #GError quark for #GtkFileChooser errors.
These identify the various errors that can occur while calling
#GtkFileChooser functions.
@GTK_FILE_CHOOSER_ERROR_NONEXISTENT: Indicates that a file does not exist.
@GTK_FILE_CHOOSER_ERROR_BAD_FILENAME: Indicates a malformed filename.
@Returns:
@chooser:
@action:
@chooser:
@Returns:
@chooser:
@local_only:
@files_only:
@chooser:
@Returns:
@chooser:
@select_multiple:
@chooser:
@Returns:
@chooser:
@show_hidden:
@chooser:
@Returns:
@chooser:
@name:
@chooser:
@Returns:
@chooser:
@filename:
@Returns:
@chooser:
@filename:
@Returns:
@chooser:
@filename:
@chooser:
@chooser:
@chooser:
@Returns:
@chooser:
@filename:
@Returns:
@chooser:
@Returns:
@chooser:
@Returns:
@chooser:
@uri:
@Returns:
@chooser:
@uri:
@Returns:
@chooser:
@uri:
@chooser:
@Returns:
@chooser:
@uri:
@Returns:
@chooser:
@Returns:
@chooser:
@preview_widget:
@chooser:
@Returns:
@chooser:
@active:
@chooser:
@Returns:
@chooser:
@use_label:
@chooser:
@Returns:
@chooser:
@Returns:
@file_chooser:
@chooser:
@Returns:
@file_chooser:
@chooser:
@extra_widget:
@chooser:
@Returns:
@chooser:
@filter:
@chooser:
@filter:
@chooser:
@Returns:
@chooser:
@filter:
@chooser:
@Returns:
@chooser:
@folder:
@error:
@Returns:
@chooser:
@folder:
@error:
@Returns:
@chooser:
@Returns:
@chooser:
@uri:
@error:
@Returns:
@folder:
@chooser:
@uri:
@error:
@Returns:
@folder:
@chooser:
@Returns: