On Mon, 2014-11-17 at 10:02 -0600, The Devils Jester wrote: > I'm sorry, Form is (I believe) a holdover term from using Visual Basic over > a decade ago. I do mean Window when I say that. > > Most of those answers are what I expected except I am not sure what GTK > considers as holding a reference. > > From my understanding when a widget is created it initially has a reference > count of 1.
No, that's indicative that you have indeed not read the documentation of GInitiallyUnowned. As I mentioned in the previous mail, GtkWidget is GInitiallyUnowned, which means it is initially created with no hard reference, and only a floating reference. Best, -Tristan > If you add it to a container, the container sinks that > reference (so it's now at 0). When the container is destroyed it calls > destroy on its children (which deletes them if the reference count is > zero). If I float the reference count manually, then the widget (and it's > children if it's a container) won't be destroyed. > > When you say holding a reference, do you mean something that has manually > increased the reference count? > On Nov 17, 2014 9:33 AM, "Tristan Van Berkom" <tris...@upstairslabs.com> > wrote: > > > On Mon, 2014-11-17 at 09:01 -0600, The Devils Jester wrote: > > > I have some questions about various situations and whether or not GTK or > > my > > > program is responsible for freeing the objects/memory in these > > situations. > > > > > > Situation 1: I have a (visible) form, with a container, with a widget. > > I > > > close the form. Are all the widgets (and the form) cleaned up? > > > > Normally yes, this of course depends on if you are just 'hiding' the > > window (afaik there is no such thing as a 'form'), or destroying the > > window. > > > > Also depends on whether you have any explicit refs to any of the > > children. > > > > > Situation 2: I have the same as above, but the window is never shown, so > > > is never closed. However, gtk_main_quit() is called. Am I responsible > > for > > > the cleanup of the window? (And if I destroy the window manually, will > > it > > > clean up all of its children?) > > > > Yes you are responsible for destroying the window, and yes, normally it > > will clean up all children. > > > > > Situation 3: I have a container, that has children, but that container > > is > > > never added to a form. Am I responsible for cleaning up the container? > > > And, as above, if I destroy the container, will it clean up its children, > > > or am I responsible for that? > > > > Yes, you are responsible for g_object_ref_sink()ing, destroying that > > container and then unreffing it, this is an abnormal case, and yes > > it will clean up it's children. > > > > > > > Situation 4: I have a container with children (as in Situation 3), but > > it > > > was added to a form at one point (and later removed). Am I responsible > > for > > > that (are we back to Situation 3 at that point?) > > > > This depends if you held any explicit ref count to the container, if you > > did not, it will automatically free itself and it's children when you > > remove it from it's parent. > > > > > With those 4 situations, is the following the correct way to clean up any > > > of the objects that I am responsible for? > > > > > > g_object_ref_sink(G_OBJECT(widget)); > > > gtk_widget_destroy(widget); > > > g_object_unref(G_OBJECT(widget)); > > > > This should work consistently yes. > > > > Widgets are GInitiallyUnowned, so their ownership is consumed by > > their parent widget when they are added to a parent. > > > > The exception to the rule is GtkWindow and it's derived classes, which > > is owned by GTK+'s toplevel window list, regardless of whether the > > window was ever shown or not, or shown and then hidden. > > > > Cheers, > > -Tristan > > > > > > > _______________________________________________ > gtk-app-devel-list mailing list > gtk-app-devel-list@gnome.org > https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list _______________________________________________ gtk-app-devel-list mailing list gtk-app-devel-list@gnome.org https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list