Re: Problem with references
- From: "Brian J. Tarricone" <bjt23 cornell edu>
 
- To: gtk-app-devel-list gnome org
 
- Subject: Re: Problem with references
 
- Date: Fri, 14 Mar 2008 03:01:37 -0700
 
On Fri, 14 Mar 2008 09:41:22 +0100 Gabriele Greco wrote:
After some headache with my gtk C++ classes I've found  with a small
test program this fact about the gobject references:
Sorry, not sure what you're trying to do.  Are you trying to do
something with gtkmm?  Or are you creating your own bindings?
Here is the code (tested with GTK 2.12):
#include <gtk/gtk.h>
int main()
{
    gtk_init(NULL, NULL);
    GtkWindow *w = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    GtkWidget *l = gtk_label_new("Test");
    printf("Window\nStart: %d ", G_OBJECT(w)->ref_count);
    g_object_ref_sink(G_OBJECT(w));
Gtk owns all toplevel windows.  It already does _ref_sink() on
GtkWindows on creation (see gtk_window_init() in gtk/gtkwindow.c).  In
this case, if you want to keep an extra reference to 'w', you'd just
call g_object_ref() on it.
    printf("Sink: %d ", ((GObject *)w)->ref_count);
    g_object_unref(G_OBJECT(w));
This should be ok as well, IFF you've previously called g_object_ref()
and thus own a reference to it.  As I said, Gtk owns the initial
(non-floating) reference GtkWindow that you get back with
gtk_window_new().
    printf("End: %d\n", ((GObject *)w)->ref_count);
    printf("Label\nStart: %d ", G_OBJECT(l)->ref_count);
    g_object_ref_sink(G_OBJECT(l));
    printf("Sink: %d ", ((GObject *)l)->ref_count);
    g_object_unref(G_OBJECT(l));
    printf("End: %d\n", ((GObject *)l)->ref_count);
}
This more or less works (because non-window GtkObjects are created
floating), but that's usually not what you'd want to do.  Again you'd
probably want to just take a normal reference on the widget and then
unref it when you don't need it anymore.  When you add a widget to a
container, it will take care of ditching the floating reference and
taking a real reference.
        -brian
[
Date Prev][
Date Next]   [
Thread Prev][
Thread Next]   
[
Thread Index]
[
Date Index]
[
Author Index]