Re: Reference Counting



ABOUT WEAK_REFERENCES

I can't get g_object_weak_ref working, this is the (full) example I've tried it on. It tryes to free a GDate which is in a gtktreemodel.

/****************/

#include <gtk/gtk.h>
#include <glib.h>
#include <stdio.h>


void weak_ref (gpointer data, GObject *object) {
       g_date_free (data);
       printf ("weak_ref\n");
}


GtkTreeModel *generate_tree_model () {
       GtkListStore *model;
       GtkTreeIter iter;
       GDate *date = g_date_new_dmy (10, 4, 1986);
       model = gtk_list_store_new (
                       3,
                       G_TYPE_INT,
                       G_TYPE_STRING,
                       G_TYPE_POINTER,
                       -1);
       gtk_list_store_append (model, &iter);
       gtk_list_store_set (model, &iter,
                       0, 1,
                       1, "Holaaaa",
                       2, date, -1);
       g_object_weak_ref (G_OBJECT(model), (GWeakNotify) weak_ref, date);

       date = g_date_new_dmy (10, 4, 1986);
       gtk_list_store_append (model, &iter);
       gtk_list_store_set (model, &iter,
                       0, 2,
                       1, "Chauuu",
                       2, date, -1);
       g_object_weak_ref (G_OBJECT(model), (GWeakNotify) weak_ref, date);

       return GTK_TREE_MODEL (model);
}


GtkWidget *generate_tree_view () {
       GtkTreeView *treeview;
       GtkCellRenderer *renderer;
       GtkTreeViewColumn *column;

       treeview = GTK_TREE_VIEW (gtk_tree_view_new ());
       renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes ("UNO", renderer, "text", 0, NULL);
       gtk_tree_view_append_column (treeview, column);

       renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes ("DOS", renderer, "text", 1, NULL);
       gtk_tree_view_append_column (treeview, column);

       return GTK_WIDGET (treeview);
}


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

       gtk_init (&argc, &argv);

       window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
       gtk_window_set_title (GTK_WINDOW (window), "Reference Counting");
       treeview = generate_tree_view ();
gtk_tree_view_set_model (GTK_TREE_VIEW (treeview), generate_tree_model ());
       gtk_container_add (GTK_CONTAINER (window), treeview);
g_signal_connect (G_OBJECT (window), "delete-event", G_CALLBACK (gtk_main_quit), NULL);
       gtk_widget_show_all (window);

       gtk_main ();
       return 0;
}

It NEVER prints "weak ref".



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