+2008-09-07 Matthias Clasen <mclasen@redhat.com>
+
+ * gtk/gtkfilechooserdefault.c (search_selected_foreach_get_file_cb):
+ Ref the files, to make gtk_file_chooser_get_files() behave as
+ documented.
+
+ * gtk/gtkfilechooserdefault.c (search_clear_model): Don't leak
+ the content of the search model.
+
+ * gtk/gtkfilechooserdefault.c (search_hit_get_info_cb): Don't leak
+ the content here, either.
+
2008-09-07 Matthias Clasen <mclasen@redhat.com>
* gtk/gtkfilechooserdefault.c (search_add_hit): Don't unref the
static void search_stop_searching (GtkFileChooserDefault *impl,
gboolean remove_query);
+static void search_clear_model_row (GtkTreeModel *model,
+ GtkTreeIter *iter);
static void search_clear_model (GtkFileChooserDefault *impl,
gboolean remove_from_treeview);
static gboolean search_should_respond (GtkFileChooserDefault *impl);
{
int start_row;
int num_inserted;
- const gchar *label;
+ gchar *label;
profile_start ("start", NULL);
list = data;
gtk_tree_model_get (model, iter, SEARCH_MODEL_COL_FILE, &file, -1);
- *list = g_slist_prepend (*list, file);
+ *list = g_slist_prepend (*list, g_object_ref (file));
}
/* Constructs a list of the selected paths in search mode */
if (!info)
{
+ search_clear_model_row (request->impl->search_model, &iter);
gtk_list_store_remove (request->impl->search_model, &iter);
goto out;
}
set_busy_cursor (impl, FALSE);
}
+static void
+search_clear_model_row (GtkTreeModel *model,
+ GtkTreeIter *iter)
+{
+ GFile *file;
+ gchar *display_name;
+ gchar *collation_key;
+ struct stat *statbuf;
+ GCancellable *cancellable;
+ gchar *mime_type;
+
+ gtk_tree_model_get (model, iter,
+ SEARCH_MODEL_COL_FILE, &file,
+ SEARCH_MODEL_COL_DISPLAY_NAME, &display_name,
+ SEARCH_MODEL_COL_COLLATION_KEY, &collation_key,
+ SEARCH_MODEL_COL_STAT, &statbuf,
+ SEARCH_MODEL_COL_CANCELLABLE, &cancellable,
+ SEARCH_MODEL_COL_MIME_TYPE, &mime_type,
+ -1);
+
+ if (file)
+ g_object_unref (file);
+
+ g_free (display_name);
+ g_free (collation_key);
+ g_free (statbuf);
+ g_free (mime_type);
+
+ if (cancellable)
+ g_cancellable_cancel (cancellable);
+}
+
/* Frees the data in the search_model */
static void
search_clear_model (GtkFileChooserDefault *impl,
if (gtk_tree_model_get_iter_first (model, &iter))
do
{
- GCancellable *cancellable;
-
- gtk_tree_model_get (model, &iter,
- SEARCH_MODEL_COL_CANCELLABLE, &cancellable,
- -1);
-
- if (cancellable)
- g_cancellable_cancel (cancellable);
+ search_clear_model_row (model, &iter);
}
while (gtk_tree_model_iter_next (model, &iter));