Bonjour à tous,

j'ai un petit soucis avec Gtk+, je voudrais créer un lien entre deux fenêtres, je m'explique. Je voudrais que lorsque je détruis une fenêtre à l'aide d'un bouton, une autre se lance automatiquement. Mais vous comprendrez mieux à l'aide de mon code.

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
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include <stdlib.h>
#include <gtk/gtk.h>
 
typedef struct test2
{
    GtkWidget *button;
    GtkWidget *win;
    GtkWidget *win2;
    GtkWidget *vbox;
 
    gulong handler_id[3];
 
}test2;
 
void launch(test2 *new_)
{
    new_->win2 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    gtk_container_set_border_width (GTK_CONTAINER (new_->win2), 8);
    gtk_window_set_title (GTK_WINDOW (new_->win2), "Hello World 2 ");
    gtk_window_set_position (GTK_WINDOW (new_->win2), GTK_WIN_POS_CENTER);
 
    /* Create the main window */
    gtk_widget_show_all (new_->win2);
}
 
void byebye(test2 *new_)
{
    gtk_widget_destroy(new_->win);
 
    g_signal_handler_disconnect (new_->button, new_->handler_id[2]);
    g_signal_handler_disconnect (new_->win, new_->handler_id[0]);
    g_signal_handler_disconnect (new_->win, new_->handler_id[1]);
}
 
int main (int argc, char *argv[])
{
  test2 *new_ = NULL;
 
  new_ = (test2*)malloc(sizeof(test2));
 
  /* Initialize GTK+ */
  g_log_set_handler ("Gtk", G_LOG_LEVEL_WARNING, (GLogFunc) gtk_false, NULL);
  gtk_init (&argc, &argv);
  g_log_set_handler ("Gtk", G_LOG_LEVEL_WARNING, g_log_default_handler, NULL);
 
  /* Create the main window */
  new_->win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  gtk_container_set_border_width (GTK_CONTAINER (new_->win), 8);
  gtk_window_set_title (GTK_WINDOW (new_->win), "Hello World");
  gtk_window_set_position (GTK_WINDOW (new_->win), GTK_WIN_POS_CENTER);
 
  //gtk_widget_realize (new_->win2);
  new_->handler_id[0] =  g_signal_connect (new_->win, "delete-event", gtk_main_quit, NULL);
  new_->handler_id[1] = g_signal_connect (new_->win, "destroy", G_CALLBACK(launch), new_);
 
  /* Create a vertical box with buttons */
  new_->vbox = gtk_vbox_new (TRUE, 6);
  gtk_container_add (GTK_CONTAINER (new_->win), new_->vbox);
 
  new_->button = gtk_button_new_with_label ("byebye");
  gtk_box_pack_start (GTK_BOX (new_->vbox), new_->button, TRUE, TRUE, 0);
  new_->handler_id[2] = g_signal_connect (new_->button, "clicked", G_CALLBACK(byebye), new_);
 
  /* Enter the main loop */
  gtk_widget_show_all (new_->win);
 
  gtk_main ();
 
  return 0;
}
Je me retrouve donc avec un segfault et je bloque.

Merci d'avance pour votre aide.