Les actions et les callbacks diffèrent par la méthode d'implémentation des fonctions:
Pour déclarer une action, il faut d'abord déclarer une Table des Actions qui organise les chaînes de noms d'actions avec des pointeurs sur fonctions. La table est déclarée par XtAppAddActions(). On crée ensuite une table de translations stockée généralement dans le fichier de resources de l'application (on peut également la coder en ``dur'').
Le schéma suivant montre une table de translation et une table d'action, et indique comment chacune est utilisée lorsqu'un événement est reçu pour activer la fonction correspondante.
Key Event (Return key pressed) |
|
Translation Table | static char default Translations[]= " |
Action Table | static XtActionsRec actions[]={ {"Activate",Activate} }; |
Action Function | Activate(w,event,params,num_params) widget w; XEvent *events; String *params; Cardinal *num_params; { /* action code */ } |
Schéma type de la création de la table des actions :
main(...) { /* autres declarations */ ... static XtActionsRec actions[]={ {``RedrawSmallPicture'',RedrawSmallPicture}, } ... /* XtAppInitialize */ ... XtAppAddActions(app_context,actions,XtNumber(actions)); ... /* XtMainLoop */ }
Les actions ajoutées par XtAppAddActions sont globales au contexte de l'application, et donc utilisables par n'importe
quelle instance de widget de l'application.
Typiquement, une action est juste un pointeur sur une fonction à 4 arguments :