Previous: Xウィンドウ概論
第8回 アイコンとカーソル

Up: Xウィンドウ概論
第8回 アイコンとカーソル

Next: カーソルはサーバーが管理
Previous Page: Xウィンドウ概論
第8回 アイコンとカーソル

Next Page: カーソルはサーバーが管理

アイコンはウィンドウ・マネジャーが管理

アイコンというオブジェクトに対応する Xlibの構造体は存在しません! アイコンもウィンドウの一種ですが、 その生成や管理はウィンドウ・マネジャーの仕事です。 したがって皆さんのプログラムの中でアイコンの変数を宣言する必要はありません。
アイコンを操作したい時には、 ウィンドウ・マネジャーに対して「お願い」を送ることになります。 そのためには「お願い」の内容を記憶する 「ウィンドウ・マネジャー・ヒント構造体」 XWMHintsを用意します。

XWMHints  hint;

XWMHints構造体の定義は、X11/Xlib.h の中にはありません。 もう一つ別のインクルード・ファイル X11/Xutil.h が必要になります。 プログラムの最初に次の行を忘れず付け加えてください。
#include <X11/Xutil.h>

アイコンで使用したい図形を指定するには、 メンバー icon_pixmapにPixmapの値を代入します。 また XWMHints構造体のメンバーは多数あり、 すべてがアイコンのための情報ではありません。 このため、「どのメンバーの情報を伝えたいか」という情報も 指定する必要があります。 それには、flagというメンバーに、 マクロとして宣言されたマスク名を与えるます。
したがってアイコンの図形を指定するには、 構造体に次の2つのメンバーの値を与えることになります。

hint.flags = IconPixmapHint;
   hint.icon_pixmap = pix;

この準備ができたところで、 ウィンドウ・マネジャーにお願いを出す関数を呼び出します。 関数名は XSetWMHints() です。

XSetWMHints( dsp, win, hint );

なお第2引数のウィンドウは、 アプリケーション全体の親ウィンドウを指定してください。
アイコン名(アイコン化した時、アイコンの下に表示される名前)は コンビニエンス関数 XSetIconName() によって登録できます。
XSetIconName( dsp, win, "アイコン" );

XWMHints構造体は次のようなデータの集まりです。
typedef struct {
        long  flags;            /* 設定したいデータのマスクを設定 */
        Bool  input;            /* キーボード・フォーカスが必要か */
        int   initial_state;    /* 最初に画面に出た時の状態 */
        Pixmap  icon_pixmap;    /* アイコンで使うピクスマップ */
        Window  icon_window;    /* アイコンで使うウィンドウ */
        int  icon_x, icon_y;    /* アイコンの位置 */
        Pixmap  icon_mask;      /* アイコンで使うマスクのピクスマップ */
        XID  window_group;      /* ウィンドウのグループ */
} XWMHints;

maruyama@wakhok.ac.jp
1995年02月01日 (水) 00時21分18秒 JST