Re: GtkBuilder Public API - Last call



libglade's _new() function has a "root" parameter:
http://developer.gnome.org/doc/API/libglade/gladexml.html#GLADE-XML-NEW

This is necessary because libglade otherwise instantiates all the items
in the file. Does GtkBuilder instead only instantiate the objects when
you actually use gtk_builder_get_object()? 


I also think that the memory management of the result of
gtk_builder_get_object() should be made clearer. It was never very clear
for glade_xml_get_widget(), but it's more complicated now that we can
get objects as well as widgets.

For widgets, I guess that it's like this:
1. For child widgets, such as GtkButton, they belong to their parent
containers and will be destroyed by them when the containers are
destroyed, so you don't need to call g_object_unref() or
gtk_widget_destroy().
2. For top-level windows, such as GtkWindow, they should be destroyed
with gtk_widget_destroy() when you are finished with them.

But for objects, I guess that:
3. For objects, such as GtkTreeModel, g_object_unref() should be called.
  This would require that a reference is given when
glade_xml_get_widget() is called a second time, as well as the first
time. This would be inconsistent with other GTK+ API, but it does not
seem sensible to expect the application code to know when the result has
just been instantiated rather than simply returned again.


And it would be nice to know whether the objects are reference/owned at
all by the GtkBuilder instance? For instance, should we expect the
widgets to be destroyed when the GtkBuilder instance is unreferenced? I
guess not, but it should be stated.


-- 
Murray Cumming
murrayc murrayc com
www.murrayc.com
www.openismus.com





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