En GTK+, un signal est une méthode qui permet de recevoir de notification. Pour être claire, il faut savoir qu’un signal est un événement qui se produit sur un objet. Ce sont les signaux qui permettent à l’utilisateur d’une application d’interagir avec l’application. Par exemple, si un utilisateur clique sur un bouton, un signal d’un objet sera émis dans l'objet spécifié. Par conséquent, la fonction spécifiée lors de l’émission de ce signal, sera appelée.
Un signal est sélectionné en utilisant un identificateur entier (l’id du signal) ou une chaîne de caractères.
La fonction qui sera appelée lors de l’émission du signal, est appelée fonction callback.
Elle est bien évidement créée par le programmeur (donc vous, futur Denis Ritchie…).
La notion des signaux est une notion importante et quasi obligatoire car on ne peut
pas faire un programme utile sans utiliser des signaux. En GTK+, on peut trouver des signaux que
tous les widgets héritent (comme par exemple destroy) et des signaux qui sont spécifiques pour chaque
widget (comme par exemple toggled).
Pour l’utilisation d’un signal, on doit :
Il faut noter qu’au lieu d’utiliser g_signal_connect, on peut utiliser
g_signal_connect_swapped.
Dans ce cas la syntaxe de la fonction callback change aussi. Voyons les deux syntaxes
en cas d’utilisation de g_signal_connect_swapped :
Pour la fonction callback, voici la syntaxe :
void nom_de_la_fonction_callback ( gpointer donnée_de_callback,
…/*autres arguments de signaux*/
GtkWidget *nom_widget);
Pour la connexion :
gulong g_signal_connect_swapped( gpointer *object,
const gchar *nom,
GCallback fonction ,
gpointer *donnée_de_callback);
Maintenant ce qui reste est de faire appelle à la boucle événementielle:
void gtk_main(void);
Il ne faut surtout pas oublier de quitter cette boucle, dans ce cas on utilise :
void gtk_main_quit(void);
Exemple : Revenons avec notre fameuse fenêtre: