Xウインドウシステムについてはすでに上巻7章で使い方を見てきましたが、 ここではプログラミングの観点から見てみましょう。Xウインドウシステムは ネットワーク透過なサーバ・クライアントシステムとして実装されています。 XサーバはワークステーションやX端末などスクリーンとキーボードおよびマウ スなどのポインターを持ち、ネットワークに接続された装置です。Xプロトコ ルと呼ばれるメッセージをクライアントシステムと交換します。画面に絵や文 字を書くのはクライアントからサーバに送られるコマンドとして、マウスボタ ンが押されたりキーボードのキーが押されたりしたことはイベントと称してサー バからクライアントに通知されます。クライアントがサーバに問い合わせサー バが答えるという場合もあります。ですからXをプログラムするということは 大きく分けてサーバにコマンドを送ることとイベントの処理をクライアント側 で準備することになります。
Xプロトコルで用意されていることは文字を書いたり線や矩形など図形を書 いたりすることのほか描画コンテキストと呼ばれる様々なパラメータを設定す ることやイベントの通知です。これらの処理に使われる関数ライブラリーを Xlibと呼びます。このままでは全ての処理をユーザが定義しないかぎり非常に 使い勝手が悪いシステムです。そこで通常はXサーバごとにウィンドウマネー ジャというクライアントプロセスが何処かで走ります。ウインドウの一つ一つ に枠を付けて操作用のボタンを表示したり、ルートウインドウの上でマウスボ タンをクリックするとポップアップメニューが出たりするのはウインドウマネー ジャが働いているからです。新しいアプリケーションを走らせるときはですか らウインドウマネージャに頼んで同じ操作方法で扱えるウインドウとして開い てもらうことになります。ユーザの作ったプログラムのメニューの操作方法な どもウインドウマネージャが提供するものと同じにしたいものです。こういっ たレベルの呼出しはXtoolkit(正確にはXt Intrin sics)と呼ばれる関数ライブ ラリーを用いて行います。Xt Intrinsicsはウインドウマネージャが行う操作 に関する機能を提供しますが実際のウインドウの見栄えや操作の仕方はウイン ドウマネージャごとに違います。最近ではMotifが良く使われていますが、立 体的に見える窓枠とか、それぞれのウインドウの左上ボタンを押せばウインド ウ操作用のメニューが出てくるとか、右側ボタンでアイコンになったりなどの 操作の仕方はMotifが決めているのであってXt Intrinsics自身は具体的なこと は決定せず、手段を提供するだけです。見栄えや操作方法はポリシーと呼ばれ、 Xt Intrinsicsはポリシーとは独立しています。ウインドウの窓枠やメニュー、 ボタンなどはウイジェットと呼ばれウィンドウマネージャの実装にあわせて関 数や見栄えのデータが定義されます。このようにXウインドウシステムをプロ グラムするということはXlib、Xt Intrinsicsとウイジェットセットの3つにま たがるプログラムを書くことになります。
この節では最初にXlib、次にXt Intrinsicsそして最後にOpenlookとMotifの ウイジェットセットについて解説しますが、コーディングをするときには逆に ウイジェットセット、Xt Intrinsics、Xlibの順に追いかけたほうが理解しや すいかも知れません。まずウイジェットセットを使う準備をしたあとウインド ウを開きます。各々のウィンドウの部品(ウイジェット)の操作方法をXt Intrinsicsで設定します。そして実際の描画はXlibを呼び出して行うというこ とになります。
XウインドウシステムはC言語の関数として実装されていますが、オブジェク ト指向の考え方によって設計された大規模ソフトウエアとして有名です。オブ ジェクト指向がどういうものかを勉強するうえでもいい教材です。クラスやイ ンスタンス、メソッド、継承、派生などオブジェクト指向用語が出てきます。 それらがどのような概念を表わしているのか実際的に見てゆくことになります。