Les signaux

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 :

  • D’abord créer la fonction callback. Ci-dessous la syntaxe :
    void nom_de_la_fonction_callback(GtkWidget *nom_widget,
    …,/*autres arguments de saignaux*/
    gpointer donnée_de_callback);

    NB : le paramètre nom_widget désigne le widget qui a emis le signal.
  • Ensuite connecter un signal à la fonction callback. Dans ce cas on va utiliser g_signal_connect. Ci-dessous la syntaxe :
    gulong g_signal_connect( gpointer *object,
    const gchar *nom,
    GCallback fonction,
    gpointer donnée_de_la_fonction);

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:



Une question? Cliquez ici pour la poser.

Retour sur le portail du langage C/C++