Hi list,

while testing some GTK code, I noticed that the style objects of widgets are 
not getting freed properly (or so it seems to me).

I'm no expert in GTK, so I might be totally wrong here or maybe the current 
behavior is intended as it is? So please feel free to enlighten me :)


What I think is happening is this:

gtk_widget_reset_rc_style() gets called during the creation of a new widget. 
This function calls gtk_rc_get_style() to get the new style for a widget. If 
the style differs from the current one, it gets applied by 
gtk_widget_set_style_internal, which then calls g_object_ref on it to get the 
ownership of the style for the widget.

That is all fine, apart from one thing. gtk_rc_get_style() returns either a new 
GtkStyle object or an already existing cached one. In case it returns a new 
style object, the ref count is 1 (isn't?) and unfortunately nobody will call 
g_object_unref for it. 

That is because gtk_widget_reset_rc_style() does not now, if it just got a new 
ownership (in case of a new GtkStyle object) or not (in case when it gets a 
cached GtkStyle object). 

I think this behavior of gtk_rc_get_style(), to return new objects and cached 
ones, is the root of the problem. If it would always pass the ownership of the 
returned style to the caller (e.g. by calling g_object_ref on cached styles), 
the caller could then always call g_object_unref to "free" it.


Any thoughts?




Best regards,

Henry


-- 
Hi! I'm a .signature virus! Copy me into your
~/.signature to help me spread!

_______________________________________________
gtk-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/gtk-list

Reply via email to