mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-12-29 06:51:10 +00:00
GtkListBox: fix model binding refcount issue
As it is, GtkListBox model binding will work nicely as long as your create_widget_func returns a floating reference on the newly-created widget. If you try to return a full reference (as any higher-level language would do) then you will leak that reference. Fix that up by converting any floating references into full references and then unconditionally releasing the full reference after adding to the box. https://bugzilla.gnome.org/show_bug.cgi?id=746893
This commit is contained in:
parent
36baf9207e
commit
6e03e7e80a
@ -3610,9 +3610,21 @@ gtk_list_box_bound_model_changed (GListModel *list,
|
||||
|
||||
item = g_list_model_get_item (list, position + i);
|
||||
widget = priv->create_widget_func (item, priv->create_widget_func_data);
|
||||
|
||||
/* We allow the create_widget_func to either return a full
|
||||
* reference or a floating reference. If we got the floating
|
||||
* reference, then turn it into a full reference now. That means
|
||||
* that gtk_list_box_insert() will take another full reference.
|
||||
* Finally, we'll release this full reference below, leaving only
|
||||
* the one held by the box.
|
||||
*/
|
||||
if (g_object_is_floating (widget))
|
||||
g_object_ref_sink (widget);
|
||||
|
||||
gtk_widget_show_all (widget);
|
||||
gtk_list_box_insert (box, widget, position + i);
|
||||
|
||||
g_object_unref (widget);
|
||||
g_object_unref (item);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user