Re: Recycling ListItems.
- From: Owen Taylor <otaylor gtk org>
- To: gtk-list redhat com
- Subject: Re: Recycling ListItems.
- Date: 18 Apr 1998 17:43:30 -0400
Andreas Kostyrka <andreas@ag.or.at> writes:
> I'm having problems recycling ListItems. (As my ListItems are relativly
> expensive to build I'd like to cache them.)
> 
> The problem, is that even calling gtk_widget_reparent(listitem,0);
> it's still not working and I'm getting heaps of warnings :(
What you have to be careful about when doing this is reference
counting. Normally, a widget's parent holds the only reference
to the child, so when it is removed from its parent, it will
be destroyed.
To prevent this from happening, you have to keep a reference
count on the child yourself.
 listitem = gtk_list_item_new_with_label ("Item #1");
 /* Let GTK we are taking over the initial reference count
  * for this item 
  */
 gtk_widget_ref (listitem);
 gtk_object_sink (GTK_OBJECT (listitem));
 gtk_container_add (GTK_CONTAINER (list1), listitem)
 
 [...]
 
 gtk_container_remove (GTK_CONTAINER (list1), listitem)
 gtk_container_add (GTK_CONTAINER (list2), listitem)
 
 [...]
 gtk_container_remove (GTK_CONTAINER (list2), listitem)
 /* Finally let the item be destroyed */
 gtk_widget_unref (listitem);
(An alternate way of doing this is not to hold a reference
count, but remove the items with gtk_list_remove_items_no_unref().
I think the above way is simpler if you are repeatedly adding
and removing the items)
Regards,
                                        Owen
[
Date Prev][
Date Next]   [
Thread Prev][
Thread Next]   
[
Thread Index]
[
Date Index]
[
Author Index]