%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%      2. fejezet
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\clearpage
\section{Az X Win\-dow System}
\label{xws}

Az X Win\-dows fej\-lesz\-t\H o\-i\-nek sz\'a\-mos k\"o\-ve\-tel\-m\'enyt kel\-lett ki\-e\-l\'e\-g\'\i{}\-te\-ni\-\"uk a
fej\-lesz\-t\'es so\-r\'an. Ezek k\"o\-z\"ul a fon\-to\-sab\-bak:
\begin{itemize}
 \item A rend\-szer bit\-t\'er\-k\'e\-pes ki\-jel\-z\H ok\-re k\'e\-sz\"ul\-j\"on.
 \item T\'a\-mo\-gas\-sa gra\-fi\-ka hasz\-n\'a\-la\-t\'at.
 \item A k\'e\-per\-ny\H on a prog\-ram in\-put\-ja \'es out\-put\-ja sz\'a\-m\'a\-ra k\"o\-z\"os te\-r\"u\-le\-tek
le\-gye\-nek: az ab\-la\-kok.
 \item A fel\-hasz\-n\'a\-l\'oi fe\-l\"ul\-et egy \'un. {\em po\-in\-ter de\-vi\-ce\/}on (mu\-ta\-t\'o esz\-k\"o\-z\"on)
