Fenêtre Input Only

/* input.c */
/* fenetre InputOnly */

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

GC      gc; 
Display *display; 
int     screen; 
Window  win, subwin, root; 
unsigned long white_pixel, black_pixel;  
XSetWindowAttributes xwsa;
Cursor curs0;
 
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); 
  XStoreName (display, win, "Input"); 
  XMapWindow (display, win); 
  xwsa.event_mask=ButtonPressMask;
  subwin = XCreateWindow (display, win, 10, 10, 10, 10, 0, CopyFromParent, 
			  InputOnly, CopyFromParent, CWEventMask, &xwsa); 
  /* fenetre non dessinee mais qui definit et delimite des zones sensibles */
  /* aux evenements */
  curs0 = XCreateFontCursor(display, XC_crosshair);
  XDefineCursor(display, subwin, curs0);
  XMapWindow (display, subwin); 
 
  for (;;) { 
    XEvent ev; 
    XNextEvent (display, &ev); 
    switch (ev.type) { 
    case Expose : 
      break; 
    case ButtonPress  : 
     if (ev.xbutton.window == subwin)
       write(1, "la sous fenetre sent le clic", 28);
      break; 
    default : 
      break;            
    } 
  } 
}


Exécution :

Cliquez au milieu de la fenêtre puis dans le coin gauche : regardez les messages affichés dans stdout.

Fonctionnement de ce programme :

La fenêtre InputOnly n'a pas d'attributs d'affichage.
Elle sert de zone sensible aux entrées de la souris ou du clavier.
Elle posséde donc un masque d'événement modifiable ainsi que d'un curseur.

 

programme suivant compléments index général fonctions de la XLib événements types dans XLib