On Thu, 3 May 2007, beginner.c wrote:

> I know how to pass by reference in C normally. But how do I pass by ref a
> GTK Widget to a function?

The same way, by giving the address of the object.  However, with 
a GtkWidget what you have in hand is already a pointer so in most 
cases it suffices to pass that pointer.

Totally useless but hopefully illustrative code follows:

#include <gtk/gtk.h>

void f1 (GtkWidget *w)
{
    gtk_widget_show(w);
    gtk_widget_destroy(w);
}

void f2 (GtkWidget **pw)
{
    gtk_widget_show(*pw);
    gtk_widget_destroy(*pw);
    *pw = NULL;
}

int main (int argc, char **argv)
{
    GtkWidget *w;

    gtk_init(&argc, &argv);

    w = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    printf("created new GtkWidget at %p\n", (void *) w);

    f1(w);
    /* bzzt, invalid pointer below; it has been freed */
    printf("After f1(), w = %p\n", (void *) w);

    w = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    printf("created new GtkWidget at %p\n", (void *) w);

    f2(&w);
    printf("After f2(), w = %p\n", (void *) w);

    return 0;
}

Here, the above prints:

created new GtkWidget at 0x8079000
After f1(), w = 0x8079000
created new GtkWidget at 0x80790a8
After f2(), w = (nil)

Allin Cottrell
_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list

Reply via email to