--- /dev/null
+# Makefile de ejemplo para C++
+#
+# Creado: jue abr 15 15:34:19 ART 2004
+#
+# Copyleft 2004 - Leandro Lucarella, Bajo licencia GPL [http://www.gnu.org/]
+#
+
+# CONFIGURACION
+################
+
+# Nombre del ejecutable.
+target = ejemplo
+
+# CONFIGURACION "AVANZADA"
+###########################
+
+# Opciones para el compilador C.
+CFLAGS = -Wall -ggdb -ansi -pedantic -DDEBUG
+
+CFLAGS += $(shell pkg-config --cflags gtk+-2.0 libglade-2.0)
+LDFLAGS += $(shell pkg-config --libs gtk+-2.0 libglade-2.0)
+
+# REGLAS
+#########
+
+.PHONY: all clean
+
+all: $(target)
+
+clean:
+ @$(RM) -fv *.o $(target)
+
--- /dev/null
+#include <gtk/gtk.h>
+#include <glade/glade.h>
+#include <stdio.h>
+
+/* tengo una estructura global para tener referencias a los elementos que usa
+ * la aplicación comunmente */
+struct
+{
+ GtkWindow* ventana; /* ventana principal */
+ GtkEntry* entrada; /* entrada de texto */
+}
+app;
+
+/* callback para cerrar la aplicación con la X */
+void
+on_ventana_destroy(GtkWidget *widget, gpointer user_data)
+{
+ /* sale del programa, corta el loop de eventos */
+ gtk_main_quit();
+}
+
+/* callback a usar cuando se pulsa el botón */
+void
+on_boton_clicked(GtkWidget *widget, gpointer user_data)
+{
+ const gchar* texto;
+
+ /* obtengo texto de la entrada de texto */
+ texto = gtk_entry_get_text(app.entrada);
+ /* pongo el texto como título */
+ gtk_window_set_title(app.ventana, texto);
+}
+
+/* programa principal */
+int
+main(int argc, char *argv[])
+{
+ GladeXML *xml;
+
+ /* inicializo gtk y glade */
+ gtk_init(&argc, &argv);
+ glade_init();
+ /* cargo interfaz del archivo XML de glade */
+ xml = glade_xml_new("ejemplo.glade", "ventana", NULL);
+ /* cargo datos de la aplicación */
+ app.ventana = GTK_WINDOW(glade_xml_get_widget(xml, "ventana"));
+ app.entrada = GTK_ENTRY(glade_xml_get_widget(xml, "entrada"));
+ /* conecta todas las señales automáticamente */
+ glade_xml_signal_autoconnect(xml);
+ /* comienza el loop de eventos */
+ gtk_main();
+
+ /* salimos, después de que alguien llamó gtk_main_quit(), sin error */
+ return 0;
+}
+
--- /dev/null
+<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
+<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
+
+<glade-interface>
+
+<widget class="GtkWindow" id="ventana">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">Ejemplo de Glade</property>
+ <property name="type">GTK_WINDOW_TOPLEVEL</property>
+ <property name="window_position">GTK_WIN_POS_NONE</property>
+ <property name="modal">False</property>
+ <property name="resizable">True</property>
+ <property name="destroy_with_parent">False</property>
+ <property name="decorated">True</property>
+ <property name="skip_taskbar_hint">False</property>
+ <property name="skip_pager_hint">False</property>
+ <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
+ <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+ <signal name="destroy" handler="on_ventana_destroy"/>
+
+ <child>
+ <widget class="GtkHBox" id="hbox">
+ <property name="border_width">5</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">5</property>
+
+ <child>
+ <widget class="GtkEntry" id="entrada">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"></property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkButton" id="boton">
+ <property name="visible">True</property>
+ <property name="can_default">True</property>
+ <property name="has_default">True</property>
+ <property name="can_focus">True</property>
+ <property name="label">gtk-ok</property>
+ <property name="use_stock">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <signal name="clicked" handler="on_boton_clicked"/>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+</widget>
+
+</glade-interface>
--- /dev/null
+ ++===========================++
+ || Curso a distancia de GTK+ ||
+ ++===========================++
+
+. _ . _ . _ . _ . _ . _ . _ . _ . _ . _ . _ . _ . _ . _ . _ . _ . _ . _ . _ .
+
+Clase 1:
+========
+
+Programa:
+---------
+ * Inicialización de GTK+
+ * Creación de una ventana
+ * Conectar callbacks a señales
+ * Compilación de programas GTK+
+
+Lectura:
+ * http://www.gtk.org/tutorial/index.html
+ Capítulos 2, 3, 4, 5.1 y 6
+
+ * http://www.linuxlots.com/~barreiro/spanish/gtk/tutorial/gtk_tut.es.html
+ Versión en castellano, recomiendo _NO_ leerla porque es de
+ GTK+ 1.2, por lo que tiene muchas cosas obsoletas
+
+. _ . _ . _ . _ . _ . _ . _ . _ . _ . _ . _ . _ . _ . _ . _ . _ . _ . _ . _ .
+
+Clase 2:
+========
+
+Programa:
+---------
+ * Diseñar una interfaz grafica con glade simple
+ * Levantar el XML con libglade
+ * Conectar callbacks automáticamente
+ * Compilación de programas con libglade
+
+Lectura:
+--------
+ * http://developer.gnome.org/doc/API/libglade/libglade-notes.html
+ Sólo "Libglade Programming Basics", "Embedding Libglade
+ Interfaces" y "Internationalisation with Libglade", si te
+ interesa hacer aplicaciones internacionalizables
+
+ * http://developer.gnome.org/doc/API/libglade/libglade-lib.html
+ Recomendado darle una ojeada para conocer mejor las
+ capacidades de glade, en especial mirar GladeXML
+
+. _ . _ . _ . _ . _ . _ . _ . _ . _ . _ . _ . _ . _ . _ . _ . _ . _ . _ . _ .
+