適当に翻訳する。
X11 には、アプリケーション間でデータを共有するための仕組みが備わっている。カット・バッファ、セレクション・メカニズムなど。
カットバッファとセレクションは似たものだが、違いもある。カット・バッファのデータは、Xサーバが管理するものと考えて良い。一方、セレクションのデータは、アプリケーション側で管理しなければならない。このため、セレクション・データの「所有者」「要求者」といった概念が必要になり、やり取りも複雑。
以下、セレクション・データの受け渡し方法の概略を述べる。
----------
(1)セレクションの内容を取得したいクライアント(要求者)は、同セレクションの所有者に対して、セレクション・データをクライアントが望む形式に変換し、変換後のセレクション・データを何処かのウィンドウのプロパティに格納するよう依頼する。
(2)セレクションの所有者は、セレクション・データの要求を受けたら、指定された形式にデータを変換し、何処かのウィンドウの適当なプロパティに同データを格納し、同ウィンドウと同プロパティの情報を要求者に通知する。指定された形式にデータを変換できなかった場合は、その旨を要求者に通知する
(3)要求者は、通知されたウィンドウ・プロパティからセレクション・データを取得する。
-----
更に詳しく関数・Xイベントの流れを見ると、以下のようになる。
----------
(1)クライアント(要求者)が関数 XConvertSelection を呼び出して、セレクション・データを取得したいということを X サーバに伝える。
(2)X サーバは、セレクションを所有しているクライアント(所有者)に対して、イベント SelectionRequest を送信し、要求があったことと要求の内容とを伝える。
(3)イベント SelectionRequest を受け取ったセレクションの所有者は、指定された形式にセレクション・データを変換し、関数 XChangeProperty を呼び出して、適当なウィンドウの適当なプロパティに変換済みデータを格納する。
(4)セレクションの所有者は、次いで関数 XSendEvent を呼び出し、セレクション・データが何処のウィンドウの何というプロパティに格納されているのかを X サーバに通知する。
(5)X サーバは、関数 XSendEvent の呼び出しを受けて、イベント SelectionNotify を配信し、先の要求者に対して(4)の情報を伝達する。
(6)イベント SelectionNotify を受け取った要求者は、同イベントが運んできた情報を用いて関数 XGetWindowProperty を呼び出し、指定されたウィンドウの指定されたプロパティからセレクション・データを取り出したいと X サーバに伝える。
(7)X サーバは、関数 XGetWindowProperty の呼び出しを受けて、指定されたプロパティに格納されているデータを要求者に送信する。
(8)セレクション・データを受け取った要求者は、関数 XDeleteProperty を呼び出して、セレクション・データの運搬に利用したプロパティの削除を X サーバに要求する。
(9)X サーバは、使用済みプロパティを削除した上でイベント PropertyNotify を配信する。この PropertyNotify を受けて、セレクションの所有者はデータの受け渡しが完了したことを知る。
----------
終わり。
カレンダー
カテゴリー
最新コメント
最新記事
ブログ内検索
広告