Ajout d'un onglet a la volee
Je suis toujours sur mon IRC fait maison. J'ai cree uen fonction permettant de creer des onglets pour ajouter un nouveau channel ou message prive.
Quand je le fais en dur dans mon programme avec des onglets test, ca fonctionne parfaitement, mais quand je fais appelle a cette meme fonction lorsque je clique sur un bouton, alors un joli segmentation fault se produit :?
Code:
1 2 3 4 5 6 7 8
| typedef struct s_interface
{
GtkWidget *window;
GtkWidget *notebook;
GtkWidget *vbox1;
GtkWidget *label1;
GSList *channels;
} t_interface; |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| typedef struct s_channel
{
GtkWidget *title;
GtkWidget *hbox1;
GtkWidget *hbox2;
GtkWidget *vbox2;
GtkWidget *vbox3;
GtkWidget *scrolledwindow;
GtkWidget *textview;
GtkWidget *entry;
GtkWidget *label1;
GtkWidget *label2;
GtkWidget *menu;
GSList *pseudos;
} t_channel; |
Code:
1 2 3 4 5 6 7 8 9
| void on_click_pseudo(GtkWidget *widget, gpointer data)
{
t_interface *interface;
interface = (t_interface *) data;
add_channel(interface);
printf("Ajout d'un message prive\n");
widget = NULL;
} |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| void add_channel(t_interface *interface)
{
t_channel *channel;
gchar *str;
static gint i = 0;
channel = g_malloc(sizeof(t_channel));
str = g_strdup_printf("#Channel %d", i + 1);
channel->title = gtk_label_new(str);
str = g_strdup_printf("Menu -> #Channel %d", i + 1);
channel->menu = gtk_label_new(str);
channel->hbox1 = gtk_hbox_new(FALSE, 0);
create_pseudos_list(channel);
gtk_box_pack_start(GTK_BOX(channel->hbox1), channel->vbox2, FALSE, TRUE, 0);
create_display_zone(channel);
gtk_box_pack_start(GTK_BOX(channel->hbox1), channel->vbox3, TRUE, TRUE, 0);
gtk_notebook_append_page_menu(GTK_NOTEBOOK(interface->notebook), channel->hbox1, channel->title, channel->menu);
interface->channels = g_slist_append(interface->channels, (gpointer) channel);
g_free(str);
i++;
} |