Xlib

Xlib on X Window Systemin ohjelmakirjasto C-kielelle. 
Xlib sisältää toiminnot, joita X Window Systemiä käyttävät asiakasohjelmat käyttävät liityntään ikkunointijärjestelmän kanssa.

Useimmat toiminnot Xlibissä vain lisäävät pyyntöjä puskuriin ja nämä suoritetaan asynkronisesti X-palvelimella.

Xlibissä on yksinkertaisia toimintoja, kuten ikkunalaatikon ja sen sisältämän grafiikan ja tekstin piirtäminen sekä hiiri- ja näppäimistösyötteen vastaanottaminen. Edelleen X:ää käyttävä sovellusohjelma päättää, miten se reagoi saamaansa syötteeseen.

Useimmat sovellusohjelmat eivät käytä suoraan Xlibiä, koska Xlibin tarjoamien toimintojen yksinkertaisuuden vuoksi sellaisen ohjelman tekeminen on turhan työlästä. Sen sijaan lähes aina käytetään muita kirjastoja, jotka yhdessä päässä käyttävät Xlibiä ja toisessa tarjoavat ohjelmoijalle monimutkaisempia toimintoja, kuten käyttäjälle näkyvien komentopainikkeiden, valikoiden ja erilaisten säätönappuloiden tapaisten käyttöliittymäkomponenttien luomisen. Tällaisia varsinaisia käyttöliittymäkirjastoja () ovat muun muassa:

 X Toolkit Intrinsics (Xt)
 Athena widget set (Xaw)
 Motif
 GTK+
 Qt (X11-versio)
 Tk

Esimerkkiohjelma 
Seuraava C-kielinen ohjelma tekee ikkunan, jossa on pieni musta neliö ja teksti "Hello, World!"

/* Simple Xlib application drawing a box in a window. */

#include <X11/Xlib.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
   Display *d;
   int s;
   Window w;
   XEvent e;

   /* open connection with the server */
   d=XOpenDisplay(NULL);
   if(d==NULL) {
     printf("Cannot open display\n");
     exit(1);
   }
   s=DefaultScreen(d);

   /* create window */
   w=XCreateSimpleWindow(d, RootWindow(d, s), 10, 10, 100, 100, 1,
                         BlackPixel(d, s), WhitePixel(d, s));

   /* select kind of events we are interested in */
   XSelectInput(d, w, ExposureMask | KeyPressMask);

   /* map (show) the window */
   XMapWindow(d, w);

   /* event loop */
   while(1) {
     XNextEvent(d, &e);
     /* draw or redraw the window */
     if(e.type==Expose) {
       XFillRectangle(d, w, DefaultGC(d, s), 20, 20, 10, 10);
       XDrawString(d, w, DefaultGC(d, s), 50, 50, "Hello, World!",strlen("Hello, World!"));
     }
     /* exit on key press */
     if(e.type==KeyPress)
       break;
   }

   /* close connection to server */
   XCloseDisplay(d);
   return 0;
}

Ikkunaa voi siirtää ja sen kokoa muuttaa. Tämä esimerkki on ohjelmoitu niin, että ohjelman saa lopetettua painamalla jotain näppäintä ohjelmaikkunan ollessa valittuna, mutta ei yrittämällä sulkea ikkuna. Käännettäessä tämä Xlibiä käyttävä ohjelma GCC-kääntäjällä tarvitaan linkitysparametri -lX11.

Lähteet

Aiheesta muualla 
 Xlib - C Language X Interface 
 Unix-tyyppiset man-ohjesivut kaikille Xlibin toimintokutsuille
 Kenton Leen X Window- ja Motif-sivut 
 Lyhyt Xlib-tutoriaali
 Yksinkertainen kirjasto Xlibin käytön opetteluun

X Window System
Käyttöliittymäkirjastot