[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]
Solved - Re: My unstable treeview test application
- From: kadil <ksadil bigpond com>
- To: gtk-app-devel-list gnome org
- Subject: Solved - Re: My unstable treeview test application
- Date: Sun, 07 Sep 2003 21:06:34 +1000
I have identified the cause of my own programs instability. I am not
sure if this rates as a bug, or my lack of understanding, but by
declaring a global GtkTreeSelection pointer, the compiled application
segfaults. Any ideas if this is a sensible consequence or not?
Regards,
Kim
On Sat, 2003-09-06 at 22:27, kadil wrote:
> Hi,
>
> I have read about all that I can find on the subject of gtktreeviews. So
> I tried to apply the code snippets with a gui using glade to build it.
> On my laptop - Mandrake 9.1, it works - sort of, but it segfaults very
> quickly. On this desktop, also mandrake9.1, immediate segfault. I
> suspect it is a signal problem. Anyhow here's the code. The app is a
> form with a button to set things up, a treeview widget and a button
> below to add a row. Any assistance would be greatly appreciated.
>
> Thanks,
> Kim
>
> callbacks.c:
>
>
> #ifdef HAVE_CONFIG_H
> # include <config.h>
> #endif
>
> #include <gtk/gtk.h>
>
> #include "callbacks.h"
> #include "interface.h"
> #include "support.h"
>
> GtkTreeStore *store;
> GtkWidget *tree,*sw,*w1;
> GtkTreeViewColumn *column;
> GtkCellRenderer *renderer;
> GtkTreeIter *iter;
> GtkTreeSelection *select;
>
> enum
> {
> TITLE_COLUMN,
> AUTHOR_COLUMN,
> CHECKED_COLUMN,
> N_COLUMNS
> };
>
>
> static void tree_selection_changed_cb(GtkTreeSelection
> *selection,gpointer data)
> {
> GtkTreeIter iter1;
> GtkTreeModel *model1;
> gchar *author;
> if(gtk_tree_selection_get_selected(selection,&model1,&iter1))
> {
> gtk_tree_model_get(model1,&iter1,AUTHOR_COLUMN,&author,-1);
> g_print("you selected a book by %s \n",author);
> g_free(author);
> }
> }
>
> void
> on_button1_clicked (GtkButton *button,
> gpointer user_data)
> {
>
> //create a model
>
> store=gtk_tree_store_new(N_COLUMNS,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_BOOLEAN);
> //fill the model
> //populate_tree_model(store);
> gtk_tree_store_append(store,&iter,NULL);
> gtk_tree_store_set(store,&iter,TITLE_COLUMN,"The art of
> programming",AUTHOR_COLUMN,"ME",CHECKED_COLUMN,FALSE,-1);
>
> //create a view
> tree=gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
>
> //get rid of our own reference to store
> g_object_unref(G_OBJECT(store));
>
> //create a cell renderers and columns
> renderer=gtk_cell_renderer_text_new();
> g_object_set(G_OBJECT(renderer),"foreground","red",NULL);
>
> column=gtk_tree_view_column_new_with_attributes("Author",renderer,"text",AUTHOR_COLUMN,NULL);
> gtk_tree_view_append_column(GTK_TREE_VIEW(tree),column);
> renderer=gtk_cell_renderer_text_new();
>
> column=gtk_tree_view_column_new_with_attributes("Title",renderer,"text",TITLE_COLUMN,NULL);
> gtk_tree_view_append_column(GTK_TREE_VIEW(tree),column);
> renderer=gtk_cell_renderer_toggle_new();
> column=gtk_tree_view_column_new_with_attributes("Checked
> out",renderer,"active",CHECKED_COLUMN,NULL);
> gtk_tree_view_append_column(GTK_TREE_VIEW(tree),column);
> //insert the widget
> sw=lookup_widget(button,"scrolledwindow1");
> gtk_container_add(GTK_CONTAINER(sw),tree);
> gtk_widget_show(tree);
> w1=lookup_widget(button,"window1");
> select=gtk_tree_view_get_selection(GTK_TREE_VIEW(tree));
> gtk_tree_selection_set_mode(select,GTK_SELECTION_SINGLE);
>
> g_signal_connect(G_OBJECT(select),"changed",G_CALLBACK(tree_selection_changed_cb),NULL);
>
>
>
> }
>
>
> void
> on_button2_clicked (GtkButton *button,
> gpointer user_data)
> {
> gtk_tree_store_append(store,&iter,NULL);
> gtk_tree_store_set(store,&iter,TITLE_COLUMN,"The art of
> programming",AUTHOR_COLUMN,"ME",CHECKED_COLUMN,FALSE,-1);
> printf("added another row to model\n");
> gtk_widget_show(tree);
>
>
>
> }
>
>
> void
> on_button3_clicked (GtkButton *button,
> gpointer user_data)
> {
> gtk_main_quit();
> }
>
>
>
> interface.c
>
>
> #ifdef HAVE_CONFIG_H
> # include <config.h>
> #endif
>
> #include <sys/types.h>
> #include <sys/stat.h>
> #include <unistd.h>
> #include <string.h>
> #include <stdio.h>
>
> #include <gdk/gdkkeysyms.h>
> #include <gtk/gtk.h>
>
> #include "callbacks.h"
> #include "interface.h"
> #include "support.h"
>
> #define GLADE_HOOKUP_OBJECT(component,widget,name) \
> g_object_set_data_full (G_OBJECT (component), name, \
> gtk_widget_ref (widget), (GDestroyNotify) gtk_widget_unref)
>
> #define GLADE_HOOKUP_OBJECT_NO_REF(component,widget,name) \
> g_object_set_data (G_OBJECT (component), name, widget)
>
> GtkWidget*
> create_window1 (void)
> {
> GtkWidget *window1;
> GtkWidget *vbox1;
> GtkWidget *button1;
> GtkWidget *scrolledwindow1;
> GtkWidget *button2;
> GtkWidget *button3;
>
> window1 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
> gtk_window_set_title (GTK_WINDOW (window1), _("window1"));
>
> vbox1 = gtk_vbox_new (FALSE, 0);
> gtk_widget_show (vbox1);
> gtk_container_add (GTK_CONTAINER (window1), vbox1);
>
> button1 = gtk_button_new_with_mnemonic (_("button1"));
> gtk_widget_show (button1);
> gtk_box_pack_start (GTK_BOX (vbox1), button1, FALSE, FALSE, 0);
>
> scrolledwindow1 = gtk_scrolled_window_new (NULL, NULL);
> gtk_widget_show (scrolledwindow1);
> gtk_box_pack_start (GTK_BOX (vbox1), scrolledwindow1, TRUE, TRUE, 0);
> gtk_widget_set_size_request (scrolledwindow1, 510, 651);
>
> button2 = gtk_button_new_with_mnemonic (_("button2"));
> gtk_widget_show (button2);
> gtk_box_pack_start (GTK_BOX (vbox1), button2, FALSE, FALSE, 0);
>
> button3 = gtk_button_new_with_mnemonic (_("button3"));
> gtk_widget_show (button3);
> gtk_box_pack_start (GTK_BOX (vbox1), button3, FALSE, FALSE, 0);
>
> g_signal_connect ((gpointer) button1, "clicked",
> G_CALLBACK (on_button1_clicked),
> NULL);
> g_signal_connect ((gpointer) button2, "clicked",
> G_CALLBACK (on_button2_clicked),
> NULL);
> g_signal_connect ((gpointer) button3, "clicked",
> G_CALLBACK (on_button3_clicked),
> NULL);
>
> /* Store pointers to all widgets, for use by lookup_widget(). */
> GLADE_HOOKUP_OBJECT_NO_REF (window1, window1, "window1");
> GLADE_HOOKUP_OBJECT (window1, vbox1, "vbox1");
> GLADE_HOOKUP_OBJECT (window1, button1, "button1");
> GLADE_HOOKUP_OBJECT (window1, scrolledwindow1, "scrolledwindow1");
> GLADE_HOOKUP_OBJECT (window1, button2, "button2");
> GLADE_HOOKUP_OBJECT (window1, button3, "button3");
>
> return window1;
> }
>
>
>
>
> _______________________________________________
> gtk-app-devel-list mailing list
> gtk-app-devel-list@gnome.org
> http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list
[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]