XSetWMHints(display, w, wmhints)
Display *display;
Window w;
XWMHints *wmhints;
XWMHints *XGetWMHints(display, w)
Display *display;
Window w;
関数 XSetWMHints はウィンドウマネージャへのヒントを設定する。 このヒントにはアイコンの情報や位置やウィンドウの初期状態、アプリケーション はウィンドウマネージャ経由でキーボード入力を取得するかどうかなどの情 報が含まれる。
XSetWMHints はエラー BadAlloc, BadWindow を起こすことがある。
関数 XGetWMHints はウィンドウマネージャへのヒントを読み、ウィンドウに WM_HINTS プロパティ が設定されていなければ NULL を返し、成功すれば XWMHints 構造体へのポインタを返す。 データを使い終った後は XFree を呼んでメモリを解放すること。
XGetWMHints はエラー BadWindow を起こすことがある。
/* ウィンドウマネージャへのヒントのマスクビット */
#define | InputHint |
(1L << 0)
|
#define | StateHint |
(1L << 1)
|
#define | IconPixmapHint |
(1L << 2)
|
#define | IconWindowHint |
(1L << 3)
|
#define | IconPositionHint |
(1L << 4)
|
#define | IconMaskHint |
(1L << 5)
|
#define | WindowGroupHint |
(1L << 6)
|
#define | UrgencyHint |
(1L << 8)
|
#define | AllHints |
(InputHint|StateHint|IconPixmapHint|
IconWindowHint|IconPositionHint| IconMaskHint|WindowGroupHint) |
/* 値 */ typedef struct { long flags; /* 構造体のどのフィールドが設定されているかを示すマーク */ Bool input; /* このアプリケーションはウィンドウマネージャ経由でキーボード入力を取得するかどうか /* int initial_state; /* 後述 */ Pixmap icon_pixmap; /* アイコンとして使用されるピックスマップ */ Window icon_window; /* アイコンとして使用されるウィンドウ */ int icon_x, icon_y; /* アイコンの初期位置 */ Pixmap icon_mask; /* icon_pixmap のマスクとして使われるピックスマップ */ XID window_group; /* 関連するウィンドウグループの ID */ /* この構造体は将来拡張されるかもしれない */ } XWMHints;
input メンバは、アプリケーションが使う入力フォーカスモデルを ウィンドウマネージャに伝えるために用いられる。 リアルエステートドリブンフォーカス(real-estate driven focus)を使う X バージョン 10 スタイルのアプリケーションのように、入力を期待するが明示 的にサブウィンドウにフォーカスを設定しない(つまり、フォーカス管理の プッシュモデルを使っている)アプリケーションでは、このメンバを True に設定すべきである。 同様に、ウィンドウマネージャによってトップレベルウィンドウにフォーカス が与えられた時だけ入力フォーカスがサブウィンドウに設定される アプリケーションでも、このメンバを True に設定すべきである。 キーボードの入力が必要なときには明示的にフォーカスをサブウィンドウに設 定することによって自分自身で入力を管理するような(つまり、フォーカス管 理のプルモデルを使っている)アプリケーションでは、このメンバを False に設定すべきである。 キーボードの入力を全く使わないアプリケーションでも、このメンバを False に設定すべきである。
プルモデルのウィンドウマネージャは、input メンバが True であるアプリケーションのトップレベルウィンドウに入力フォーカスを設定 することによって、プッシュモデルのアプリケーションが入力を取得できるよ うにしなければならない。 プッシュモデルのウィンドウマネージャは、しかるべきタイミング(例えば、 input メンバが False であるアプリケーションが入力フォーカスをサブウィンドウに設定したとき) に入力フォーカスを PointerRoot にリセットすることによって、プルモデルのアプリケーションがウィンドウマ ネージャを破壊してしまわないように注意しなければならない。
initial_state フラグの定義を以下に示す。
#define | WithdrawnState | 0 |
|
#define | NormalState | 1 |
/* ほとんどのアプリケーションはこれで起動する */
|
#define | IconicState | 3 |
/* アプリケーションをアイコンとして起動させたい */
|
UrgencyHint フラグが flags フィールドに設定されていれば、クライアントはウィンド ウの内容が緊急事項であり、ユーザの適時な応答を必要とすることを示す。 ウィンドウマネージャはこのフラグが設定されている間、ユーザの注意を引 くために何らかの動作をする。 クライアントは、ユーザがこの urgency フラグをクリアするための何らかの 手段(ウィンドウの urgent フラグの条件を緩和するか、単にアラームを止め る)か、ウィンドウが消されるための手段を用意しなければならない。