I created a composite widget template with Glade, and now I am binding all the children in the composite widget template to private data members in my class. When I bind one particular member, box1, I get a segfault in gtk_widget_is_toplevel (widget=0x837b60) at gtkwidget.c:8474.
If I don't bind box1, the application starts. Why would binding this child cause a segfault even though it is GtkWidget, defined in channel_list.ui?
#include "channel_list.h" struct _HRChannelListPrivate { GtkWidget* box1; GtkWidget* label1; GtkWidget* comboboxtext1; GtkWidget* scrolledwindow1; GtkWidget* treeview1; }; G_DEFINE_TYPE_WITH_PRIVATE (HRChannelList, hr_channel_list, GTK_TYPE_BOX); static void hr_channel_list_class_init (HRChannelListClass *k) { GtkWidgetClass* widget_class; widget_class = GTK_WIDGET_CLASS (k); gtk_widget_class_set_template_from_resource (widget_class, "/org/thoughtjacked/homerunner/channel_list.ui"); gtk_widget_class_bind_template_child_private (widget_class, HRChannelList, box1); gtk_widget_class_bind_template_child_private (widget_class, HRChannelList, label1); gtk_widget_class_bind_template_child_private (widget_class, HRChannelList, comboboxtext1); gtk_widget_class_bind_template_child_private (widget_class, HRChannelList, scrolledwindow1); gtk_widget_class_bind_template_child_private (widget_class, HRChannelList, treeview1); } static void hr_channel_list_init (HRChannelList *widget) { widget->priv = G_TYPE_INSTANCE_GET_PRIVATE (widget, HR_TYPE_CHANNEL_LIST, HRChannelListPrivate); gtk_widget_init_template (GTK_WIDGET (widget)); } GtkWidget * hr_channel_list_new () { return g_object_new (HR_TYPE_CHANNEL_LIST, NULL); }
#include <gtk/gtk.h> G_BEGIN_DECLS #define HR_TYPE_CHANNEL_LIST (hr_channel_list_get_type ()) #define HR_CHANNEL_LIST (o) (G_TYPE_CHECK_INSTANCE_CAST ((obj), HR_TYPE_CHANNEL_LIST, HRChannelList)) #define HR_CHANNEL_LIST_CLASS (k) (G_TYPE_CHECK_CLASS_CAST ((klass), HR_TYPE_CHANNEL_LIST, HRChannelListClass)) #define HR_IS_CHANNEL_LIST (o) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), HR_TYPE_CHANNEL_LIST)) #define HR_IS_CHANNEL_LIST_CLASS (k) (G_TYPE_CHECK_CLASS_TYPE ((klass), HR_TYPE_CHANNEL_LIST)) #define HR_CHANNEL_LIST_GET_CLASS (o) (G_TYPE_INSTANCE_GET_CLASS ((obj), HR_TYPE_CHANNEL_LIST, HRChannelListClass)) typedef struct _HRChannelList HRChannelList; typedef struct _HRChannelListClass HRChannelListClass; typedef struct _HRChannelListPrivate HRChannelListPrivate; struct _HRChannelList { /*< private >*/ GtkContainer container; HRChannelListPrivate *priv; }; struct _HRChannelListClass { GtkBoxClass parent_class; }; GtkWidget *hr_channel_list_new (); G_END_DECLS
/* ============================================================================ Name : channellist.c Author : Tristian Celestin Version : Copyright : Description : Hello World in GTK+ ============================================================================ */ #include <gtk/gtk.h> #include "channel_list.h" int main (int argc, char *argv[]) { GtkWidget *window; GtkWidget *list; gtk_init (&argc, &argv); window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (window), "Hello World"); g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL); list = hr_channel_list_new (); gtk_container_add (GTK_CONTAINER (window), list); gtk_widget_show_all (window); gtk_main (); return 0; }
_______________________________________________ gtk-app-devel-list mailing list gtk-app-devel-list@gnome.org https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list