Reference counting for tree models doesn't behave the same way as for contained components. The tree view adds an additional reference to the model, so in your case your model is never destroyed as the ref count is 2.
Try invoking: g_object_unref(model) after you add it to the view. My source for this info is: http://scentric.net/tutorial/sec-treeview.html#sec-treeview-connect-model-refcounting Haven't tried it. Matias Torres wrote: > 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". _______________________________________________ gtk-app-devel-list mailing list gtk-app-devel-list@gnome.org http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list