| 12
 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;
} | 
Partager