「GNOMEフレームワーク」の版間の差分

削除された内容 追加された内容
M リンクを修正しました。
libbonoboui, GtkPlug, GtkSocketなどの説明を追加しました。
418 行
ここまででgconfの設定をアプリケーションの動作中に反映するための機構を見て来ました。これらはアプリケーションの起動時にしか変更を反映できない方法と比べて優れた方法です。同様の方法は他のGNOMEアプリケーションでも用いられており、gconfがGNOMEのライブラリとして重要であることを示しています。
 
====アプレットの動作に必要なライブラリ====
 
既に"アプレット"がlibbonoboを通じて実現されていることを述べました。ここで、libbonoboはプロセス間通信を行うための一般的な技術です。これは、アプレットを扱うプロセスとgnome-panelのプロセスの間の通信を行うために用いられます。
 
アプレットはlibbonoboに加えてlibbonobouiライブラリに含まれる技術も用いています。libbonobouiライブラリはlibbonoboを用いてあるプロセスで制御されるGTKウィジェットを他のプロセスのウィジェットに埋め込む一般的なライブラリです。
 
=====GtkPlug, GtkSocket=====
 
まず最初に、GTKを用いたウィジェットの埋め込みを扱います。GTKの枠組みでウィジェットの埋め込みを行うには、GtkPlug, GtkSocketのウィジェットを使います。GtkSocketは、ウィジェットを埋め込まれる側のプロセスが作成するウィジェットで、GtkPlugが実際に埋め込まれるウィジェットに対応します。
 
X上で動くGTKのプロセス中では、GtkPlug, GtkSocketは埋め込まれるウィンドウを決めるために、WindowIDを用います。WindowIDはXのウィンドウに与えられる一意の数値で、型はXID(大抵unsigned long)で与えられます。
:サンプルコード
 
X上でのWindowIDを知るには、xwininfoコマンドを使うのが簡単です。
$xwininfo
これは指定されたウィンドウのWindow IDやジオメトリ(位置と大きさ)などの情報を与えます。
 
GtkPlug, GtkSocketを用いて埋め込みを行うには、GtkSocketにGtkPlugのWindowIDを伝える必要があります。このためのlibbonoboui内のクラスとして、BonoboPlug, BonoboSocketの両クラスがあります。これらはそれぞれGtkPlug, GtkSocketを継承します。
 
実際に埋め込みを行うために、BonoboPlug, BonoboSocketはそれぞれBonoboControl, BonoboControlFrameを使います。ここで、BonoboControlはgetWindowIDという名の"メソッド"を持っており、他のプロセスで実行されるBonoboControlFrameにBonoboPlugのWindowIDを伝えます。ただし、libbonobo, libbonobouiのバージョンとして、2.16.0を用いました。
 
BonoboControlFrameはGtkWidgetを継承していないため、埋め込まれる側のウィジェットの配置に手間がかかります。この手間を省くため、BonoboControlFrameを"private"なメンバとして持ったクラスBonoboWidgetが存在します。
 
gnome-panel中でも、/gnome-panel/panel-applet-frame.c内でBonoboWidgetが用いられています。panel-applet-frameはBonoboWidgetを収納するGtkWidgetで、GtkEventBoxを継承します。GtkEventBoxはGtkBinクラスを継承したウィジェットで1つのウィジェットを収納します。
 
一方gnome-panelでは、埋め込むウィジェットを提供する機構としてPanelAppletクラスが提供されています。(./libpanel-applet/panel-applet.[ch]を参照)このクラスはBonoboControlへのポインタを所持します。各アプレットはこのクラスを継承し、PanelAppletFrameと相互作用します。
 
====各種アプレットの動作====
 
既にgnome-panelの動作は"アプレット"によって拡張されることを見てきました。ここでアプレットはBonoboと呼ばれる技術を用いて作られており、これらはgnome-panelとは異なったプロセス内で動作しています。この時、なぜ単純にgnome-panelの新たなオブジェクトとして各機能を作成しなかったのかが疑問に思われます。
466 ⟶ 493行目:
 
[[w:Linux]]上では、使っているCPUの周波数は"ファイル"として利用者から利用できるようになっています。ただし、この値を変更してもハードウェアが変更されるわけではなく、この機能はシステムの状態を把握することを目的とした機能です。CPU周波数の情報は/proc/cpuinfo、もしくは/sys以下のディレクトリに記録されています。cpufreqアプレットはこれらの値を読み出して表示します。
 
----