Re: [gnome-love] New file selector?



Hi,

On Sun, 2004-11-21 at 15:33 -0500, Jeramy Rutley wrote:
Thanks for that.
I now have another memory-related question.

I'm just wondering how to safely remove things out of a GSList without
having a memory leak.  I didn't find the documentation explicit.

So I have a block of code that looks like this:
GSList *gslist;


/* here's where my question actually begins */
gslist = gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(fileRequ));
while(gslist)
{
   printf("%s\n",(char *)gslist->data);
   g_free(gslist->data);
   list = g_slist_remove(gslist, gslist->data);
}
g_slist_free(gslist);
gtk_widget_destroy(fileRequ);


(Note that the condition on your while-loop guarantees that when
g_slist_free(gslist) is run, the gslist will be empty, so that the call
to g_slist_free is a no-op.)

What I want to do is remove an element off of the front of the GSList,
use it, and then free it.
In the code above, does the g_slist_remove free the list element, or
do I need to do a g_free on each individual element?  According to the
gtk_file_chooser_get_filenames documentation, it says that the g_free
is required for each element.  In that case, there's the g_free
followed by a g_slist_remove... does it care that it's pointing to an
already freed element?

g_slist_remove will free the list node (the GSlist structure), but it
will not free the data field. So you do need to call
g_free(gslist->data).

Also, in the documentation, it says that gtk_clist_* is deprecated. 
Does anyone know the GTK 2.4 equivalent of it?

The modern way to do lists and trees in gtk in using
GtkTreeView/GtkTreeStore/GteListStore and friends.

The gtk tutorial at <http://www.gtk.org/tutorial/> has some information
about them, and Tim-Philipp Müller has a whole tutorial on them at
<http://scentric.net/tutorial/treeview-tutorial.html>

HTH,

-- m




-- 
Mariano Suárez-Alvarez <msuarezalvarez arnet com ar>
http://www.gnome.org/~mariano

Attachment: signature.asc
Description: This is a digitally signed message part



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]