+
+/**
+ * _gtk_file_chooser_add_shortcut_folder:
+ * @chooser: a #GtkFileChooser
+ * @path: path of the folder to add
+ * @error: location to store error, or %NULL
+ *
+ * Adds a folder to be displayed with the shortcut folders in a file chooser.
+ * Internal function, see gtk_file_chooser_add_shortcut_folder().
+ *
+ * Return value: %TRUE if the folder could be added successfully, %FALSE
+ * otherwise.
+ *
+ * Since: 2.4
+ **/
+gboolean
+_gtk_file_chooser_add_shortcut_folder (GtkFileChooser *chooser,
+ const GtkFilePath *path,
+ GError **error)
+{
+ g_return_val_if_fail (GTK_IS_FILE_CHOOSER (chooser), FALSE);
+ g_return_val_if_fail (path != NULL, FALSE);
+
+ return GTK_FILE_CHOOSER_GET_IFACE (chooser)->add_shortcut_folder (chooser, path, error);
+}
+
+/**
+ * _gtk_file_chooser_remove_shortcut_folder:
+ * @chooser: a #GtkFileChooser
+ * @path: path of the folder to remove
+ * @error: location to store error, or %NULL
+ *
+ * Removes a folder from the shortcut folders in a file chooser. Internal
+ * function, see gtk_file_chooser_remove_shortcut_folder().
+ *
+ * Return value: %TRUE if the folder could be removed successfully, %FALSE
+ * otherwise.
+ *
+ * Since: 2.4
+ **/
+gboolean
+_gtk_file_chooser_remove_shortcut_folder (GtkFileChooser *chooser,
+ const GtkFilePath *path,
+ GError **error)
+{
+ g_return_val_if_fail (GTK_IS_FILE_CHOOSER (chooser), FALSE);
+ g_return_val_if_fail (path != NULL, FALSE);
+
+ return GTK_FILE_CHOOSER_GET_IFACE (chooser)->remove_shortcut_folder (chooser, path, error);
+}
+
+/**
+ * gtk_file_chooser_get_preview_filename:
+ * @chooser: a #GtkFileChooser
+ *
+ * Gets the filename that should be previewed in a custom preview
+ * widget. See gtk_file_chooser_set_preview_widget().
+ *
+ * Return value: the filename to preview, or %NULL if no file
+ * is selected, or if the selected file cannot be represented
+ * as a local filename. Free with g_free()
+ *
+ * Since: 2.4
+ **/
+char *
+gtk_file_chooser_get_preview_filename (GtkFileChooser *chooser)
+{
+ GtkFileSystem *file_system;
+ GtkFilePath *path;
+ gchar *result = NULL;
+
+ g_return_val_if_fail (GTK_IS_FILE_CHOOSER (chooser), NULL);
+
+ file_system = _gtk_file_chooser_get_file_system (chooser);
+ path = _gtk_file_chooser_get_preview_path (chooser);
+ if (path)
+ {
+ result = gtk_file_system_path_to_filename (file_system, path);
+ gtk_file_path_free (path);
+ }
+
+ return result;
+}
+
+/**
+ * gtk_file_chooser_get_preview_uri:
+ * @chooser: a #GtkFileChooser
+ *
+ * Gets the URI that should be previewed in a custom preview
+ * widget. See gtk_file_chooser_set_preview_widget().
+ *
+ * Return value: the URI for the file to preview, or %NULL if no file is
+ * selected. Free with g_free().
+ *
+ * Since: 2.4
+ **/
+char *
+gtk_file_chooser_get_preview_uri (GtkFileChooser *chooser)
+{
+ GtkFileSystem *file_system;
+ GtkFilePath *path;
+ gchar *result = NULL;
+
+ g_return_val_if_fail (GTK_IS_FILE_CHOOSER (chooser), NULL);
+
+ file_system = _gtk_file_chooser_get_file_system (chooser);
+ path = _gtk_file_chooser_get_preview_path (chooser);
+ if (path)
+ {
+ result = gtk_file_system_path_to_uri (file_system, path);
+ gtk_file_path_free (path);
+ }
+
+ return result;
+}
+
+/**
+ * gtk_file_chooser_set_extra_widget:
+ * @chooser: a #GtkFileChooser
+ * @extra_widget: widget for extra options
+ *
+ * Sets an application-supplied widget to provide extra options to the user.
+ *
+ * Since: 2.4
+ **/
+void
+gtk_file_chooser_set_extra_widget (GtkFileChooser *chooser,
+ GtkWidget *extra_widget)
+{
+ g_return_if_fail (GTK_IS_FILE_CHOOSER (chooser));
+
+ g_object_set (chooser, "extra-widget", extra_widget, NULL);
+}
+
+/**
+ * gtk_file_chooser_get_extra_widget:
+ * @chooser: a #GtkFileChooser
+ *
+ * Gets the current preview widget; see
+ * gtk_file_chooser_set_extra_widget().
+ *
+ * Return value: the current extra widget, or %NULL
+ *
+ * Since: 2.4
+ **/
+GtkWidget *
+gtk_file_chooser_get_extra_widget (GtkFileChooser *chooser)
+{
+ GtkWidget *extra_widget;
+
+ g_return_val_if_fail (GTK_IS_FILE_CHOOSER (chooser), NULL);
+
+ g_object_get (chooser, "extra-widget", &extra_widget, NULL);
+
+ /* Horrid hack; g_object_get() refs returned objects but
+ * that contradicts the memory management conventions
+ * for accessors.
+ */
+ if (extra_widget)
+ g_object_unref (extra_widget);
+
+ return extra_widget;
+}
+
+/**
+ * gtk_file_chooser_add_filter:
+ * @chooser: a #GtkFileChooser
+ * @filter: a #GtkFileFilter
+ *
+ * Adds @filter to the list of filters that the user can select between.
+ * When a filter is selected, only files that are passed by that
+ * filter are displayed.
+ *
+ * Note that the @chooser takes ownership of the filter, so you have to
+ * ref and sink it if you want to keep a reference.
+ *
+ * Since: 2.4
+ **/
+void
+gtk_file_chooser_add_filter (GtkFileChooser *chooser,
+ GtkFileFilter *filter)
+{
+ g_return_if_fail (GTK_IS_FILE_CHOOSER (chooser));
+
+ GTK_FILE_CHOOSER_GET_IFACE (chooser)->add_filter (chooser, filter);
+}
+
+/**
+ * gtk_file_chooser_remove_filter:
+ * @chooser: a #GtkFileChooser
+ * @filter: a #GtkFileFilter
+ *
+ * Removes @filter from the list of filters that the user can select between.
+ *
+ * Since: 2.4
+ **/
+void
+gtk_file_chooser_remove_filter (GtkFileChooser *chooser,
+ GtkFileFilter *filter)
+{
+ g_return_if_fail (GTK_IS_FILE_CHOOSER (chooser));
+
+ GTK_FILE_CHOOSER_GET_IFACE (chooser)->remove_filter (chooser, filter);
+}
+
+/**
+ * gtk_file_chooser_list_filters:
+ * @chooser: a #GtkFileChooser
+ *
+ * Lists the current set of user-selectable filters; see
+ * gtk_file_chooser_add_filter(), gtk_file_chooser_remove_filter().
+ *
+ * Return value: a #GSList containing the current set of
+ * user selectable filters. The contents of the list are
+ * owned by GTK+, but you must free the list itself with
+ * g_slist_free() when you are done with it.
+ *
+ * Since: 2.4
+ **/
+GSList *
+gtk_file_chooser_list_filters (GtkFileChooser *chooser)
+{
+ g_return_val_if_fail (GTK_IS_FILE_CHOOSER (chooser), NULL);
+
+ return GTK_FILE_CHOOSER_GET_IFACE (chooser)->list_filters (chooser);
+}
+
+/**
+ * gtk_file_chooser_set_filter:
+ * @chooser: a #GtkFileChooser
+ * @filter: a #GtkFileFilter
+ *
+ * Sets the current filter; only the files that pass the
+ * filter will be displayed. If the user-selectable list of filters
+ * is non-empty, then the filter should be one of the filters
+ * in that list. Setting the current filter when the list of
+ * filters is empty is useful if you want to restrict the displayed
+ * set of files without letting the user change it.
+ *
+ * Since: 2.4
+ **/
+void
+gtk_file_chooser_set_filter (GtkFileChooser *chooser,
+ GtkFileFilter *filter)
+{
+ g_return_if_fail (GTK_IS_FILE_CHOOSER (chooser));
+ g_return_if_fail (GTK_IS_FILE_FILTER (filter));
+
+ g_object_set (chooser, "filter", filter, NULL);
+}
+
+/**
+ * gtk_file_chooser_get_filter:
+ * @chooser: a #GtkFileChooser
+ *
+ * Gets the current filter; see gtk_file_chooser_set_filter().
+ *
+ * Return value: the current filter, or %NULL
+ *
+ * Since: 2.4
+ **/
+GtkFileFilter *
+gtk_file_chooser_get_filter (GtkFileChooser *chooser)
+{
+ GtkFileFilter *filter;
+
+ g_return_val_if_fail (GTK_IS_FILE_CHOOSER (chooser), NULL);
+
+ g_object_get (chooser, "filter", &filter, NULL);
+ /* Horrid hack; g_object_get() refs returned objects but
+ * that contradicts the memory management conventions
+ * for accessors.
+ */
+ if (filter)
+ g_object_unref (filter);
+
+ return filter;
+}
+
+/**
+ * gtk_file_chooser_add_shortcut_folder:
+ * @chooser: a #GtkFileChooser
+ * @folder: filename of the folder to add
+ * @error: location to store error, or %NULL
+ *
+ * Adds a folder to be displayed with the shortcut folders in a file chooser.
+ * Note that shortcut folders do not get saved, as they are provided by the
+ * application. For example, you can use this to add a
+ * "/usr/share/mydrawprogram/Clipart" folder to the volume list.
+ *
+ * Return value: %TRUE if the folder could be added successfully, %FALSE
+ * otherwise. In the latter case, the @error will be set as appropriate.
+ *
+ * Since: 2.4
+ **/
+gboolean
+gtk_file_chooser_add_shortcut_folder (GtkFileChooser *chooser,
+ const char *folder,
+ GError **error)
+{
+ GtkFilePath *path;
+ gboolean result;
+
+ g_return_val_if_fail (GTK_IS_FILE_CHOOSER (chooser), FALSE);
+ g_return_val_if_fail (folder != NULL, FALSE);
+
+ path = gtk_file_system_filename_to_path (_gtk_file_chooser_get_file_system (chooser), folder);
+ if (!path)
+ {
+ g_set_error (error,
+ GTK_FILE_CHOOSER_ERROR,
+ GTK_FILE_CHOOSER_ERROR_BAD_FILENAME,
+ _("Invalid filename: %s"),
+ folder);
+ return FALSE;
+ }
+
+ result = GTK_FILE_CHOOSER_GET_IFACE (chooser)->add_shortcut_folder (chooser, path, error);
+
+ gtk_file_path_free (path);
+
+ return result;
+}
+
+/**
+ * gtk_file_chooser_remove_shortcut_folder:
+ * @chooser: a #GtkFileChooser
+ * @folder: filename of the folder to remove
+ * @error: location to store error, or %NULL
+ *
+ * Removes a folder from a file chooser's list of shortcut folders.
+ *
+ * Return value: %TRUE if the operation succeeds, %FALSE otherwise.
+ * In the latter case, the @error will be set as appropriate.
+ *
+ * See also: gtk_file_chooser_add_shortcut_folder()
+ *
+ * Since: 2.4
+ **/
+gboolean
+gtk_file_chooser_remove_shortcut_folder (GtkFileChooser *chooser,
+ const char *folder,
+ GError **error)
+{
+ GtkFilePath *path;
+ gboolean result;
+
+ g_return_val_if_fail (GTK_IS_FILE_CHOOSER (chooser), FALSE);
+ g_return_val_if_fail (folder != NULL, FALSE);
+
+ path = gtk_file_system_filename_to_path (_gtk_file_chooser_get_file_system (chooser), folder);
+ if (!path)
+ {
+ g_set_error (error,
+ GTK_FILE_CHOOSER_ERROR,
+ GTK_FILE_CHOOSER_ERROR_BAD_FILENAME,
+ _("Invalid filename: %s"),
+ folder);
+ return FALSE;
+ }
+
+ result = GTK_FILE_CHOOSER_GET_IFACE (chooser)->remove_shortcut_folder (chooser, path, error);
+
+ gtk_file_path_free (path);
+
+ return result;
+}
+
+/**
+ * gtk_file_chooser_list_shortcut_folders:
+ * @chooser: a #GtkFileChooser
+ *
+ * Queries the list of shortcut folders in the file chooser, as set by
+ * gtk_file_chooser_add_shortcut_folder().
+ *
+ * Return value: A list of folder filenames, or %NULL if there are no shortcut
+ * folders. Free the returned list with g_slist_free(), and the filenames with
+ * g_free().
+ *
+ * Since: 2.4
+ **/
+GSList *
+gtk_file_chooser_list_shortcut_folders (GtkFileChooser *chooser)
+{
+ GSList *folders;
+ GSList *result;
+
+ g_return_val_if_fail (GTK_IS_FILE_CHOOSER (chooser), NULL);
+
+ folders = GTK_FILE_CHOOSER_GET_IFACE (chooser)->list_shortcut_folders (chooser);
+
+ result = file_paths_to_strings (_gtk_file_chooser_get_file_system (chooser),
+ folders,
+ gtk_file_system_path_to_filename);
+ gtk_file_paths_free (folders);
+ return result;
+}
+
+/**
+ * gtk_file_chooser_add_shortcut_folder_uri:
+ * @chooser: a #GtkFileChooser
+ * @uri: URI of the folder to add
+ * @error: location to store error, or %NULL
+ *
+ * Adds a folder URI to be displayed with the shortcut folders in a file
+ * chooser. Note that shortcut folders do not get saved, as they are provided
+ * by the application. For example, you can use this to add a
+ * "file:///usr/share/mydrawprogram/Clipart" folder to the volume list.
+ *
+ * Return value: %TRUE if the folder could be added successfully, %FALSE
+ * otherwise. In the latter case, the @error will be set as appropriate.
+ *
+ * Since: 2.4
+ **/
+gboolean
+gtk_file_chooser_add_shortcut_folder_uri (GtkFileChooser *chooser,
+ const char *uri,
+ GError **error)
+{
+ GtkFilePath *path;
+ gboolean result;
+
+ g_return_val_if_fail (GTK_IS_FILE_CHOOSER (chooser), FALSE);
+ g_return_val_if_fail (uri != NULL, FALSE);
+
+ path = gtk_file_system_uri_to_path (_gtk_file_chooser_get_file_system (chooser), uri);
+ if (!path)
+ {
+ g_set_error (error,
+ GTK_FILE_CHOOSER_ERROR,
+ GTK_FILE_CHOOSER_ERROR_BAD_FILENAME,
+ _("Invalid filename: %s"),
+ uri);
+ return FALSE;
+ }
+
+ result = GTK_FILE_CHOOSER_GET_IFACE (chooser)->add_shortcut_folder (chooser, path, error);
+
+ gtk_file_path_free (path);
+
+ return result;
+}
+
+/**
+ * gtk_file_chooser_remove_shortcut_folder_uri:
+ * @chooser: a #GtkFileChooser
+ * @uri: URI of the folder to remove
+ * @error: location to store error, or %NULL
+ *
+ * Removes a folder URI from a file chooser's list of shortcut folders.
+ *
+ * Return value: %TRUE if the operation succeeds, %FALSE otherwise.
+ * In the latter case, the @error will be set as appropriate.
+ *
+ * See also: gtk_file_chooser_add_shortcut_folder_uri()
+ *
+ * Since: 2.4
+ **/
+gboolean
+gtk_file_chooser_remove_shortcut_folder_uri (GtkFileChooser *chooser,
+ const char *uri,
+ GError **error)
+{
+ GtkFilePath *path;
+ gboolean result;
+
+ g_return_val_if_fail (GTK_IS_FILE_CHOOSER (chooser), FALSE);
+ g_return_val_if_fail (uri != NULL, FALSE);
+
+ path = gtk_file_system_uri_to_path (_gtk_file_chooser_get_file_system (chooser), uri);
+ if (!path)
+ {
+ g_set_error (error,
+ GTK_FILE_CHOOSER_ERROR,
+ GTK_FILE_CHOOSER_ERROR_BAD_FILENAME,
+ _("Invalid filename: %s"),
+ uri);
+ return FALSE;
+ }
+
+ result = GTK_FILE_CHOOSER_GET_IFACE (chooser)->remove_shortcut_folder (chooser, path, error);
+
+ gtk_file_path_free (path);
+
+ return result;
+}
+
+/**
+ * gtk_file_chooser_list_shortcut_folder_uris:
+ * @chooser: a #GtkFileChooser
+ *
+ * Queries the list of shortcut folders in the file chooser, as set by
+ * gtk_file_chooser_add_shortcut_folder_uri().
+ *
+ * Return value: A list of folder URIs, or %NULL if there are no shortcut
+ * folders. Free the returned list with g_slist_free(), and the URIs with
+ * g_free().
+ *
+ * Since: 2.4
+ **/
+GSList *
+gtk_file_chooser_list_shortcut_folder_uris (GtkFileChooser *chooser)
+{
+ GSList *folders;
+ GSList *result;
+
+ g_return_val_if_fail (GTK_IS_FILE_CHOOSER (chooser), NULL);
+
+ folders = GTK_FILE_CHOOSER_GET_IFACE (chooser)->list_shortcut_folders (chooser);
+
+ result = file_paths_to_strings (_gtk_file_chooser_get_file_system (chooser),
+ folders,
+ gtk_file_system_path_to_uri);
+ gtk_file_paths_free (folders);
+ return result;
+}
+
+
+/**
+ * gtk_file_chooser_set_show_hidden:
+ * @chooser: a #GtkFileChooser
+ * @show_hidden: %TRUE if hidden files and folders should be displayed.
+ *
+ * Sets whether hidden files and folders are displayed in the file selector.
+ *
+ * Since: 2.6
+ **/
+void
+gtk_file_chooser_set_show_hidden (GtkFileChooser *chooser,
+ gboolean show_hidden)
+{
+ g_return_if_fail (GTK_IS_FILE_CHOOSER (chooser));
+
+ g_object_set (chooser, "show-hidden", show_hidden, NULL);
+}
+
+/**
+ * gtk_file_chooser_get_show_hidden:
+ * @chooser: a #GtkFileChooser
+ *
+ * Gets whether hidden files and folders are displayed in the file selector.
+ * See gtk_file_chooser_set_show_hidden().
+ *
+ * Return value: %TRUE if hidden files and folders are displayed.
+ *
+ * Since: 2.6
+ **/
+gboolean
+gtk_file_chooser_get_show_hidden (GtkFileChooser *chooser)
+{
+ gboolean show_hidden;
+
+ g_return_val_if_fail (GTK_IS_FILE_CHOOSER (chooser), FALSE);
+
+ g_object_get (chooser, "show-hidden", &show_hidden, NULL);
+
+ return show_hidden;
+}
+
+/**
+ * gtk_file_chooser_set_do_overwrite_confirmation:
+ * @chooser: a #GtkFileChooser
+ * @do_overwrite_confirmation: whether to confirm overwriting in save mode
+ *
+ * Sets whether a file chooser in GTK_FILE_CHOOSER_ACTION_SAVE mode will present
+ * a confirmation dialog if the user types a file name that already exists. This
+ * is %FALSE by default.
+ *
+ * Regardless of this setting, the @chooser will emit the "confirm-overwrite"
+ * signal when appropriate.
+ *
+ * If all you need is the stock confirmation dialog, set this property to %TRUE.
+ * You can override the way confirmation is done by actually handling the
+ * "confirm-overwrite" signal; please refer to its documentation for the
+ * details.
+ *
+ * Since: 2.8
+ **/
+void
+gtk_file_chooser_set_do_overwrite_confirmation (GtkFileChooser *chooser,
+ gboolean do_overwrite_confirmation)
+{
+ g_return_if_fail (GTK_IS_FILE_CHOOSER (chooser));
+
+ g_object_set (chooser, "do-overwrite-confirmation", do_overwrite_confirmation, NULL);
+}
+
+/**
+ * gtk_file_chooser_get_do_overwrite_confirmation:
+ * @chooser: a #GtkFileChooser
+ *
+ * Queries whether a file chooser is set to confirm for overwriting when the user
+ * types a file name that already exists.
+ *
+ * Return value: %TRUE if the file chooser will present a confirmation dialog;
+ * %FALSE otherwise.
+ *
+ * Since: 2.8
+ **/
+gboolean
+gtk_file_chooser_get_do_overwrite_confirmation (GtkFileChooser *chooser)
+{
+ gboolean do_overwrite_confirmation;
+
+ g_return_val_if_fail (GTK_IS_FILE_CHOOSER (chooser), FALSE);
+
+ g_object_get (chooser, "do-overwrite-confirmation", &do_overwrite_confirmation, NULL);
+
+ return do_overwrite_confirmation;
+}
+
+#ifdef G_OS_WIN32
+
+/* DLL ABI stability backward compatibility versions */
+
+#undef gtk_file_chooser_get_filename
+
+gchar *
+gtk_file_chooser_get_filename (GtkFileChooser *chooser)
+{
+ gchar *utf8_filename = gtk_file_chooser_get_filename_utf8 (chooser);
+ gchar *retval = g_locale_from_utf8 (utf8_filename, -1, NULL, NULL, NULL);
+
+ g_free (utf8_filename);
+
+ return retval;
+}
+
+#undef gtk_file_chooser_set_filename
+
+gboolean
+gtk_file_chooser_set_filename (GtkFileChooser *chooser,
+ const gchar *filename)
+{
+ gchar *utf8_filename = g_locale_to_utf8 (filename, -1, NULL, NULL, NULL);
+ gboolean retval = gtk_file_chooser_set_filename_utf8 (chooser, utf8_filename);
+
+ g_free (utf8_filename);
+
+ return retval;
+}
+
+#undef gtk_file_chooser_select_filename
+
+gboolean
+gtk_file_chooser_select_filename (GtkFileChooser *chooser,
+ const gchar *filename)
+{
+ gchar *utf8_filename = g_locale_to_utf8 (filename, -1, NULL, NULL, NULL);
+ gboolean retval = gtk_file_chooser_select_filename_utf8 (chooser, utf8_filename);
+
+ g_free (utf8_filename);
+
+ return retval;
+}
+
+#undef gtk_file_chooser_unselect_filename
+
+void
+gtk_file_chooser_unselect_filename (GtkFileChooser *chooser,
+ const char *filename)
+{
+ gchar *utf8_filename = g_locale_to_utf8 (filename, -1, NULL, NULL, NULL);
+
+ gtk_file_chooser_unselect_filename_utf8 (chooser, utf8_filename);
+ g_free (utf8_filename);
+}
+
+#undef gtk_file_chooser_get_filenames
+
+GSList *
+gtk_file_chooser_get_filenames (GtkFileChooser *chooser)
+{
+ GSList *list = gtk_file_chooser_get_filenames_utf8 (chooser);
+ GSList *rover = list;
+
+ while (rover)
+ {
+ gchar *tem = (gchar *) rover->data;
+ rover->data = g_locale_from_utf8 ((gchar *) rover->data, -1, NULL, NULL, NULL);
+ g_free (tem);
+ rover = rover->next;
+ }
+
+ return list;
+}
+
+#undef gtk_file_chooser_set_current_folder
+
+gboolean
+gtk_file_chooser_set_current_folder (GtkFileChooser *chooser,
+ const gchar *filename)
+{
+ gchar *utf8_filename = g_locale_to_utf8 (filename, -1, NULL, NULL, NULL);
+ gboolean retval = gtk_file_chooser_set_current_folder_utf8 (chooser, utf8_filename);
+
+ g_free (utf8_filename);
+
+ return retval;
+}
+
+#undef gtk_file_chooser_get_current_folder
+
+gchar *
+gtk_file_chooser_get_current_folder (GtkFileChooser *chooser)
+{
+ gchar *utf8_folder = gtk_file_chooser_get_current_folder_utf8 (chooser);
+ gchar *retval = g_locale_from_utf8 (utf8_folder, -1, NULL, NULL, NULL);
+
+ g_free (utf8_folder);
+
+ return retval;
+}
+
+#undef gtk_file_chooser_get_preview_filename
+
+char *
+gtk_file_chooser_get_preview_filename (GtkFileChooser *chooser)
+{
+ char *utf8_filename = gtk_file_chooser_get_preview_filename_utf8 (chooser);
+ char *retval = g_locale_from_utf8 (utf8_filename, -1, NULL, NULL, NULL);
+
+ g_free (utf8_filename);
+
+ return retval;
+}
+
+#undef gtk_file_chooser_add_shortcut_folder
+
+gboolean
+gtk_file_chooser_add_shortcut_folder (GtkFileChooser *chooser,
+ const char *folder,
+ GError **error)
+{
+ char *utf8_folder = g_locale_to_utf8 (folder, -1, NULL, NULL, NULL);
+ gboolean retval =
+ gtk_file_chooser_add_shortcut_folder_utf8 (chooser, utf8_folder, error);
+
+ g_free (utf8_folder);
+
+ return retval;
+}
+
+#undef gtk_file_chooser_remove_shortcut_folder
+
+gboolean
+gtk_file_chooser_remove_shortcut_folder (GtkFileChooser *chooser,
+ const char *folder,
+ GError **error)
+{
+ char *utf8_folder = g_locale_to_utf8 (folder, -1, NULL, NULL, NULL);
+ gboolean retval =
+ gtk_file_chooser_remove_shortcut_folder_utf8 (chooser, utf8_folder, error);
+
+ g_free (utf8_folder);
+
+ return retval;
+}
+
+#undef gtk_file_chooser_list_shortcut_folders
+
+GSList *
+gtk_file_chooser_list_shortcut_folders (GtkFileChooser *chooser)
+{
+ GSList *list = gtk_file_chooser_list_shortcut_folders_utf8 (chooser);
+ GSList *rover = list;
+
+ while (rover)
+ {
+ gchar *tem = (gchar *) rover->data;
+ rover->data = g_locale_from_utf8 ((gchar *) rover->data, -1, NULL, NULL, NULL);
+ g_free (tem);
+ rover = rover->next;
+ }
+
+ return list;
+}
+
+#endif
+
+#define __GTK_FILE_CHOOSER_C__
+#include "gtkaliasdef.c"