Correction de gravity2.c

/* la gravite change selon les lettres tapees */

#include <stdio.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>

GC      gc; 
Display *display; 
int     screen; 
Window  win, root; 
unsigned long white_pixel, black_pixel;  
XSetWindowAttributes attrib;
unsigned long mask_attrib;
int nbre;
char chaine[20];
KeySym touche;
 
main() { 
  if ((display = XOpenDisplay ("")) == NULL) { 
    fprintf (stderr, "Can't open Display\n"); 
    exit (1); 
  } 
  gc = DefaultGC (display, screen); 
  screen = DefaultScreen (display); 
  root = RootWindow (display, screen); 
  white_pixel = WhitePixel (display, screen); 
  black_pixel = BlackPixel (display, screen); 
  win = XCreateSimpleWindow (display, root,  
			     0, 0, 300, 300, 5, black_pixel, white_pixel); 
  XSelectInput (display, win, ExposureMask | ButtonPressMask | KeyPressMask ); 
  XStoreName (display, win, "gravity2"); 
  XMapWindow (display, win); 
 
  for (;;) { 
    XEvent ev; 
    XNextEvent (display, &ev); 
    switch (ev.type) { 
    case ButtonPress : 
      XDrawString (display, win, gc, ev.xbutton.x, ev.xbutton.y, "ici", 3);    
      break; 
    case KeyPress :
      nbre = XLookupString(&ev, chaine, 20, &touche, 0);
      chaine[nbre] = 0;
      if ((nbre == 1) && (chaine[0] == 'q'))
	exit(0);
      if (nbre == 1) {
      if (chaine[0] == 'n')
	attrib.bit_gravity = NorthGravity;
      if (chaine[0] == 'e')
	attrib.bit_gravity = EastGravity;
      if (chaine[0] == 's')
	attrib.bit_gravity = SouthGravity;
      if (chaine[0] == 'w')
	attrib.bit_gravity = WestGravity;
      mask_attrib = CWBitGravity;
      XChangeWindowAttributes(display, win, mask_attrib, &attrib); 
      }    
    default : 
      break;            
    } 
  } 
} 
 

chapitre de l'exercice index général fonctions de la XLib événements types dans XLib