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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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++; }
Partager