-/* GTK - The GTK+ Toolkit
+/* GTK - The GIMP Toolkit
* gtkfilechooserutils.c: Private utility functions useful for
* implementing a GtkFileChooser interface
* Copyright (C) 2003, Red Hat, Inc.
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
#include "config.h"
#include "gtkfilesystem.h"
#include "gtktypebuiltins.h"
#include "gtkintl.h"
-#include "gtkalias.h"
+
static gboolean delegate_set_current_folder (GtkFileChooser *chooser,
GFile *file,
g_object_class_override_property (klass,
GTK_FILE_CHOOSER_PROP_EXTRA_WIDGET,
"extra-widget");
- g_object_class_override_property (klass,
- GTK_FILE_CHOOSER_PROP_FILE_SYSTEM_BACKEND,
- "file-system-backend");
g_object_class_override_property (klass,
GTK_FILE_CHOOSER_PROP_FILTER,
"filter");
g_object_class_override_property (klass,
GTK_FILE_CHOOSER_PROP_DO_OVERWRITE_CONFIRMATION,
"do-overwrite-confirmation");
+ g_object_class_override_property (klass,
+ GTK_FILE_CHOOSER_PROP_CREATE_FOLDERS,
+ "create-folders");
}
/**
GFile *file,
GError **error)
{
- return _gtk_file_chooser_select_file (get_delegate (chooser), file, error);
+ return gtk_file_chooser_select_file (get_delegate (chooser), file, error);
}
static void
delegate_unselect_file (GtkFileChooser *chooser,
GFile *file)
{
- _gtk_file_chooser_unselect_file (get_delegate (chooser), file);
+ gtk_file_chooser_unselect_file (get_delegate (chooser), file);
}
static void
static GSList *
delegate_get_files (GtkFileChooser *chooser)
{
- return _gtk_file_chooser_get_files (get_delegate (chooser));
+ return gtk_file_chooser_get_files (get_delegate (chooser));
}
static GFile *
delegate_get_preview_file (GtkFileChooser *chooser)
{
- return _gtk_file_chooser_get_preview_file (get_delegate (chooser));
+ return gtk_file_chooser_get_preview_file (get_delegate (chooser));
}
static GtkFileSystem *
static GSList *
delegate_list_shortcut_folders (GtkFileChooser *chooser)
{
- return gtk_file_chooser_list_shortcut_folders (get_delegate (chooser));
+ return _gtk_file_chooser_list_shortcut_folder_files (get_delegate (chooser));
}
static gboolean
GFile *file,
GError **error)
{
- return _gtk_file_chooser_set_current_folder_file (get_delegate (chooser), file, error);
+ return gtk_file_chooser_set_current_folder_file (get_delegate (chooser), file, error);
}
static GFile *
delegate_get_current_folder (GtkFileChooser *chooser)
{
- return _gtk_file_chooser_get_current_folder_file (get_delegate (chooser));
+ return gtk_file_chooser_get_current_folder_file (get_delegate (chooser));
}
static void
g_signal_emit_by_name (data, "confirm-overwrite", &conf);
return conf;
}
+
+static GFile *
+get_parent_for_uri (const char *uri)
+{
+ GFile *file;
+ GFile *parent;
+
+ file = g_file_new_for_uri (uri);
+ parent = g_file_get_parent (file);
+
+ g_object_unref (file);
+ return parent;
+
+}
+
+/* Extracts the parent folders out of the supplied list of GtkRecentInfo* items, and returns
+ * a list of GFile* for those unique parents.
+ */
+GList *
+_gtk_file_chooser_extract_recent_folders (GList *infos)
+{
+ GList *l;
+ GList *result;
+ GHashTable *folders;
+
+ result = NULL;
+
+ folders = g_hash_table_new (g_file_hash, (GEqualFunc) g_file_equal);
+
+ for (l = infos; l; l = l->next)
+ {
+ GtkRecentInfo *info = l->data;
+ const char *uri;
+ GFile *parent;
+
+ uri = gtk_recent_info_get_uri (info);
+ parent = get_parent_for_uri (uri);
+
+ if (parent)
+ {
+ if (!g_hash_table_lookup (folders, parent))
+ {
+ g_hash_table_insert (folders, parent, (gpointer) 1);
+ result = g_list_prepend (result, g_object_ref (parent));
+ }
+
+ g_object_unref (parent);
+ }
+ }
+
+ result = g_list_reverse (result);
+
+ g_hash_table_destroy (folders);
+
+ return result;
+}
+
+GSettings *
+_gtk_file_chooser_get_settings_for_widget (GtkWidget *widget)
+{
+ static GQuark file_chooser_settings_quark = 0;
+ GtkSettings *gtksettings;
+ GSettings *settings;
+
+ if (G_UNLIKELY (file_chooser_settings_quark == 0))
+ file_chooser_settings_quark = g_quark_from_static_string ("-gtk-file-chooser-settings");
+
+ gtksettings = gtk_widget_get_settings (widget);
+ settings = g_object_get_qdata (G_OBJECT (gtksettings), file_chooser_settings_quark);
+
+ if (G_UNLIKELY (settings == NULL))
+ {
+ settings = g_settings_new ("org.gtk.Settings.FileChooser");
+ g_settings_delay (settings);
+
+ g_object_set_qdata_full (G_OBJECT (gtksettings),
+ file_chooser_settings_quark,
+ settings,
+ g_object_unref);
+ }
+
+ return settings;
+}