¿Cómo puedo saber qué eventos GDK se requieren para una señal GTK +?
Pregunta
Estoy usando Glade-3 para mi diseño de GUI, pero sigo teniendo este problema. No veo nada en la documentación de GTK + que asigna señales a eventos o en Glade-3 (3.4.5). ¿Hay algún lugar en el código fuente de GTK + para encontrar esta información?
Nota: en esta pregunta es importante reconocer que los eventos y las señales NO son lo mismo en GTK.
Ejemplo:
Tengo un eventbox que requiere los siguientes eventos para recibir las siguientes señales. ¿Cómo puedo determinar qué eventos son requeridos por una señal dada?
Events: GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_STRUCTURE_MASK
Signals: leave_notify_event, enter_notify_event
Solución
Ok, creo que sé lo que quieres decir ahora, encontré esta tabla que coincide con las señales de gtk y los eventos de gdk. Aquí está .
Otros consejos
Suponiendo que he interpretado su pregunta correctamente, desea conectar las señales que especificó en el archivo Glade a las funciones en el código fuente. La forma de hacerlo depende de si está utilizando libglade para cargar los archivos generados o GtkBuilder, ambos son similares, pero daré muestras en C para completarlas.
Usando libglade lo harías así:
GladeXml *xml = glade_xml_new(filename, NULL, NULL); // Load the file
glade_xml_signal_autoconnect(xml); // Connect the signals
Usando GtkBuilder sería así:
GtkBuilder *xml = gtk_builder_new();
gtk_builder_add_from_file(xml, filename, NULL); // Load the file
gtk_builder_connect_signals(xml, NULL); // Connect the signals
Al usar GtkBuilder, el segundo parámetro en la función de conexión de señal puede reemplazarse con un puntero a los datos que luego se pasarán a los manejadores de señales.
Siguiendo adelante, sugeriría que usar GtkBuilder ya que libglade está en camino de ser desaprobado.
Enlaces
Aquí están los enlaces a la documentación relevante sobre las dos funciones mencionadas anteriormente
Puede capturar los eventos con gdk_event_handler_set ()
Primero registre su propio controlador de eventos GDK en el inicio:
gdk_event_handler_set(my_gdk_event_handler, NULL, NULL);
... Luego utilícelo para imprimir cualquier información útil, y no olvide pasar el evento a GTK + a través de gtk_main_do_event ()
como aquí:
void my_gdk_event_handler(GdkEvent *event, gpointer data)
{
printf("Received GdkEvent of type %d", event->type);
gtk_main_do_event(event); // Pass event to GTK+
}