summaryrefslogtreecommitdiff
path: root/gtk
diff options
context:
space:
mode:
authorFederico Mena Quintero <federico@novell.com>2009-06-18 21:29:54 -0500
committerFederico Mena Quintero <federico@novell.com>2009-06-18 21:57:54 -0500
commit3d527afadb802c9027365480023f8aeda18e7ad7 (patch)
tree60c8bdb4cab610774b5f20f791d011afdb6745f5 /gtk
parent6382eac6d85409a43b9a3b96cd303338de582f65 (diff)
downloadgtk+-3d527afadb802c9027365480023f8aeda18e7ad7.tar.gz
bgo#586315 - gtk_file_chooser_list_shortcut_folders() was crashing
The virtual method list_shortcut_folders returns a GSList * of GFile *. In turn, gtk_file_chooser_list_shortcut_folders() converts those to strings. However, the delegate in gtkfilechooserutils.c was calling gtk_file_chooser_list_shortcut_folders() every time, so we were trying to convert invalid data. Now we have an internal function that deals with GFile *. That function is called by the delegate, and the conversion is done only once by the API entry points. Signed-off-by: Federico Mena Quintero <federico@novell.com>
Diffstat (limited to 'gtk')
-rw-r--r--gtk/gtkfilechooser.c11
-rw-r--r--gtk/gtkfilechooserprivate.h1
-rw-r--r--gtk/gtkfilechooserutils.c2
3 files changed, 11 insertions, 3 deletions
diff --git a/gtk/gtkfilechooser.c b/gtk/gtkfilechooser.c
index a30648a89d..f113bea1f0 100644
--- a/gtk/gtkfilechooser.c
+++ b/gtk/gtkfilechooser.c
@@ -1761,7 +1761,7 @@ gtk_file_chooser_list_shortcut_folders (GtkFileChooser *chooser)
g_return_val_if_fail (GTK_IS_FILE_CHOOSER (chooser), NULL);
- folders = GTK_FILE_CHOOSER_GET_IFACE (chooser)->list_shortcut_folders (chooser);
+ folders = _gtk_file_chooser_list_shortcut_folder_files (chooser);
result = files_to_strings (folders, g_file_get_path);
g_slist_foreach (folders, (GFunc) g_object_unref, NULL);
@@ -1858,7 +1858,7 @@ gtk_file_chooser_list_shortcut_folder_uris (GtkFileChooser *chooser)
g_return_val_if_fail (GTK_IS_FILE_CHOOSER (chooser), NULL);
- folders = GTK_FILE_CHOOSER_GET_IFACE (chooser)->list_shortcut_folders (chooser);
+ folders = _gtk_file_chooser_list_shortcut_folder_files (chooser);
result = files_to_strings (folders, g_file_get_uri);
g_slist_foreach (folders, (GFunc) g_object_unref, NULL);
@@ -1867,6 +1867,13 @@ gtk_file_chooser_list_shortcut_folder_uris (GtkFileChooser *chooser)
return result;
}
+GSList *
+_gtk_file_chooser_list_shortcut_folder_files (GtkFileChooser *chooser)
+{
+ g_return_val_if_fail (GTK_IS_FILE_CHOOSER (chooser), NULL);
+
+ return GTK_FILE_CHOOSER_GET_IFACE (chooser)->list_shortcut_folders (chooser);
+}
/**
* gtk_file_chooser_set_show_hidden:
diff --git a/gtk/gtkfilechooserprivate.h b/gtk/gtkfilechooserprivate.h
index 400a211270..be10757c29 100644
--- a/gtk/gtkfilechooserprivate.h
+++ b/gtk/gtkfilechooserprivate.h
@@ -102,6 +102,7 @@ gboolean _gtk_file_chooser_add_shortcut_folder (GtkFileChooser *cho
gboolean _gtk_file_chooser_remove_shortcut_folder (GtkFileChooser *chooser,
GFile *folder,
GError **error);
+GSList * _gtk_file_chooser_list_shortcut_folder_files (GtkFileChooser *chooser);
/* GtkFileChooserDialog private */
diff --git a/gtk/gtkfilechooserutils.c b/gtk/gtkfilechooserutils.c
index fb0e7b9716..0eab525b3f 100644
--- a/gtk/gtkfilechooserutils.c
+++ b/gtk/gtkfilechooserutils.c
@@ -286,7 +286,7 @@ delegate_remove_shortcut_folder (GtkFileChooser *chooser,
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