Libglade : Connection des signaux

Résolu
cs_guifr Messages postés 105 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 19 mai 2005 - 10 mai 2005 à 23:43
cs_guifr Messages postés 105 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 19 mai 2005 - 19 mai 2005 à 19:29
Bonsoir à tous,



Je me suis plongé depuis peu dans les délices de la libglade et je
bloque sur un point crucial : impossible d'utilisez les signaux ! En
créant un projet tout bête avec juste un bouton, si par exemple au
signal "clicked" je lui demande d'accomplir un traitement tel que
gtk_main_quit, il me le fera sans problèmes, mais dès lors que je lui
assigne une fonction de mon cru, il ne l'executera pas.

Et pourtant je ne suis vraiment pas loin de l'exemple "test-libglade.c" de la docu officielle. J'ai bien mis le glade_xml_signal_autoconnect(), bien vérifié que le nom de la fonction appellée dans le fichier glade corresponde bien à celui du .c... bref je sèche.

Alors je tente de tourner le problème sous tous les angles... et je ne parviens à m'extriquer de cette impasse.

Et je ne sais plus trop où chercher; que vérifier... donc si vous avez une idée elle est la bienvenue !

2 réponses

cs_guifr Messages postés 105 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 19 mai 2005
18 mai 2005 à 19:34
Oh joie ! j'ai fini par trouver !



En fait le problème est propre à la compilation sous win32; pour ceux
que ça intéresse, il suffit de faire précéder ses fonctions de :



__declspec(dllexport)


Bon forcément ça fait un peu
brouillon, et surtout j'ai peur que ça coince lors d'une compilation
sous un autre environement que win32 (ce qui serait grandment dommage
pour la très grande portabilité de GTK et de la libglade), donc
je propose : on dit merci le précompilo et on se fait un joli header
avec dedans des trucs qui ressemblent à ça :



#ifdef G_OS_WIN32
#define GTK_CB __declspec(dllexport)
#else
#define GTK_CB
#endif


Et voilà, pour GTK_CB pour GTK
call back bien sûr, mais libre à vous de choisir autre chose ! Il
suffira alors de faire précéder toutes les fonctions à connecter par
GTK_CB.

Je n'ai pas encore eu la joie de compiler mon esquisse de projet sous
Linux, si quelqu'un a l'occasion de vérifier si ce morecau de code ne
coince pas !
3
cs_guifr Messages postés 105 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 19 mai 2005
19 mai 2005 à 19:29
Tant que j'y pense :



Pour ceux que ça amuserait de compiler en c++ (et j'en fait parti), ce
n'est pas une surprise, GTK préfère le C... et libglade n'échape pas à
la règle !!! pas envie de prendre le bindings libglademm (et je vous
comprend) ? Bin là aussi ça va poser problème car la libglade veut que
les fonctions soient en C, mais pas de panique ! si vous les prototipez
mettez juste :



#ifdef __cplusplus
extern "C" {
#endif
GTK_CB void on_button_clicked(GtkWidget *widget, gpointer user_data);
/*vos autres prototypes ici*/
#ifdef __cplusplus
}
#endif


où encerclez le code de votre interface du même extern "C" { ... }


Comme ça vous n'aurez (presque) plus de raisons de vous priver de la libglade !
3
Rejoignez-nous