ala\-pul\-jon\footnote{A gya\-kor\-lat\-ban ez az esz\-k\"oz majd\-nem min\-dig egy eg\'er.}.  
\item A {\em po\-in\-ter de\-vi\-ce} ve\-z\'e\-rel\-je a bil\-len\-ty\H u\-zet in\-put ab\-la\-kok\-hoz va\-l\'o
hoz\-z\'a\-ren\-de\-l\'e\-s\'et is.
 \item T\"obb prog\-ram le\-gyen k\'e\-pes egyi\-de\-j\H u\-leg ugya\-nar\-ra a ki\-jel\-z\H o\-re dol\-goz\-ni. 
\item A rend\-szer h\'a\-l\'o\-za\-ti pro\-to\-kol\-lon ala\-pul\-jon.
 \item A pro\-to\-koll imp\-le\-men\-t\'al\-ha\-t\'o le\-gyen k\"u\-l\"on\-b\"o\-z\H o sz\'a\-m\'\i{}\-t\'o\-g\'ep ar\-chi\-tek\-t\'u\-r\'ak
\'es ope\-r\'a\-ci\-\'os rend\-sze\-rek\-re: le\-gyen esz\-k\"oz\-f\"ug\-get\-len.
 \item Le\-gyen le\-he\-t\H o\-s\'eg egy prog\-ra\-mot egyik g\'e\-pen fut\-tat\-ni, mi\-k\"oz\-ben egy m\'a\-sik
g\'ep ki\-jel\-z\H o\-j\'et hasz\-n\'al\-ja.
\end{itemize}

Ezen k\"o\-ve\-tel\-m\'e\-nyek ki\-e\-l\'e\-g\'\i{}\-t\'e\-se tet\-te az X-et olyan n\'ep\-sze\-r\H u\-v\'e, hogy m\'a\-ra
majd\-nem min\-den mun\-ka\-\'al\-lo\-m\'as gy\'ar\-t\'o szab\-v\'any\-k\'ent ke\-ze\-li az ab\-lak\-ke\-ze\-l\H o
rend\-sze\-rek k\"ozt. Az alap\-kon\-cep\-ci\-\'ok\-r\'ol sz\'ol a \ref{xws:konc} al\-fe\-je\-zet.

Az X egy t\"obb\-r\'e\-te\-g\H u struk\-t\'u\-ra sze\-rint \'ep\"ul fel. Ez l\'at\-ha\-t\'o az \ref{fig:xlayers}.
\'ab\-r\'an. Az X egyes r\'e\-te\-gei adott szin\-t\H u prog\-ra\-mo\-z\'oi in\-ter\-fa\-ce-t de\-fi\-ni\-\'al\-nak, de
nem tesz\-nek meg\-k\"o\-t\'e\-se\-ket a r\'e\-te\-get meg\-va\-l\'o\-s\'\i{}\-t\'o k\'od\-ra. Az X pro\-to\-koll\-r\'ol a
\ref{xws:konc:prot}, az X szer\-ver\-r\H ol pe\-dig a \ref{xws:konc:szerv} al\-fe\-je\-zet\-ben
lesz sz\'o.

A le\-gal\-s\'o r\'e\-teg, az Xlib egy C nyel\-v\H u prog\-ra\-mo\-z\'oi fe\-l\"ul\-e\-tet biz\-to\-s\'\i{}t az X mag\-j\'at
k\'e\-pe\-z\H o h\'a\-l\'o\-za\-ti pro\-to\-koll\-hoz\footnote{Az X pro\-to\-koll\-hoz t\"obb nyel\-ven is
l\'e\-te\-zik prog\-ra\-mo\-z\'oi in\-ter\-fa\-ce. Ezek k\"o\-z\"ul a le\-gel\-ter\-jed\-tebb az Xlib, mi\-vel a C
sz\'e\-les k\"or\-ben hoz\-z\'a\-f\'er\-he\-t\H o.}. Ez a r\'e\-teg ala\-csony\-szin\-t\H u X prog\-ra\-mo\-z\'a\-si
le\-he\-t\H o\-s\'e\-ge\-ket biz\-to\-s\'\i{}t. Az Xlib r\'e\-teg az X rend\-szer\-ben ex\-klu\-z\'\i{}v szab\-v\'any. Ez
azt je\-len\-ti, hogy aki X imp\-le\-men\-t\'a\-ci\-\'ot k\'e\-sz\'\i{}t, az k\"o\-te\-les biz\-to\-s\'\i{}\-ta\-ni az Xlib
r\'e\-te\-get, \'es he\-lyet\-te nem biz\-to\-s\'\i{}t\-hat m\'as C nyel\-v\H u in\-ter\-fa\-ce-t az X
pro\-to\-koll\-hoz. Er\-r\H ol a r\'e\-teg\-r\H ol lesz sz\'o a \ref{xws:xlib} al\-fe\-je\-zet\-ben.

Az Xlib ru\-ti\-nok\-ra \'ep\"ul\-ve ma\-ga\-sabb szin\-t\H u prog\-ra\-mo\-z\'oi fe\-l\"ul\-e\-te\-ket ta\-l\'a\-lunk, az
\'un. {\bf to\-ol\-kit\/}eket. Ezek olyan r\'e\-te\-gek, ame\-lyek egy bi\-zo\-nyos {\bf User
In\-ter\-fa\-ce}\footnote{Fel\-hasz\-n\'a\-l\'oi fe\-l\"ul\-et.} (UI) st\'\i{}\-lus meg\-va\-l\'o\-s\'\i{}\-t\'a\-s\'a\-ra
k\'e\-sz\"ul\-tek. A {\em to\-ol\-kit\/}ek biz\-to\-s\'\i{}\-ta\-nak a prog\-ra\-mo\-z\'o\-nak el\H o\-re\-gy\'ar\-tott UI
\'ep\'\i{}\-t\H o\-e\-le\-me\-ket \'es va\-la\-mi\-lyen f\"ugg\-v\'eny\-cso\-ma\-got, ami\-nek se\-g\'\i{}t\-s\'e\-g\'e\-vel az
\'ep\'\i{}\-t\H o\-e\-le\-mek\-b\H ol egy tel\-jes UI \'ep\'\i{}t\-he\-t\H o ob\-jek\-tum ori\-en\-t\'alt prog\-ra\-mo\-z\'a\-si
tech\-ni\-k\'ak hasz\-n\'a\-la\-t\'a\-val. Egy \'ep\'\i{}\-t\H o\-e\-le\-met h\'\i{}v\-nak {\bf wid\-get}nek.

\begin{figure}
\begin{center}
\begin{picture}(90,90)
\put(20,0){\framebox(50,10){X Szer\-ver}}
\put(45,10){\line(1,1){5}}
\put(45,10){\line(-1,1){5}}
\put(42,13){\line(0,1){7}}
\put(48,13){\line(0,1){7}}
\put(20,20){\framebox(50,10){X Pro\-to\-koll}}
\put(45,30){\line(1,1){5}}
\put(45,30){\line(-1,1){5}}
\put(42,33){\line(0,1){7}}
\put(48,33){\line(0,1){7}}
\put(0,40){\framebox(90,50){}}
\put(0,40){\framebox(90,40){}}
\put(0,40){\makebox(90,10){Xlib}}
\put(0,50){\framebox(40,30){}}
\put(0,50){\makebox(40,10){Xt Int\-rin\-sics}}
\put(0,60){\framebox(30,20){Wid\-get Set}}
\put(50,50){\framebox(40,30){}}
\put(50,65){\makebox(40,10){XVi\-ew To\-ol\-kit}}
\put(50,55){\makebox(40,10){(AT\&T \'es Sun)}}
\put(0,80){\makebox(90,10){X Al\-kal\-ma\-z\'as}}
\end{picture}
\caption{Az X Win\-dows fel\-\'e\-p\'\i{}\-t\'e\-se}
\label{fig:xlayers}
\end{center}
\end{figure}

A {\em to\-ol\-kit\/}ek k\"o\-z\"ott van egy ki\-e\-mel\-ke\-d\H o fon\-tos\-s\'a\-g\'u, az {\bf Xt To\-ol\-kit}.
Ez k\'et r\'esz\-b\H ol \'all, az {\bf Xt Int\-rin\-sics}-b\H ol \'es egy tet\-sz\H o\-le\-ges {\bf wid\-get
set}b\H ol (\'ep\'\i{}\-t\H o\-e\-lem k\'esz\-let). E k\'et r\'esz k\"o\-z\"ul az el\-s\H o, az Xt Int\-rin\-sics az X
rend\-szer\-ben nem-ex\-klu\-z\'\i{}v szab\-v\'any, azaz aki X imp\-le\-men\-t\'a\-ci\-\'ot k\'e\-sz\'\i{}t, az
k\"o\-te\-les el\-k\'e\-sz\'\i{}\-te\-ni ezt a prog\-ra\-mo\-z\'oi fe\-l\"ul\-e\-tet is, de emel\-lett biz\-to\-s\'\i{}t\-hat m\'as
{\em to\-ol\-kit\/}et is. A m\'a\-so\-dik \"o\discretionary{sz-}{sz}{ssz}e\-te\-v\H o, a wid\-get set az al\-kal\-ma\-zott UI
st\'\i{}\-lus\-t\'ol f\"ug\-g\H o\-en v\'al\-toz\-hat. Az Xt To\-ol\-kit\-r\H ol a \ref{xws:xt} al\-fe\-je\-zet\-ben lesz
sz\'o.

Egy m\'a\-sik {\em to\-ol\-kit} az XVi\-ew. Ez funk\-ci\-o\-n\'a\-li\-san az Xt Int\-rin\-sics \'es az
OPEN\-LO\-OK UI st\'\i{}\-lust meg\-va\-l\'o\-s\'\i{}\-t\'o wid\-get set meg\-fe\-le\-l\H o\-je, az \'al\-ta\-la biz\-to\-s\'\i{}\-tott
prog\-ra\-mo\-z\'oi fe\-l\"ul\-et azon\-ban el\-t\'er az Xt Int\-rin\-sics fe\-l\"ul\-e\-t\'e\-t\H ol. Er\-r\H ol a r\'e\-teg\-r\H ol
r\"o\-vid \'at\-te\-kin\-t\'est ny\'ujt a \ref{xws:xview} al\-fe\-je\-zet. 

Az X prog\-ra\-mok \'ep\"ul\-het\-nek csu\-p\'an az Xlib-re, vagy hasz\-n\'al\-hat\-j\'ak va\-la\-me\-lyik
{\em to\-ol\-kit\/}et is. Az Xlib m\H u\-k\"o\-d\'e\-s\'e\-nek meg\-\'er\-t\'e\-se a m\'a\-so\-dik eset\-ben is
hasz\-nos, mi\-vel a {\em to\-ol\-kit\/}ek is az Xlib-en ala\-pul\-nak. A {\em to\-ol\-kit\/}ek
hasz\-n\'a\-la\-ta min\-den\-k\'ep\-pen aj\'an\-lott, mi\-vel je\-len\-t\H o\-sen meg\-k\"o\discretionary{ny-}{ny}{nny}\'\i{}\-ti a
prog\-ra\-mo\-z\'ast. Ezek\-ben be\-\'e\-p\'\i{}t\-ve ta\-l\'al\-ha\-t\'o a k\'od, ami a {\em Win\-dow
Ma\-na\-ger\/}rel\footnote{L\'asd \ref{xws:konc:ablak} fe\-je\-zet.} va\-l\'o kom\-mu\-ni\-k\'a\-ci\-\'ot
el\-v\'eg\-zi, \'es ez\-zel ren\-ge\-teg f\'a\-rad\-s\'a\-got ta\-ka\-r\'\i{}\-ta\-nak meg a prog\-ra\-mo\-z\'o\-nak. A {\em
to\-ol\-kit\/}ek hasz\-n\'a\-la\-t\'a\-nak h\'at\-r\'a\-nya, hogy a fut\-tat\-ha\-t\'o prog\-ram\-k\'od na\-gyobb
ter\-je\-del\-m\H u lesz, mint egy ugya\-no\-lyan funk\-ci\-\'o\-kat meg\-va\-l\'o\-s\'\i{}\-t\'o, Xlib szin\-ten
meg\-\'\i{}rt prog\-ram k\'od\-ja. Ez a k\"u\-l\"onb\-s\'eg azon\-ban nem t\'ul nagy prog\-ra\-mok\-n\'al
el\-ha\-nya\-gol\-ha\-t\'o. (Nagy prog\-ra\-mo\-kat pe\-dig csak je\-len\-t\H os t\"obb\-let mun\-k\'a\-val
le\-het\-ne Xlib szin\-ten meg\-\'\i{}r\-ni.) 

Egy m\'a\-sik h\'at\-r\'a\-nya a {\em to\-ol\-kit} szin\-t\H u prog\-ra\-mo\-z\'as\-nak, hogy be kell tar\-ta\-ni
bi\-zo\-nyos ob\-jek\-tum ori\-en\-t\'alt prog\-ra\-mo\-z\'a\-si (OOP) kon\-ven\-ci\-\'o\-kat egy nem OOP
nyelv\-ben. En\-nek meg\-ta\-nu\-l\'a\-sa id\H o\-be tel\-het. A {\em to\-ol\-kit\/}ek hasz\-n\'a\-la\-t\'a\-nak
egy to\-v\'ab\-bi h\'at\-r\'a\-ny\'a\-r\'ol a \ref{xws:xt} al\-fe\-je\-zet\-ben \'\i{}runk.

 \subsection{X kon\-cep\-ci\-\'ok}
 \label{xws:konc}

Az X Win\-dows ter\-ve\-z\'e\-se\-kor ren\-ge\-teg szem\-pon\-tot kel\-lett fi\-gye\-lem\-be ven\-ni. Ezek
k\"o\-z\"ul a leg\-fon\-to\-sab\-bak:

\begin{enumerate}
 \item \label{en:hw} Az X-et bit\-t\'er\-k\'e\-pes ter\-mi\-n\'a\-lok\-hoz ter\-vez\-t\'ek. Ar\-ra
t\"o\-re\-ked\-tek, hogy az X hasz\-n\'a\-la\-ta biz\-to\-s\'\i{}t\-sa a prog\-ra\-mok tel\-jes f\"ug\-get\-len\-s\'e\-g\'et
a gra\-fi\-kus k\"or\-nye\-zet\-t\H ol \'es az ope\-r\'a\-ci\-\'os rend\-szer\-t\H ol.

 \item \label{en:halo} Fon\-tos ter\-ve\-z\'e\-si szem\-pont volt az is, hogy az X le\-he\-t\H o\-v\'e
te\-gye k\"u\-l\"on\-b\"o\-z\H o t\'\i{}\-pu\-s\'u g\'e\-pek azo\-nos h\'a\-l\'o\-za\-ton t\"or\-t\'e\-n\H o egy\"utt\-m\H u\-k\"o\-d\'e\-s\'et. Er\-re
a c\'el\-ra al\-kot\-t\'ak meg a h\'a\-l\'o\-za\-ti pro\-to\-kollt, ami k\'e\-pes az ab\-lak\-ke\-ze\-l\H o rend\-szert
ve\-z\'e\-rel\-ni.

 \item \label{en:ui} Az X fej\-lesz\-t\H oi nem akar\-t\'ak a l\'et\-re\-ho\-zan\-d\'o rend\-szert
egy\-f\'e\-le UI st\'\i{}\-lus\-hoz k\"ot\-ni. Ehe\-lyett olyan prog\-ra\-mo\-z\'oi fe\-l\"ul\-et ki\-a\-la\-k\'\i{}\-t\'a\-s\'a\-ra
t\"o\-re\-ked\-tek, ami\-vel tet\-sz\H o\-le\-ges fel\-hasz\-n\'a\-l\'oi fe\-l\"ul\-et meg\-va\-l\'o\-s\'\i{}t\-ha\-t\'o.
\end{enumerate}

A hor\-doz\-ha\-t\'o\-s\'ag\-nak az X-ben k\'et\-f\'e\-le \'er\-tel\-me\-z\'e\-se le\-het. Az egyik a
for\-r\'asp\-rog\-ram hor\-doz\-ha\-t\'o\-s\'a\-ga, amit \ref{en:hw} \'es bi\-zo\-nyos m\'er\-t\'e\-kig
\ref{en:ui} bi\-to\-s\'\i{}t. A hor\-doz\-ha\-t\'o\-s\'ag m\'a\-sik je\-len\-t\'e\-se a h\'a\-l\'o\-zat \'at\-l\'at\-sz\'o\-s\'a\-ga,
ami \ref{en:halo}-b\H ol k\"o\-vet\-ke\-zik.

A k\"o\-vet\-ke\-z\H o n\'e\-h\'any al\-fe\-je\-zet\-ben az X alap\-kon\-cep\-ci\-\'ok\-r\'ol lesz sz\'o.

  \subsubsection{Az X pro\-to\-koll}
  \label{xws:konc:prot}

Az X Win\-dows mag\-ja, az X pro\-to\-koll te\-szi le\-he\-t\H o\-v\'e, hogy az X h\'a\-l\'o\-za\-to\-kon is
tud\-jon fut\-ni. Ez ha\-t\'a\-roz\-za meg, hogy mi\-lyen r\'e\-szek\-b\H ol \'ep\"ul fel a
szer\-ver\footnote{L\'asd \ref{xws:konc:szerv} fe\-je\-zet.} \'es az Xlib k\"ozt \'at\-vitt
in\-for\-m\'a\-ci\-\'o\-cso\-mag. A pro\-to\-kollt az X ak\-kor is hasz\-n\'al\-ja, ha a szer\-ver \'es az Xlib
ugya\-na\-zon a g\'e\-pen fut.

A pro\-to\-koll n\'egy\-f\'e\-le cso\-mag\-t\'\i{}\-pust k\"u\-l\"on\-b\"oz\-tet meg:

\begin{itemize}
 \item K\'e\-re\-lem ({\em re\-qu\-est}): Az Xlib k\"ul\-di a szer\-ver\-nek. Na\-gyon sok\-f\'e\-le
in\-for\-m\'a\-ci\-\'ot tar\-tal\-maz\-hat, pl. egy ab\-lak \'at\-m\'e\-re\-te\-z\'e\-s\'et, egy egye\-nes
raj\-zo\-l\'a\-s\'a\-nak ada\-ta\-it, stb. A leg\-t\"obb Xlib f\"ugg\-v\'eny\-h\'\i{}\-v\'as pro\-to\-koll k\'e\-rel\-met
ered\-m\'e\-nyez.

 \item V\'a\-lasz ({\em reply}): A szer\-ver k\"ul\-di az Xlib-nek bi\-zo\-nyos k\'e\-rel\-me\-ket
k\"o\-ve\-t\H o\-en. Az al\-kal\-ma\-z\'a\-sok\-ban le\-he\-t\H o\-leg mi\-ni\-ma\-li\-z\'al\-ni kell az olyan k\'e\-rel\-mek
sz\'a\-m\'at, amik v\'a\-lasz\-ra v\'ar\-nak, mert ez er\H o\-sen cs\"ok\-kent\-he\-ti a prog\-ram
ha\-t\'as\-fo\-k\'at.

 \item Ese\-m\'eny ({\em event}): A szer\-ver k\"ul\-di az Xlib-nek, in\-for\-m\'a\-ci\-\'ot tar\-tal\-maz
va\-la\-mi\-lyen esz\-k\"oz\-r\H ol, vagy va\-la\-mi\-lyen meg\-e\-l\H o\-z\H o k\'e\-re\-lem mel\-l\'ek\-ha\-t\'a\-s\'a\-r\'ol. Az
Xlib-n\'el az ese\-m\'e\-nyek egy pu\discretionary{f-}{f}{ff}er\-ben gy\H ul\-nek fel, ar\-ra v\'ar\-va, hogy a prog\-ram
ki\-ol\-vas\-sa \H oket.

 \item Hi\-ba ({\em er\-ror}): A szer\-ver jel\-zi az al\-kal\-ma\-z\'as\-nak, hogy va\-la\-me\-lyik
meg\-e\-l\H o\-z\H o k\'e\-re\-lem hi\-b\'as volt. Ezek az \"uze\-ne\-tek az ese\-m\'e\-nyek\-hez ha\-son\-l\'o\-an
le\-ke\-zel\-he\-t\H ok. Ha a prog\-ram nem t\"o\-r\H o\-dik ve\-l\"uk, ak\-kor a be\-\'e\-p\'\i{}\-tett hi\-ba\-ke\-ze\-l\H o ki\-\'\i{}r
egy hi\-ba\-\"u\-ze\-ne\-tet, \'es a prog\-ram fu\-t\'a\-sa be\-fe\-je\-z\H o\-dik.
\end{itemize}

A h\'a\-l\'o\-za\-ton va\-l\'o fut\-tat\-ha\-t\'o\-s\'ag \'al\-tal biz\-to\-s\'\i{}\-tott el\H o\-ny\"ok mel\-lett a h\'a\-l\'o\-za\-ti
pro\-to\-koll hasz\-n\'a\-la\-t\'a\-nak h\'at\-r\'a\-nyai is le\-het\-nek. Egyik ezek k\"o\-z\"ul, hogy a prog\-ram
ve\-sz\'\i{}t\-het a se\-bes\-s\'e\-g\'e\-b\H ol a gya\-ko\-ri h\'a\-l\'o\-za\-ti adat\-for\-ga\-lom mi\-att. Ezen a
prob\-l\'e\-m\'an az X ter\-ve\-z\H oi \'ugy pr\'o\-b\'al\-tak se\-g\'\i{}\-te\-ni, hogy be\-ve\-zet\-t\'ek a k\'e\-rel\-mek
pu\discretionary{f-}{f}{ff}e\-re\-l\'e\-s\'et. Az Xlib a k\'e\-rel\-me\-ket cso\-kor\-ba gy\H uj\-ti \'es egy\"utt k\"ul\-di el a
szer\-ver\-nek. \'Igy a h\'a\-l\'o\-zat ki\-hasz\-n\'alt\-s\'a\-g\'a\-nak ha\-t\'as\-fo\-ka n\H o\-het. Az Xlib a
cso\-kor\-ba gy\H uj\-t\"ott k\'e\-rel\-me\-ket h\'a\-rom eset\-ben k\"ul\-di el a szer\-ver\-nek:

\begin{itemize}
 \item Ha a prog\-ram egy olyan ese\-m\'eny\-re v\'ar, ami\-lyen nincs az Xlib
ese\-m\'eny\-pu\discretionary{f-}{f}{ff}e\-r\'e\-ben.

 \item Ha olyan Xlib h\'\i{}\-v\'as t\"or\-t\'e\-nik, ami v\'a\-lasz\-ra v\'ar.

 \item N\'e\-ha a prog\-ram ma\-ga akar\-ja el\-k\"ul\-de\-ni a k\'e\-rel\-me\-ket, ha nem v\'ar\-ha\-t\'o
ese\-m\'eny vagy adat\-k\'e\-re\-lem. Ilyen\-kor az {\tt XFlush}, vagy az {\tt XSync}
f\"ugg\-v\'e\-nyek hasz\-n\'al\-ha\-t\'ok. Ez az eset a gya\-kor\-lat\-ban rit\-k\'an hasz\-n\'alt. Egyik
je\-len\-t\H os al\-kal\-ma\-z\'a\-sa le\-het, ami\-kor nyom\-k\"o\-ve\-t\'es ({\em de\-bug\-ging}) so\-r\'an a
pu\discretionary{f-}{f}{ff}e\-re\-l\'es za\-va\-r\'o ha\-t\'a\-s\'at akar\-ja a prog\-ra\-mo\-z\'o meg\-sz\"un\-tet\-ni.
\end{itemize}

  \subsubsection{Er\H o\-for\-r\'a\-sok}
  \label{xws:konc:ero}

Az X sz\'a\-mos m\'od\-szer\-rel cs\"ok\-ken\-ti a h\'a\-l\'o\-zat ter\-he\-l\'e\-s\'et. Ezek egyi\-ke volt az
el\H obb l\'a\-tott pu\discretionary{f-}{f}{ff}e\-re\-l\'es. Egy m\'a\-sik m\'od\-szer, hogy a komp\-lex adatst\-ruk\-t\'u\-r\'a\-kat
(ab\-la\-ko\-kat, be\-t\H u\-k\'esz\-le\-te\-ket, stb.) a szer\-ver ke\-ze\-li, \'es a prog\-ram csak
azo\-no\-s\'\i{}\-t\'ok\-kal hi\-vat\-ko\-zik r\'a\-juk. Ez\'al\-tal va\-la\-h\'any\-szor a prog\-ram va\-la\-mi\-lyen
m\H u\-ve\-le\-tet v\'e\-gez egy ob\-jek\-tu\-mon, a h\'a\-l\'o\-za\-ton egy komp\-lex adatst\-ruk\-t\'u\-ra
he\-lyett csak egy azo\-no\-s\'\i{}\-t\'o megy \'at. Eze\-ket az adatst\-ruk\-t\'u\-r\'a\-kat h\'\i{}v\-j\'ak
er\H o\-for\-r\'as\-nak. 

H\'at\-r\'a\-nya vi\-szont en\-nek a meg\-ol\-d\'as\-nak, hogy ha a prog\-ram az er\H o\-for\-r\'as\-r\'ol
in\-for\-m\'a\-ci\-\'ot k\'er, ak\-kor azt a h\'a\-l\'o\-za\-ton kell \'at\-k\"ul\-de\-ni, nem le\-het he\-lyi
adatst\-ruk\-t\'u\-r\'a\-b\'ol meg\-sze\-rez\-ni.

Va\-l\'o\-j\'a\-ban az X ter\-mi\-no\-l\'o\-gia egy m\'a\-sik dol\-got is er\H o\-for\-r\'as\-nak ne\-vez, az
al\-kal\-ma\-z\'as \'al\-tal l\'et\-re\-ho\-zott ab\-lak jel\-lem\-z\H o\-it. Sze\-ren\-cs\'e\-re ez a k\'et fo\-ga\-lom
\'al\-ta\-l\'a\-ban az X tel\-je\-sen el\-t\'e\-r\H o r\'e\-sze\-i\-n\'el me\-r\"ul fel, \'\i{}gy ne\-h\'ez \"o\discretionary{sz-}{sz}{ssz}e\-ke\-ver\-ni \H oket.

  \subsubsection{A szer\-ver--kli\-ens mo\-dell}
  \label{xws:konc:szerv}

Az X sz\'o\-hasz\-n\'a\-la\-t\'a\-ban k\"u\-l\"onb\-s\'eg van a {\em disp\-lay} \'es a {\em scre\-en} sza\-vak
k\"ozt. A sz\'a\-m\'\i{}\-t\'o\-g\'e\-pes nyelv\-ben \'al\-ta\-l\'a\-ban mind\-k\'et sz\'o a k\'e\-per\-ny\H o\-re utal, az
X-ben vi\-szont csak a {\em scre\-en} sz\'o hor\-doz\-za ezt a je\-len\-t\'est. A {\em disp\-lay}
X-es je\-len\-t\'e\-s\'et \'en in\-k\'abb ki\-jel\-z\H o\-nek for\-d\'\i{}t\-hat\-n\'ank, ami alatt egy bil\-len\-ty\H u\-zet\-b\H ol,
eg\'er\-b\H ol \'es egy vagy t\"obb k\'e\-per\-ny\H o\-b\H ol ({\em scre\-en\/}b\H ol) \'al\-l\'o mun\-ka\-\'al\-lo\-m\'ast
kell \'er\-te\-ni. T\"obb k\'ep\-er\-ny\H o ({\em scre\-en}) min\-dad\-dig egyet\-len ki\-jel\-z\H ot ({\em
disp\-lay\/}-t) al\-kot, am\'\i{}g egy fel\-hasz\-n\'a\-l\'o egy bil\-len\-ty\H u\-zet\-tel \'es eg\'er\-rel
hasz\-n\'al\-ja \H oket.

Az X h\'a\-l\'o\-za\-ton ala\-pu\-l\'o ab\-lak\-ke\-ze\-l\H o rend\-szer: egy prog\-ram nem kell, hogy
ugya\-na\-zon a g\'e\-pen fus\-son, mint ame\-lyik g\'ep ki\-jel\-z\H o\-j\'et hasz\-n\'al\-ja. A ki\-jel\-z\H ot
fel\-\"u\-gye\-l\H o prog\-ra\-mot h\'\i{}v\-j\'ak szer\-ver\-nek, ez a prog\-ram v\'a\-laszt\-ja el az
esz\-k\"oz\-f\"ug\-g\H o k\'o\-dot a fel\-hasz\-n\'a\-l\'oi prog\-ram\-t\'ol (kli\-ens vagy al\-kal\-ma\-z\'as). A
h\'a\-l\'o\-za\-to\-kat is\-me\-r\H ok fur\-cs\'a\-nak ta\-l\'al\-hat\-j\'ak, hogy egy lo\-k\'a\-lis g\'e\-pen fu\-t\'o
prog\-ra\-mot szer\-ver\-nek h\'\i{}v\-hat\-nak, de ha fi\-gye\-lem\-be ve\discretionary{sz-}{sz}{ssz}\"uk, hogy a lo\-k\'a\-lis g\'ep
ki\-jel\-z\H o\-je is egy olyan er\H o\-for\-r\'as, ami b\'ar\-mely m\'as g\'ep sz\'a\-m\'a\-ra el\-\'er\-he\-t\H o, ak\-kor
\'ert\-he\-t\H o\-v\'e v\'a\-lik az ana\-l\'o\-gia a m\'ar is\-mert fi\-le-, list-, ma\-il-, \'es
prin\-ter\-szer\-ve\-rek\-kel. A szer\-ver \'es a kli\-ens kap\-cso\-la\-t\'at mu\-tat\-ja a
\ref{fig:server}. \'ab\-ra.

\begin{figure}
\begin{center}
\begin{picture}(100,75)
\put(0,20){\framebox(30,10){Xlib}}
\put(0,30){\framebox(30,10){X To\-ol\-kit}}
\put(0,40){\framebox(30,10){X App\-li\-ca\-ti\-on}}
\put(35,20){\framebox(30,10){X11 Ser\-ver}}
\put(35,30){\framebox(30,10){De\-vi\-ce dri\-vers}}
\put(10,60){\framebox(20,15){Scre\-en}}
\put(40,60){\framebox(20,15){Mo\-u\-se}}
\put(70,60){\framebox(20,15){Key\-bo\-ard}}
\put(50,40){\line(0,1){20}}
\put(40,40){\line(0,1){15}}
\put(40,55){\line(-1,0){20}}
\put(20,55){\line(0,1){5}}
\put(60,40){\line(0,1){15}}
\put(60,55){\line(1,0){20}}
\put(80,55){\line(0,1){5}}
\put(70,20){\framebox(30,10){Win\-dow Ma\-na\-ger}}
\put(12,20){\line(0,-1){10}}
\put(18,20){\line(0,-1){10}}
\put(47,20){\line(0,-1){10}}
\put(53,20){\line(0,-1){10}}
\put(82,20){\line(0,-1){10}}
\put(88,20){\line(0,-1){10}}
\put(5,10){\line(1,0){7}}
\put(18,10){\line(1,0){29}}
\put(53,10){\line(1,0){29}}
\put(88,10){\line(1,0){7}}
\put(5,4){\line(1,0){90}}
\put(2,7){\line(1,1){5}}
\put(2,7){\line(1,-1){5}}
\put(98,7){\line(-1,1){5}}
\put(98,7){\line(-1,-1){5}}
\end{picture}
\caption{A szer\-ver--kli\-ens mo\-dell}
\label{fig:server}
\end{center}
\end{figure}

A szer\-ver a k\"oz\-ve\-t\'\i{}\-t\H o a fel\-hasz\-n\'a\-l\'oi prog\-ra\-mok, \'es a lo\-k\'a\-lis g\'ep er\H o\-for\-r\'a\-sai
k\"o\-z\"ott. A szer\-ver a k\"o\-vet\-ke\-z\H o fe\-la\-da\-to\-kat l\'at\-ja el:

\begin{itemize}
 \item Le\-he\-t\H o\-v\'e te\-szi t\"obb prog\-ram sz\'a\-m\'a\-ra egy ki\-jel\-z\H o hasz\-n\'a\-la\-t\'at.

 \item \'Er\-te\-le\-me\-zi a h\'a\-l\'o\-za\-ti \"uze\-ne\-te\-ket a kli\-en\-sek sz\'a\-m\'a\-ra.

 \item A fel\-hasz\-n\'a\-l\'o\-t\'ol \'er\-ke\-z\H o in\-pu\-tot a h\'a\-l\'o\-za\-ton \'at to\-v\'ab\-b\'\i{}t\-ja a kli\-en\-sek\-nek.

 \item K\'et di\-men\-zi\-\'os raj\-zo\-l\'ast v\'e\-gez.

 \item Komp\-lex adatst\-ruk\-t\'u\-r\'a\-kat (ab\-la\-ko\-kat, kur\-zo\-ro\-kat, stb.) mint
er\H o\-for\-r\'a\-so\-kat ke\-zel, ame\-lye\-ket meg\-oszt\-va hasz\-n\'al\-hat t\"obb al\-kal\-ma\-z\'as is.
Ezek\-re az adatst\-ruk\-t\'u\-r\'ak\-ra a prog\-ra\-mok azo\-no\-s\'\i{}\-t\'ok\-kal hi\-vat\-koz\-nak. Ez a
tech\-ni\-ka je\-len\-t\H o\-sen cs\"ok\-kent\-he\-ti a h\'a\-l\'o\-za\-ton \'at\-k\"ul\-den\-d\H o adat\-me\discretionary{ny-}{ny}{nny}i\-s\'e\-get.
\end{itemize}

A gya\-kor\-lat\-ban a rend\-szert \'al\-ta\-l\'a\-ban \'ugy hasz\-n\'al\-j\'ak, hogy min\-den fel\-hasz\-n\'a\-l\'o
egy szer\-ver\-n\'el \"ul, \'es prog\-ra\-mo\-kat in\-d\'\i{}t\-hat ak\'ar lo\-k\'a\-li\-san, ami\-kor is az
ered\-m\'eny a he\-lyi ki\-jel\-z\H on je\-le\-nik meg, vagy egy t\'a\-vo\-li g\'e\-pen, az ered\-m\'enyt
\'at\-i\-r\'a\-ny\'\i{}t\-va a he\-lyi g\'ep\-re.

A le\-he\-t\H o\-s\'e\-gek ki\-hasz\-n\'a\-l\'a\-s\'a\-nak egy sz\'el\-s\H o\-s\'e\-ges p\'el\-d\'a\-ja, ami\-kor a fel\-hasz\-n\'a\-l\'o
egy olyan PC el\H ott \"ul, amin csak az X szer\-ver fut, \'es t\'a\-vo\-li g\'e\-pe\-ken fu\-t\'o
prog\-ra\-mok ered\-m\'e\-nye je\-le\-nik meg a k\'e\-per\-ny\H on. Ilyen\-kor a PC \'ugy n\'ez ki, \'es \'ugy
is vi\-sel\-ke\-dik, mint egy mul\-ti\-tasz\-kos mun\-ka\-\'al\-lo\-m\'as.



  \subsubsection{Ab\-lak\-ke\-ze\-l\'es}
  \label{xws:konc:ablak}

Min\-den fu\-t\'o X-ben egy ki\-e\-melt je\-len\-t\H o\-s\'e\-g\H u prog\-ram a {\em win\-dow ma\-na\-ger\/}.
Ez is egy X prog\-ram, ha\-son\-l\'o\-an \'ep\"ul fel, mint b\'ar\-me\-lyik m\'a\-sik X al\-kal\-ma\-z\'as, de
ez a prog\-ram spe\-ci\-\'a\-lis jo\-gok\-kal ren\-del\-ke\-zik. Ez a prog\-ram ke\-ze\-li a k\'e\-per\-ny\H on
meg\-je\-le\-n\H o \"o\discretionary{sz-}{sz}{ssz}es ab\-la\-kot. Ez ha\-t\'a\-roz\-za meg a he\-ly\"u\-ket l\'et\-re\-ho\-z\'as\-kor, ez te\-szi
le\-he\-t\H o\-v\'e, hogy a fel\-hasz\-n\'a\-l\'o tet\-sz\H o\-le\-ges ab\-la\-kot \'at\-m\'e\-re\-tez\-zen, iko\-ni\-z\'al\-jon,
egy\'eb pa\-ra\-m\'e\-te\-re\-i\-ket \'al\-l\'\i{}t\-sa.

A k\"u\-l\"on\-b\"o\-z\H o X meg\-va\-l\'o\-s\'\i{}\-t\'a\-sok {\em win\-dow ma\-na\-ger\/}ei je\-len\-t\H o\-sen el\-t\'er\-het\-nek
egy\-m\'as\-t\'ol. P\'el\-d\'a\-ul egyik jel\-lem\-z\H o tu\-laj\-don\-s\'a\-guk, hogy mi\-k\'ep\-pen ren\-de\-lik hoz\-z\'a
a bil\-len\-ty\H u\-zet\-in\-pu\-tot az ab\-la\-kok\-hoz. Er\-re k\'et\-f\'e\-le m\'od\-szer ter\-jedt el:

\begin{itemize}
 \item Eg\'er k\"o\-ve\-t\H o ({\em fol\-low mo\-u\-se} vagy {\em re\-al-es\-ta\-te-dri\-ven}):  A
bil\-len\-ty\H u\-zet\-r\H ol \'er\-ke\-z\H o ka\-rak\-te\-re\-ket min\-dig az az ab\-lak kap\-ja meg, ame\-lyik
fe\-lett a kur\-zor van.

 \item Ki\-v\'a\-lasz\-t\'a\-sos ({\em lis\-te\-ner} vagy {\em click-to-type}): A bil\-len\-ty\H u\-zet
ah\-hoz az ab\-lak\-hoz van ren\-del\-ve, ame\-lyik utol\-j\'a\-ra ki lett v\'a\-laszt\-va az eg\'er\-rel.
Ez az in\-ter\-fa\-ce st\'\i{}\-lus is\-me\-r\H os le\-het az App\-le Ma\-cin\-tosh fel\-hasz\-n\'a\-l\'ok\-nak.
\end{itemize}

Az OPEN\-LO\-OK {\em win\-dow ma\-na\-ger} mind\-k\'et m\'od\-szert is\-me\-ri, a fel\-hasz\-n\'a\-l\'o
v\'a\-laszt\-hat\-ja ki a ne\-ki job\-ban meg\-fe\-le\-l\H ot.

Az X al\-kal\-ma\-z\'a\-so\-kat \'ugy kell meg\-\'\i{}r\-ni, hogy tet\-sz\H o\-le\-ges {\em win\-dow
man\-ager\/}rel egy\"utt tud\-ja\-nak m\H u\-k\"od\-ni. Csak \'ugy biz\-to\-s\'\i{}\-tott a prog\-ram
hor\-doz\-ha\-t\'o\-s\'a\-ga, ha nem f\"ugg a {\em win\-dow ma\-na\-ger} \'al\-tal al\-kal\-ma\-zott UI
st\'\i{}\-lus\-t\'ol.

  \subsubsection{Ese\-m\'eny\-ke\-ze\-l\'es}
  \label{xws:konc:esem}

Az ese\-m\'e\-nyek az X fi\-lo\-z\'o\-fia na\-gyon fon\-tos r\'e\-sz\'et k\'e\-pe\-zik, ez\'ert
n\'el\-k\"u\-l\"oz\-he\-tet\-len a meg\-\'er\-t\'e\-s\"uk. Az eg\'er moz\-ga\-t\'a\-sa, vagy egy bil\-len\-ty\H u le\-\"u\-t\'e\-se
in\-put ese\-m\'enyt v\'alt ki. Ezek a le\-gegy\-sze\-r\H ubb \'es leg\-gyak\-rab\-ban el\H o\-for\-du\-l\'o
ese\-m\'e\-nyek, ame\-lyek\-kel ta\-l\'al\-koz\-ha\-tunk. \'Al\-ta\-l\'a\-nos\-s\'ag\-ban egy ese\-m\'eny egy olyan
in\-for\-m\'a\-ci\-\'o\-cso\-mag, amit a szer\-ver k\"uld a prog\-ram\-nak bi\-zo\-nyos t\"or\-t\'e\-n\'e\-sek
be\-k\"o\-vet\-ke\-z\'e\-se\-kor.

Az ese\-m\'e\-nyek egy r\'e\-sz\'et a fel\-hasz\-n\'a\-l\'oi in\-put ad\-ja. Ezek f\H o\-leg az eg\'er\-rel \'es a
bil\-len\-ty\H u\-zet\-tel kap\-cso\-la\-to\-sak.

Egy m\'a\-sik cso\-port az ab\-lak\-ke\-ze\-l\H o m\H u\-ve\-le\-tek mel\-l\'ek\-ha\-t\'a\-sa\-k\'ent ge\-ne\-r\'a\-l\'o\-dik. Er\-re
p\'el\-d\'a\-ul em\-l\'\i{}t\-het\-j\"uk azt az ese\-tet, ami\-kor egy el\H o\-z\H o\-leg el\-fe\-dett ab\-lak l\'at\-ha\-t\'o\-v\'a
v\'a\-lik, ami egy {\em Ex\-po\-se} ese\-m\'enyt v\'alt ki. 

Az ese\-m\'e\-nyek har\-ma\-dik cso\-port\-ja a k\"u\-l\"on\-b\"o\-z\H o al\-kal\-ma\-z\'a\-sok k\"oz\-ti kom\-mu\-ni\-k\'a\-ci\'o
ered\-m\'e\-nye. \'Igy p\'el\-d\'a\-ul egy A ab\-lak \'er\-te\-s\"ul\-het r\'o\-la, ha egy B ab\-lak k\'e\-ri, hogy
az eg\'er po\-z\'\i{}\-ci\-\'o\-j\'a\-t\'ol \'es a ki\-v\'a\-lasz\-t\'as\-t\'ol f\"ug\-get\-le\-n\"ul min\-den
bil\-len\-ty\H u\-zet-in\-pu\-tot \H o, a B ab\-lak kap\-jon meg.


A fel\-hasz\-n\'a\-l\'oi prog\-ram min\-den egyes ab\-lak\-hoz meg\-ad\-hat\-ja, hogy az adott ab\-lak
mi\-lyen ese\-m\'e\-nyei \'er\-dek\-lik \H ot. En\-nek m\'od\-ja Xlib \'es {\em to\-ol\-kit} szin\-ten
k\"u\-l\"on\-b\"o\-z\H o. Ha\-son\-l\'o\-an el\-t\'er az ese\-m\'e\-nyek ke\-ze\-l\'e\-s\'e\-nek m\'od\-ja is a k\"u\-l\"on\-b\"o\-z\H o
szin\-te\-ken. A\discretionary{ny-}{ny}{nny}it el le\-het mon\-da\-ni \'al\-ta\-l\'a\-nos\-s\'ag\-ban, hogy min\-den X prog\-ram
tar\-tal\-maz egy ese\-m\'eny\-cik\-lust ({\em event lo\-op}). \'Al\-ta\-l\'a\-ban ez a prog\-ra\-mok
k\"oz\-pon\-ti r\'e\-sze, in\-nen \'aga\-zik sz\'et a ve\-z\'er\-l\'es a k\"u\-l\"on\-b\"o\-z\H o ese\-m\'e\-nye\-ket ke\-ze\-l\H o
r\'e\-szek\-re. Xlib szin\-t\H u prog\-ra\-mok\-ban az ese\-m\'eny\-cik\-lus \'al\-ta\-l\'a\-ban egy olyan
v\'eg\-te\-len cik\-lus, ami egy {\tt switch} uta\-s\'\i{}\-t\'as\-sal \'aga\-zik sz\'et a be\-ol\-va\-sott
ese\-m\'eny\-t\H ol f\"ug\-g\H o\-en. A {\em to\-ol\-kit\/}eket hasz\-n\'a\-l\'o prog\-ra\-mok\-ban az
ese\-m\'eny\-cik\-lus egy f\"ugg\-v\'eny\-h\'\i{}\-v\'as\-sal \'er\-he\-t\H o el, ami az el\H o\-z\H o\-leg be\-\'al\-l\'\i{}\-tott \'un.
{\bf call\-back} f\"ugg\-v\'e\-nye\-ket h\'\i{}v\-ja meg a meg\-fe\-le\-l\H o ese\-m\'eny
be\-k\"o\-vet\-ke\-z\'e\-se\-kor.

Az ese\-m\'eny\-ke\-ze\-l\'es sz\"uk\-s\'e\-ges\-s\'e\-ge je\-len\-t\H o\-sen el\-t\'e\-r\H o prog\-ra\-mo\-z\'a\-si m\'od\-sze\-re\-ket
k\'\i{}\-v\'an, mint amit egy ha\-gyo\-m\'a\-nyos, UNIX vagy DOS alat\-ti prog\-ram k\'e\-sz\'\i{}\-t\'e\-se\-kor
al\-kal\-ma\-zunk. Az X prog\-ra\-mok nem hasz\-n\'al\-j\'ak a ha\-gyo\-m\'a\-nyos bil\-len\-ty\H u\-zet ol\-va\-s\'o
funk\-ci\-\'o\-kat, \'es nem v\'a\-ra\-koz\-nak a fel\-hasz\-n\'a\-l\'oi in\-put\-ra. Ehe\-lyett \'al\-lan\-d\'o\-an
k\'esz\-nek kell len\-ni\-\"uk ar\-ra, hogy b\'ar\-mi\-lyen ese\-m\'eny\-re v\'a\-la\-szol\-ja\-nak. A k\"u\-l\"on\-b\"o\-z\H o
t\'\i{}\-pu\-s\'u ese\-m\'e\-nyek tet\-sz\H o\-le\-ges id\H o\-ben \'es sor\-rend\-ben je\-lent\-kez\-het\-nek.

  \subsubsection{Ob\-jek\-tum ori\-en\-t\'alt prog\-ra\-mo\-z\'a\-si st\'\i{}\-lus}
  \label{xws:konc:oop}

A wid\-get se\-tek fel\-\'e\-p\'\i{}\-t\'e\-se \'es hasz\-n\'a\-la\-ta na\-gyon sok ob\-jek\-tum ori\-en\-t\'alt vo\-n\'ast
mu\-tat. Mi\-vel azon\-ban a C nyelv nem t\'a\-mo\-gat\-ja az ob\-jek\-tum ori\-en\-t\'alt
prog\-ra\-mo\-z\'a\-si st\'\i{}\-lust, ez\'ert a prog\-ra\-mo\-z\'o fe\-le\-l\H o\-s\'e\-ge, hogy be\-tart\-sa a
sza\-b\'a\-lyo\-kat. Ezek\-r\H ol lesz sz\'o a k\"o\-vet\-ke\-z\H ok\-ben.

A wid\-get set ob\-jek\-tu\-mosz\-t\'a\-lyo\-kat de\-fi\-ni\-\'al, amik\-b\H ol a wid\-ge\-tek l\'et\-re\-ho\-z\'a\-sa\-kor
ke\-let\-kez\-nek {\bf ob\-jek\-tu\-mok}. Az ob\-jek\-tu\-mok k\'et r\'esz\-b\H ol \'all\-nak:

\begin{itemize}
 \item {\bf Adat}: az ob\-jek\-tum ada\-tai az \H ot le\-\'\i{}\-r\'o att\-ri\-b\'u\-tu\-mok \'er\-t\'e\-kei. Ezek
le\-het\-nek nyil\-v\'a\-nos \'es pri\-v\'at att\-ri\-b\'u\-tu\-mok. A pri\-v\'at att\-ri\-b\'u\-tu\-mo\-kat a
prog\-ra\-mo\-z\'o nem \'al\-l\'\i{}t\-hat\-ja.

 \item {\bf K\'od}: F\"ugg\-v\'e\-nyek az ob\-jek\-tu\-mo\-kon be\-l\"ul az ada\-tok ke\-ze\-l\'e\-s\'e\-re. Er\-re
p\'el\-da le\-het min\-den wid\-get\-hez egy olyan f\"ugg\-v\'eny, ami az adott wid\-get
meg\-sem\-mi\-s\'\i{}\-t\'e\-s\'e\-hez sz\"uk\-s\'e\-ges m\H u\-ve\-le\-te\-ket el\-v\'eg\-zi.
\end{itemize}

Az X {\em to\-ol\-kit\/}ek to\-v\'ab\-bi ob\-jek\-tum ori\-en\-t\'alt jel\-lem\-z\H ok\-kel ren\-del\-kez\-nek.
Eze\-ket so\-ro\-lom fel a k\"o\-vet\-ke\-z\H ok\-ben.

{\bf \"Uze\-ne\-tek} ({\em mes\-sa\-ges}): Az ob\-jek\-tu\-mok k\"oz\-ti kom\-mu\-ni\-k\'a\-ci\'o esz\-k\"o\-ze. Ide
tar\-toz\-nak az ese\-m\'e\-nyek, a  {\em to\-ol\-kit} f\"ugg\-v\'eny\-h\'\i{}\-v\'a\-sok, a {\em call\-back}
ru\-ti\-nok.

{\bf Be\-\'a\-gya\-zott\-s\'ag} ({\em en\-cap\-su\-la\-ti\-on}): A wid\-ge\-tek\-nek de\-fi\-ni\-\'alt a
vi\-sel\-ke\-d\'e\-s\"uk (prog\-ra\-mo\-z\'oi fe\-l\"ul\-et), de a bel\-s\H o meg\-va\-l\'o\-s\'\i{}\-t\'as rejt\-ve ma\-rad a
prog\-ra\-mo\-z\'o el\H ol.

{\bf Alosz\-t\'a\-lyok} ({\em subc\-las\-sing}): A wid\-get set hi\-e\-rar\-chi\-ku\-san \'ep\"ul fel. Egy
osz\-t\'aly ob\-jek\-tu\-mai mind ren\-del\-kez\-nek az osz\-t\'aly att\-ri\-b\'u\-tu\-ma\-i\-val.

{\bf \"Or\"ok\-l\H o\-d\'es} ({\em in\-he\-ri\-tan\-ce}): Min\-den osz\-t\'aly \"or\"ok\-li a sz\"u\-l\H o\-osz\-t\'aly
att\-ri\-b\'u\-tu\-ma\-it.

 \subsection{Xlib f\"ugg\-v\'eny\-cso\-mag}
 \label{xws:xlib}


A {\em to\-ol\-kit} szin\-t\H u prog\-ra\-mo\-z\'as\-hoz nem sz\"uk\-s\'e\-ges az Xlib-et is\-mer\-ni, de
hasz\-nos le\-het, mi\-vel a {\em to\-ol\-kit\/}ek is az Xlib-en ala\-pul\-nak, s\H ot sz\"uk\-s\'e\-ges
is le\-het, ha a prog\-ram gra\-fi\-k\'at hasz\-n\'al.

Az Xlib f\"ugg\-v\'eny\-cso\-mag az X pro\-to\-koll\-hoz ny\'ujt C nyel\-v\H u prog\-ra\-mo\-z\'oi
in\-ter\-fa\-ce-t. En\-nek meg\-fe\-le\-l\H o\-en az Xlib f\"ugg\-v\'e\-nyek nagy r\'e\-sze egy pro\-to\-koll
h\'\i{}\-v\'as\-s\'a for\-dul. Az Xlib szin\-t\H u prog\-ra\-mo\-z\'as el\H o\-nye, hogy a k\'od gyor\-sabb,
t\"o\-m\"o\-rebb, h\'at\-r\'a\-nya vi\-szont, hogy ha\-son\-l\'o\-an az ala\-csony szin\-t\H u
prog\-ram\-nyel\-vek\-hez, az Xlib prog\-ra\-mok fej\-lesz\-t\'e\-se t\"obb id\H ot \'es ener\-gi\-\'at
ig\'e\-nyel.

Az Xlib f\"ugg\-v\'eny\-cso\-mag sz\'e\-les\-k\"o\-r\H u le\-he\-t\H o\-s\'e\-ge\-ket biz\-to\-s\'\i{}t az ab\-la\-kok, az
ese\-m\'e\-nyek, a k\'e\-per\-ny\H o hasz\-n\'a\-la\-t\'a\-hoz. Nem se\-g\'\i{}\-ti el\H o vi\-szont egy adott UI
st\'\i{}\-lus meg\-va\-l\'o\-s\'\i{}\-t\'a\-s\'at. Az Xlib \'al\-tal ny\'uj\-tott esz\-k\"o\-z\"ok en\-n\'el ala\-cso\-nyabb
szin\-t\H u\-ek, a UI-t Xlib-ben a le\-ga\-lap\-ve\-t\H obb el\-e\-mek\-b\H ol kell fel\-\'e\-p\'\i{}\-te\-ni, k\"u\-l\"on
meg\-raj\-zol\-va min\-den egyes r\'esz\-le\-tet. Ez\'ert is aj\'an\-lott a {\em to\-ol\-kit\/}ek
hasz\-n\'a\-la\-ta.

Az Xlib f\"ugg\-v\'e\-nyek\-kel le\-\'\i{}\-r\'a\-sunk\-ban r\'esz\-le\-te\-sen nem fog\-lal\-ko\-zunk, de a
gra\-fi\-ka kap\-cs\'an a \ref{graf}. fe\-je\-zet\-ben ta\-l\'al\-ha\-t\'ok az \'al\-ta\-l\'a\-nos Xlib
f\"ugg\-v\'e\-nyek\-re is \'er\-v\'e\-nyes in\-for\-m\'a\-ci\-\'ok.

 \subsection{Xt To\-ol\-kit}
 \label{xws:xt}

Az Xt To\-ol\-kit ta\-l\'an a leg\-sz\'e\-le\-sebb k\"or\-ben hasz\-n\'alt X {\em to\-ol\-kit\/}. Eb\-ben nagy
sze\-re\-pe van an\-nak, hogy ez r\'e\-sze az X szab\-v\'any\-nak, azaz min\-den X
meg\-va\-l\'o\-s\'\i{}\-t\'as\-ban meg\-ta\-l\'al\-ha\-t\'o. 

Az Xt Int\-rin\-sics r\'e\-teg egy olyan f\"ugg\-v\'eny\-cso\-ma\-got tar\-tal\-maz, ami a wid\-get set
\'al\-tal biz\-to\-s\'\i{}\-tott UI \'ep\'\i{}\-t\H o\-e\-lem ob\-jek\-tu\-mok ke\-ze\-l\'e\-s\'e\-re szol\-g\'al. A
f\"ugg\-v\'eny\-cso\-mag tel\-je\-sen f\"ug\-get\-len az \'ep\'\i{}\-t\H o\-e\-lem\-k\'esz\-let\-t\H ol, \'es \'\i{}gy az
al\-kal\-ma\-zott UI st\'\i{}\-lus\-t\'ol is.

A wid\-get set olyan ob\-jek\-tu\-mo\-kat tar\-tal\-maz, ame\-lyek\-b\H ol fel\-\'e\-p\'\i{}t\-he\-t\H o egy
fel\-hasz\-n\'a\-l\'oi fe\-l\"ul\-et. Ezek ha\-t\'a\-roz\-z\'ak meg az al\-kal\-ma\-zott UI st\'\i{}\-lust. N\'e\-h\'any
l\'e\-te\-z\H o wid\-get set:

\begin{description}

 \item[At\-he\-na] Ezt a wid\-get se\-tet az MIT fej\-lesz\-tet\-te ki de\-monst\-r\'a\-ci\-\'os c\'e\-lok\-ra.
Nem ny\'ujt a\discretionary{ny-}{ny}{nny}i le\-he\-t\H o\-s\'e\-get, mint a ke\-res\-ke\-de\-lem\-ben el\-\'er\-he\-t\H o el\-em\-k\'esz\-le\-tek.

 \item[MO\-TIF] Az OSF (Open Soft\-wa\-re Fo\-un\-da\-ti\-on) fej\-lesz\-t\'e\-se,  sz\'e\-les
  k\"or\-ben el\-ter\-jedt.

 \item[OPEN\-LO\-OK] Az AT\&T \'es a Sun Mic\-rosys\-tems fej\-lesz\-tet\-te ki, en\-nek
meg\-fe\-le\-l\H o\-en az \'al\-ta\-lunk hasz\-n\'alt mun\-ka\-\'al\-lo\-m\'a\-so\-kon is ez a wid\-get set volt
meg\-ta\-l\'al\-ha\-t\'o.
\end{description}

Az Xt To\-ol\-ki\-tet hasz\-n\'a\-l\'o X prog\-ra\-mok jel\-leg\-ze\-tes struk\-t\'u\-r\'a\-val ren\-del\-kez\-nek.
Egy ilyen prog\-ram \'al\-ta\-l\'a\-nos fel\-\'e\-p\'\i{}\-t\'e\-s\'et \'\i{}r\-juk le a k\"o\-vet\-ke\-z\H ok\-ben.

\begin{enumerate}
 \item Az {\tt $<$X11/Intrinsic.h$>$} \'es az {\tt $<$X11/StringDefs.h$>$}
be\-ol\-va\-s\'a\-sa. Ezt a k\'et inc\-lu\-de fi\-le-t min\-den prog\-ram k\"o\-te\-les be\-ol\-vas\-ni.

 \item A hasz\-n\'alt wid\-ge\-tek\-hez tar\-to\-z\'o nyil\-v\'a\-nos inc\-lu\-de fi\-le-ok be\-ol\-va\-s\'a\-sa.
Ezek\-nek a fi\-le-ok\-nak a ne\-ve meg\-e\-gye\-zik a wid\-get osz\-t\'aly ne\-v\'e\-vel. P\'el\-d\'a\-ul az
{\tt $<$Xol/StaticText.h$>$} fi\-le-t be kell ol\-vas\-ni min\-den prog\-ram\-nak,
ame\-lyik hasz\-n\'al\-ja a StaticText osz\-t\'alyt.

 \item A To\-ol\-kit ini\-ci\-a\-li\-z\'a\-l\'a\-sa az {\tt XtAppInitialize} vagy az {\tt
XtVaAppIni\-tia\-lize} f\"ugg\-v\'eny\-h\'\i{}\-v\'as\-sal.

 \item Wid\-ge\-tek l\'et\-re\-ho\-z\'a\-sa az {\tt XtCreateManagedWidget} f\"ugg\-v\'eny
h\'\i{}\-v\'a\-s\'a\-val.

 \item Ese\-m\'eny\-ke\-ze\-l\H o ru\-ti\-nok be\-jegy\-z\'e\-se.

 \item Wid\-ge\-tek fel\-\'e\-lesz\-t\'e\-se: {\tt XtRealizeWidget}.

 \item Ese\-m\'eny\-cik\-lus kez\-d\'e\-se: {\tt XtAppMainLoop}.
\end{enumerate}

Pl. SUN-OS k\"or\-nye\-zet\-ben a {\tt /usr/openwin/include} al\-k\"onyv\-t\'ar
tar\-tal\-maz\-za az inc\-lu\-de fi\-le-okat. Ezen be\-l\"ul az {\tt X11} al\-k\"onyv\-t\'ar\-ban van\-nak
az {\tt Xlib} inc\-lu\-de fi\-le-ok, az {\tt Xol} al\-k\"onyv\-t\'ar\-ban pe\-dig az OPEN\-LO\-OK
wid\-get set inc\-lu\-de fi\-le-ai.


\"O\discretionary{sz-}{sz}{ssz}e\-ha\-son\-l\'\i{}t\-va a MO\-TIF \'es az OPEN\-LO\-OK wid\-get se\-te\-ket, na\-gyon sok ha\-son\-l\'o
funk\-ci\-\'o\-j\'u wid\-ge\-tet ta\-l\'a\-lunk. Vi\-szont ezek a k\"u\-l\"on\-b\"o\-z\H o k\'esz\-le\-tek\-ben \'al\-ta\-l\'a\-ban
el\-t\'e\-r\H o n\'e\-ven sze\-re\-pel\-nek, s\H ot van olyan ob\-jek\-tum\-n\'ev, ami a k\'et k\'esz\-let\-ben k\'et
k\"u\-l\"on\-b\"o\-z\H o funk\-ci\-\'o\-j\'u ob\-jek\-tu\-mot ta\-kar.

Az Xt f\"ugg\-v\'e\-nyek UI st\'\i{}\-lus\-t\'ol va\-l\'o f\"ug\-get\-len\-s\'e\-ge nagy el\H ony olyan szem\-pont\-b\'ol,
hogy ahogy id\H o\-vel a fel\-hasz\-n\'a\-l\'oi \'\i{}z\-l\'est k\"o\-vet\-ve v\'al\-toz\-nak a UI st\'\i{}\-lu\-sok, az X
szab\-v\'anyt nem kell meg\-v\'al\-toz\-tat\-ni. Azt vi\-szont, hogy a wid\-get set\-ek nem
ren\-del\-kez\-nek r\"og\-z\'\i{}\-tett prog\-ra\-mo\-z\'oi in\-ter\-fa\-ce-szel, a for\-r\'asp\-rog\-ram
hor\-doz\-ha\-t\'o\-s\'ag el\-vesz\-t\'e\-s\'et je\-len\-ti. \'Igy ugya\-nis csak a tisz\-t\'an Xlib szin\-t\H u
f\"ugg\-v\'e\-nye\-ket hasz\-n\'a\-l\'o prog\-ra\-mo\-kat le\-het egy m\'a\-sik k\"or\-nye\-zet\-ben v\'al\-toz\-ta\-t\'as
n\'el\-k\"ul le\-for\-d\'\i{}\-ta\-ni \'es fut\-tat\-ni. Az ilyen prog\-ra\-mok\-kal vi\-szont az a prob\-l\'e\-ma,
hogy egy\-r\'eszt nagy al\-kal\-ma\-z\'a\-sok meg\-va\-l\'o\-s\'\i{}\-t\'a\-sa na\-gyon nagy mun\-k\'a\-ba te\-lik,
m\'as\-r\'eszt egy ilyen prog\-ram nem fog il\-lesz\-ked\-ni min\-den rend\-szer\-ben az ott
hasz\-n\'alt UI st\'\i{}\-lus\-hoz.

 \subsection{XVi\-ew To\-ol\-kit}
 \label{xws:xview}

Az XVi\-ew To\-ol\-kit egy al\-ter\-na\-t\'\i{}\-v\'a\-ja az Xt To\-ol\-kit\-nek, amit az AT\&T \'es a Sun
Mic\-rosys\-tems c\'e\-gek fej\-lesz\-tet\-tek ki. Az XVi\-ew-t ere\-de\-ti\-leg az\'ert
fej\-lesz\-tet\-t\'ek ki, hogy l\'e\-te\-z\H o Sun\-Vi\-ew al\-kal\-ma\-z\'a\-so\-kat X al\'a \'at le\-hes\-sen vin\-ni.
A Sun\-Vi\-ew ab\-lak\-ke\-ze\-l\H o rend\-szer az X ki\-fej\-lesz\-t\'e\-se el\H ott is l\'e\-te\-zett, \'es sok
al\-kal\-ma\-z\'as fu\-tott alat\-ta. Az XVi\-ew meg\-al\-ko\-t\'a\-s\'a\-val le\-he\-t\H o\-v\'e v\'alt, hogy a
Sun\-Vi\-ew-t ki\-szo\-r\'\i{}\-t\'o X szab\-v\'any sze\-rin\-ti ab\-lak\-ke\-ze\-l\H o rend\-sze\-rek\-re \'at le\-hes\-sen
vin\-ni a m\'ar l\'e\-te\-z\H o \'es el\-ter\-jedt Sun\-Vi\-ew prog\-ra\-mo\-kat. Az Xvi\-ew azon\-ban
t\'a\-mo\-gat\-ja \'uj prog\-ra\-mok \'\i{}r\'a\-s\'at is. Eh\-hez sz\'a\-mos esz\-k\"ozt biz\-to\-s\'\i{}\-ta\-nak. Se\-g\'\i{}\-tik
p\'el\-d\'a\-ul az XVi\-ew \'es az Xlib egy\"ut\-tes hasz\-n\'a\-la\-t\'at, f\"ugg\-v\'e\-nye\-ket biz\-to\-s\'\i{}\-ta\-nak
az Xlib le\-he\-t\H o\-s\'e\-ge\-i\-nek ki\-hasz\-n\'a\-l\'a\-s\'a\-ra XVi\-ew-b\'ol.




Az XVi\-ew To\-ol\-kit\-r\H ol r\'esz\-le\-te\-sen \'\i{}runk a \ref{xview}. fe\-je\-zet\-ben.

  \subsubsection{OPEN\-LO\-OK gra\-fi\-kus fel\-hasz\-n\'a\-l\'oi fe\-l\"ul\-et}
  \label{xws:xview:ol}

Az XVi\-ew To\-ol\-kit az OPEN\-LO\-OK gra\-fi\-kus {\em User In\-ter\-fa\-ce} (UI) st\'\i{}\-lust
va\-l\'o\-s\'\i{}t\-ja meg. Ez a UI egy egy\-sze\-r\H u, kon\-zisz\-tens \'es ha\-t\'a\-sos fe\-l\"ul\-e\-tet pr\'o\-b\'al
biz\-to\-s\'\i{}\-ta\-ni a fel\-hasz\-n\'a\-l\'o\-nak. Az OPEN\-LO\-OK fej\-lesz\-t\H oi az AT\&T \'es a Sun
Mic\-rosys\-tems, akik ezt a st\'\i{}\-lust szab\-v\'a\-nyo\-s\'\i{}\-tot\-t\'ak a UNIX System V. Re\-le\-a\-se
4. gra\-fi\-kus fel\-hasz\-n\'a\-l\'oi fe\-l\"ul\-e\-t\'e\-nek. Az OPEN\-LO\-OK hasz\-n\'a\-la\-t\'a\-val a prog\-ra\-mo\-z\'o
a prog\-ram fej\-lesz\-t\'e\-s\'e\-nek funk\-ci\-o\-n\'a\-lis r\'e\-sze\-i\-re kon\-cent\-r\'al\-hat \'es nem kell egy
UI meg\-va\-l\'o\-s\'\i{}\-t\'a\-s\'a\-val ve\-sz\H od\-nie. 

Egy j\'ol meg\-ter\-ve\-zett UI el\'eg \'al\-ta\-l\'a\-nos ah\-hoz, hogy tet\-sz\H o\-le\-ges ope\-r\'a\-ci\-\'os
rend\-szer\-hez, ab\-lak\-ke\-ze\-l\H o rend\-szer\-hez vagy gra\-fi\-kus ki\-jel\-z\H o\-h\"oz il\-leszt\-he\-t\H o
le\-gyen. Mi\-vel az OPEN\-LO\-OK meg\-va\-l\'o\-s\'\i{}\-t\'a\-s\'at nem kor\-l\'a\-toz\-za a fen\-ti\-ek egyi\-ke sem,
ez\'ert az XVi\-ew is olyan spe\-ci\-fi\-k\'a\-ci\-\'o\-kon alap\-szik, ame\-lye\-ket k\"o\discretionary{ny-}{ny}{nny}e\-d\'en \'at
le\-he\-tett ten\-ni X Win\-dows al\'a.

Az OPEN\-LO\-OK vi\-zu\-\'a\-lis ter\-ve\-z\'e\-se egy egy\-sze\-r\H u, de k\'e\-nyel\-mes, esz\-t\'e\-ti\-kus
k\"or\-nye\-ze\-tet te\-rem\-tett. A fe\-l\"ul\-et ter\-ve\-z\'e\-se\-kor n\'e\-h\'any egy\-sze\-r\H u ala\-pelv
be\-tar\-t\'a\-s\'a\-ra t\"o\-re\-ked\-tek, ami egy k\"o\discretionary{ny-}{ny}{nny}en meg\-ta\-nul\-ha\-t\'o \'es ke\-zel\-he\-t\H o UI-t
ered\-m\'e\-nye\-zett.


Prog\-ra\-mo\-z\'oi ol\-dal\-r\'ol az OPEN\-LO\-OK wid\-get set olyan esz\-k\"oz\-k\'esz\-le\-tet biz\-to\-s\'\i{}t,
amely\-ben na\-gyon sok\-f\'e\-le in\-put \'es out\-put funk\-ci\'o meg\-va\-l\'o\-s\'\i{}\-t\'a\-s\'a\-ra be\-\'e\-p\'\i{}\-tett
el\-e\-met ta\-l\'al\-ha\-tunk. V\'a\-lo\-gat\-ha\-tunk a leg\-k\"u\-l\"on\-f\'e\-l\'ebb adat\-be\-vi\-te\-li esz\-k\"o\-z\"ok k\"ozt,
a {\em pop-up}, {\em pull-down}, {\em pull-right} me\-n\"uk k\"ozt.

Az esz\-k\"o\-z\"ok meg\-je\-le\-n\'e\-se, vi\-sel\-ke\-d\'e\-se nagy m\'er\-t\'ek\-ben kon\-fi\-gu\-r\'al\-ha\-t\'o a
fel\-hasz\-n\'a\-l\'o \'al\-tal. P\'el\-d\'a\-ul v\'a\-lasz\-ta\-ni le\-het, hogy az ab\-lak me\-lyik ol\-da\-l\'an le\-gyen
a {\em scroll\-bar}, \'al\-l\'\i{}\-ta\-ni le\-het a sz\'\i{}\-ne\-ket, meg\-cse\-r\'el\-he\-t\H ok az eg\'er gomb\-ja\-i\-hoz
ren\-delt funk\-ci\-\'ok.

%