Bueno, con esto del nuevo curso, vienen las ganas de trabajar (que suelen durar un par de meses
). La cosa es que ayer me puse a mirar el manual GTK+ de la página oficial, y me puse a hacer algunas tonterías. Para no quemarme diseñando las pantallas, tiré por glade-2.
Bien, aquí está la duda, quiero que en la señal button_clicked llamé a una función, y le pase como argumento el puntero a un objeto entry, para modificar su texto con un file chooser dialog, bueno a lo que vamos, que lo hice a mano, y funcionaba perfectamente, pero si lo hago por glade, la llamada a la función callback que me construye es la siguiente:
g_signal_connect_swapped ((gpointer) button4, "clicked",
G_CALLBACK (on_button_clicked),
GTK_OBJECT (entry4));
Y obtengo el siguiente error al ejecutar la función (compila sin problemas):
(FCIconTM:21453): Gtk-CRITICAL **: file gtkentry.c: line 3642 (gtk_entry_set_text): assertion `GTK_IS_ENTRY (entry)' failed
Lo vuelvo a dejar como antes, cuando lo hice a mano y vuelve a funcionar perfectamente:
g_signal_connect ((gpointer) button4, "clicked",
G_CALLBACK (on_button_clicked),
(gpointer) entry4);
Por qué glade se empeña en usar el swapped, si según el manul de GTK se usa cuando sólo se pasa un objeto? Hago algo malen glade? El mayor problema es que como glade construye todo el interface.c, cada vez que modifico algo a mano y le doy a construir en glade, se me va todo al ...
Gracias!.
Editado: Me ayudo yo solo
, nada como el viejo método del prueba-prueba, con el swapped se pueden pasar dos objetos, sólo que cambia el orden, no entiendo muy bien el como ni el por qué, pero el primer argumento (es decir el objeto que ha activado la señal), pasa a ser el segundo argumento en la callback, y el último argumento (el puntero al dato/objeto que quieras pasar para interactuar), en la callback es el primero
. Y si según el manual:
manual GTK+ escribió:We usually don't setup callbacks for g_signal_connect_swapped() however. They are usually used to call a GTK function that accepts a single widget or object as an argument, as is the case in our helloworld example.
Por qué glade usa el swapped cuando le indicas DOS objeto?