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

Reply via email to