C. Recanati
Option C avancé, avec X-Window
Licence 3, 2008

TPn°3 : Evénements

Exercice n° 1 (programme events.c, reprise de TP2)

Exercice 2 (programme expose.c, reprise de TP2)

Exercice 3 (programme keyPress.c)
Sélectionner sur une fenêtre les événements de type KeyPress. Pour chaque événement reçu, appeler XLookupString pour récupérer le code du caractère lu dans une chaîne ; imprimer par printf la chaîne récupérée si elle est non vide (cas d’un caractère imprimable), ou l’entier correspondant au code symbolique du caractère émis dans le cas contraire. Indiquer un message pour signaler que vous avez reconnu la frappe d’un caractère Return ou d’un Backspace.

Indications : il faut faire #include <X11/keysym.h>
pour inclure les codes symboliques des caractères et les utiliser dans le programme. Ces codes sont définis dans keysymdef.h (lui-même inclus par keysym.h). Visualiser le contenu de ce fichier pour voir la définition de ces codes et observer leur ordre d’apparition.

Exercice 4 (programme propagate.c)
Le but de l’exercice est d’observer la propagation des événements. Pour cela, créez une fenêtre contenant  3 sous-fenêtres w1, w2 et w3 que vous placerez les unes à côté des autres (sans les empiler). 
Sur la mère et sur w1, vous sélectionnerez le clic et les mouvements souris avec bouton enfoncé. Vous ne sélectionnerez pas d’événement sur w2 et w3 ; mais dans w3, vous empêcherez la propagation du clic et des mouvements souris. Imprimez pour chaque événement reçu le type de l’événement et  l’identificateur de la fenêtre ayant reçu l’événement et observez les résultats.

Exercice 5 (programme ascenseur.c)
On va créer un programme d’ascenseur. Pour cela, on crée d’abord une fenêtre qui servira de cage d’ascenseur (elle sera horizontale). Puis une sous-fenêtre carrée (côté identique à la hauteur de la mère) que l’on place dans l’ascenseur. Le fonctionnement du programme est le suivant : 
1)	Quand on clique dans la cage d’ascenseur, l’ascenseur vient se positionner (centré) sous la souris. Même chose, quand on clique sur l’ascenseur lui-même. (En fait ce comportement ne nécessite pas de distinguer deux cas pour la programmation).
2)	Quand on déplace la souris en maintenant le bouton enfoncé, l’ascenseur suit le mouvement et se déplace.
3)	L’ascenseur reste coincé dans sa mère, de sorte qu’il est toujours entièrement visible quand on se rapproche des bords. (C’est une exception au cas 1).
S’il vous reste du temps : programmez le changement de taille de l’ascenseur ou mettez des bords à l’ascenseur.
Indications : on captera les événements uniquement dans la mère (la cage d’ascenseur).