Coller

Mécanisme de communication entre applications

/* coller.c */
/* mecanisme couper-coller : coller */

#include <stdio.h>
#include <X11/Xlib.h>
GC      gc; 
Display *display; 
int     screen; 
Window  win, root; 
unsigned long white_pixel, black_pixel; 
int nbre;
char* buf;
 
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, 90, 2, black_pixel, white_pixel); 
  XSelectInput (display, win, ExposureMask | ButtonPressMask); 
  XStoreName (display, win, "coller"); 
  XMapWindow (display, win); 
  
  for (;;) { 
    XEvent ev; 
    XNextEvent (display, &ev); 
    switch (ev.type) { 
    case Expose :
      XDrawString (display, win, gc, 10, 30, "cliquez pour coller", 19); 
      break; 
    case ButtonPress :   
      XClearWindow(display, win);
      XDrawString (display, win, gc, 10, 30, "cliquez pour coller", 19); 
      buf = XFetchBytes (display, &nbre);
      if (buf) {
	XClearWindow(display, win);
	XDrawString (display, win, gc, ev.xbutton.x, ev.xbutton.y, buf, nbre); 
	XFree (buf);
      } else {
	XClearWindow(display, win);
	XDrawString (display, win, gc, 10, 30, "rien !", 6); 
      }
    } 
  } 
} 

 

Fonctionnement de ce programme :

XFetchBytes récupère les caractères du "presse-papier", c'est à dire de la propriété XA_CUT_BUFFER0 de la fenêtre racine.

 

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