]> git.llucax.com Git - personal/documentos.git/blob - curso_gtk/clase2/ejemplo.c
Agregar material del curso de GTK+ nunca dado
[personal/documentos.git] / curso_gtk / clase2 / ejemplo.c
1 #include <gtk/gtk.h>
2 #include <glade/glade.h>
3 #include <stdio.h>
4
5 /* tengo una estructura global para tener referencias a los elementos que usa
6  * la aplicación comunmente */
7 struct 
8 {
9         GtkWindow* ventana; /* ventana principal */
10         GtkEntry*  entrada; /* entrada de texto */
11 }
12 app;
13
14 /* callback para cerrar la aplicación con la X */
15 void
16 on_ventana_destroy(GtkWidget *widget, gpointer user_data)
17 {
18         /* sale del programa, corta el loop de eventos */
19         gtk_main_quit();
20 }
21
22 /* callback a usar cuando se pulsa el botón */
23 void
24 on_boton_clicked(GtkWidget *widget, gpointer user_data)
25 {
26         const gchar* texto;
27
28         /* obtengo texto de la entrada de texto */
29         texto = gtk_entry_get_text(app.entrada);
30         /* pongo el texto como título */
31         gtk_window_set_title(app.ventana, texto);
32 }
33
34 /* programa principal */
35 int
36 main(int argc, char *argv[])
37 {
38         GladeXML *xml;
39
40         /* inicializo gtk y glade */
41         gtk_init(&argc, &argv);
42         glade_init();
43         /* cargo interfaz del archivo XML de glade */
44         xml = glade_xml_new("ejemplo.glade", "ventana", NULL);
45         /* cargo datos de la aplicación */
46         app.ventana = GTK_WINDOW(glade_xml_get_widget(xml, "ventana"));
47         app.entrada = GTK_ENTRY(glade_xml_get_widget(xml, "entrada"));
48         /* conecta todas las señales automáticamente */
49         glade_xml_signal_autoconnect(xml);
50         /* comienza el loop de eventos */
51         gtk_main();
52
53         /* salimos, después de que alguien llamó gtk_main_quit(), sin error */
54         return 0;
55 }
56