ウィンドウ

XCreateWindowX ウィンドウを作成
XCreateSimpleWindow簡易的な X ウィンドウを作成
XDestroyWindowウィンドウとすべての子ウィンドウを破棄
XDestroySubwindows全ての子ウィンドウを破棄
マップ
XMapWindowウィンドウをマップ
XMapRaisedウィンドウをマップして最前面にする
XMapSubwindowsすべての子ウィンドウをマップ
XUnmapWindowウィンドウをアンマップ
XUnmapSubwindowsすべての子ウィンドウをアンマップ
ジオメトリ
XGetGeometry現在のジオメトリを返す
XConfigureWindowウィンドウのサイズ・位置・境界幅・重なり順を変更
XMoveWindowウィンドウ位置を移動
XResizeWindowウィンドウのサイズを変更
XMoveResizeWindowウィンドウの位置とサイズを変更
XSetWindowBorderWidthウィンドウの境界線の幅を設定
XRaiseWindowウィンドウを最前面に
XLowerWindowウィンドウを再背面に
XCirculateSubwindows子ウィンドウの表示順を循環
XCirculateSubwindowsUp隠れている最下位の子を最上位に
XCirculateSubwindowsDown他を隠している最上位の子を最下位に
XRestackWindows指定順で再スタックする
属性
XGetWindowAttributesウィンドウ属性を取得
XChangeWindowAttributesウィンドウ属性を変更
XSetWindowBackground背景色のピクセル値を設定
XSetWindowBackgroundPixmap背景の Pixmap を設定
XSetWindowBorder境界線のピクセル値を設定
XSetWindowBorderPixmap境界線の Pixmap を設定
XSetWindowColormapカラーマップの設定
XDefineCursorカーソルを設定
XUndefineCursorカーソルを元に戻す
情報
XQueryTreeルート、親、子ウィンドウのIDを取得
XTranslateCoordinates指定ウィンドウを原点とした位置に変換する
XQueryPointer現在のポインタ座標を返す
ウィンドウ管理
XReparentWindow親ウィンドウを変更
save-set
XChangeSaveSetsave-set にウィンドウを挿入/削除
XAddToSaveSetsave-set に追加
XRemoveFromSaveSetsave-set から削除
ウィンドウマネージャ関連
XIconifyWindowウィンドウをアイコン化
XWithdrawWindowWithdraw 状態 (完全非表示) にする
XReconfigureWMWindowConfigureWindow リクエストを発行
Window XCreateWindow(Display *display, Window parent, int x, int y, unsigned int width, unsigned int height,
  unsigned int border_width, int depth, unsigned int class, Visual *visual, unsigned long valuemask, XSetWindowAttributes *attributes);
ウィンドウを作成して ID を返す。
作成されたウィンドウは、兄弟の重ね順で一番上に配置されます。

作成されたウィンドウは非表示の状態です。
ウィンドウを表示するには、XMapWindow を呼び出します。
ウィンドウとそのすべての祖先がマップされていない限り、ウィンドウは画面上に表示されません。

新しいウィンドウは、最初は親と同じカーソルを使用します。XDefineCursor を呼び出すことで、新しいウィンドウに新しいカーソルを定義できます。

BadAlloc、BadColor、BadCursor、BadMatch、BadPixmap、BadValue、BadWindow エラーを生成する可能性があります。
parent
親ウィンドウ。InputOnly ウィンドウであってはならない。
x,y
親ウィンドウの境界線の内側を基準とした相対位置。
このウィンドウの境界線の外側の角の位置となる。
width,height
境界線は含まないサイズ。0 以下はエラー。
border_width
境界線の幅。
InputOnly の場合は 0 であること。
depth
ウィンドウの深さ。CopyFromParent で親から取得。
深さはスクリーンでサポートされている必要があるが、親と同じ深さである必要はない。
InputOnly の場合は 0 であること。
class
作成されるウィンドウのクラス。
InputOutput、InputOnly、CopyFromParent
visual
ビジュアル。CopyFromParent で親から取得。
スクリーンでサポートされていること。
valuemask
XSetWindowAttributes で使用する値のビットマスク。
CWBackPixmap, CWBackPixel, CWBorderPixmap, CWBorderPixel, CWBitGravity, CWWinGravity, CWBackingStore, CWBackingPlanes, CWBackingPixel, CWOverrideRedirect, CWSaveUnder, CWEventMask, CWDontPropagate, CWColormap, CWCursor
attributes
ウィンドウ属性。
ウィンドウに無効なウィンドウ属性を指定すると、BadMatch エラーが発生します。
Window XCreateSimpleWindow(Display *display, Window parent, int x, int y, unsigned int width, unsigned int height,
  unsigned int border_width, unsigned long border, unsigned long background);
簡易的な X ウィンドウを作成する。

depth, class, visual は親から継承します。
他のすべてのウィンドウ属性は、デフォルト値が使用されます。
XDestroyWindow(Display *display, Window w);
指定されたウィンドウと、そのすべての子ウィンドウを破棄し、ウィンドウごとに DestroyNotify イベントを生成させます。
このウィンドウは二度と参照されるべきではありません。

w 引数で指定されたウィンドウがマップされている場合は、自動的にアンマップされます。
DestroyNotify イベントは、下層のウィンドウから順に呼ばれます。兄弟間および下位階層間の順序は不定です。

w がルートウィンドウの場合、ウィンドウは破棄されません。
マップされたウィンドウを破棄すると、隠れていた他のウィンドウに対して、Expose イベントが生成されます。
XDestroySubwindows(Display *display, Window w);
指定されたウィンドウのすべての下位ウィンドウを、下から上のスタック順で破棄します。
マップされている子ウィンドウが実際に破棄された場合、w のウィンドウに Expose イベントが生成されます。
マップ
XMapWindow(Display *display, Window w);
ウィンドウと、すべての子ウィンドウをマップ (表示) します。
ウィンドウがすでにマップされている場合、この関数は効果がありません。

子ウィンドウは、現在のマップ状態で表示されます。各子ウィンドウを個別にマップしていない場合、子ウィンドウの表示状態は変わりません。

親がマップされていない場合、そのウィンドウは表示されませんが、親がマップされたときは、ウィンドウが表示対象としてマークされます。
このようなウィンドウは、非ビューアブル (unviewable) と呼ばれます。

ウィンドウの override_redirect が False で、親ウィンドウ (主にルートウィンドウ) が SubstructureRedirectMask を選択している場合、X サーバーはマネージャに MapRequest イベントを生成し、指定ウィンドウはマップせず、マネージャに管理を任せます。
それ以外の場合、ウィンドウはマップされ、X サーバーは MapNotify イベントを生成します。

ウィンドウが表示可能になり、以前の描画内容が記憶されていない場合、X サーバーはウィンドウ背景を描画します。
ウィンドウの背景が定義されていない場合、既存の画面内容は変更されず、X サーバーは 0 個以上の Expose イベントを生成します。
ウィンドウが非表示の間にバッキングストアが維持されていた場合、Expose イベントは生成されません。
バッキングストアが保存される時は、常にウィンドウ全体の Expose が生成されます。
それ以外の場合は、現在の可視領域のみが報告される可能性があります。
新たに見えるようになった下層ウィンドウについても、同様の処理が行われます。
XMapRaised(Display *display, Window w);
XMapWindow と同じだが、指定されたウィンドウをスタックの最上位に上げる。
XMapSubwindows(Display *display, Window w);
指定ウィンドウのすべての子ウィンドウを、上から下の順でマップする。
複数の子ウィンドウがある場合、個別に XMapWindow するのと同じ。

X サーバーは、新しく表示された各ウィンドウに対して、Expose イベントを生成します。
各ウィンドウに対してではなく、すべてのウィンドウに対して一度だけ実行するので、個別にマップするより効率的です。
XUnmapWindow(Display *display, Window w);
指定されたウィンドウのマップを解除し (非表示にし)、X サーバーに UnmapNotify イベントを発生させます。
すでにアンマップされている場合、XUnmapWindow は何の効果もありません。

非表示になったことで、後ろにあるウィンドウには、通常の Expose 処理が実行されます。
子ウィンドウの表示状態はそのままだが、親がマップされるまでは表示されません。
XUnmapSubwindows(Display *display, Window w);
すべての子ウィンドウを、下から上の順でマップ解除します。

これにより、X サーバーは各子ウィンドウで UnmapNotify イベントを生成し、隠れていたウィンドウで Expose イベントを生成します。
ジオメトリ
Status XGetGeometry(Display *display, Drawable d, Window *root_return, int *x_return, int *y_return,
    unsigned int *width_return, unsigned int *height_return, unsigned int *border_width_return, unsigned int *depth_return);
ドローアブルの現在のジオメトリを返します。
クラスが InputOnly であるウィンドウをこの関数に渡してもよい。
d
ウィンドウまたは Pixmap
root_return
ルートウィンドウの ID が入る
x_return,y_return
ウィンドウの場合は、親の原点を基準とした位置。Pixmap の場合は常に 0。
border_width_return
Pixmap の場合は 0
XConfigureWindow(Display *display, Window w, unsigned int value_mask, XWindowChanges *values);

typedef struct {
 int x, y;
 int width, height;
 int border_width;
 Window sibling;
 int stack_mode;
} XWindowChanges;
XWindowChanges 構造体で指定された値を使用して、ウィンドウのサイズ、位置、境界線、重なり順を再構成します。
指定されていない値は、ウィンドウの既存のジオメトリから取得されます。

ルートウィンドウで指定しても何も起きません。
stack_mode を指定せずに sibling を指定した場合、または、ウィンドウが実際には兄弟ではない場合は、BadMatch エラーが発生します。

BottomIf、TopIf、Opposite の計算は、最終ジオメトリ (XConfigureWindow 実行後の状態) に対して実行されることに注意してください。
ウィンドウのバッキングストアの内容や、下位ウィンドウ、その他の見えるようになったウィンドウは、破棄されるか、現在の画面の内容を反映するように変更されます (実装に応じて)。
value_mask
設定する値のビットマスク。
CWX, CWY, CWWidth, CWHeight, CWBorderWidth, CWSibling, CWStackMode
values
設定する構造体。
x,y親の原点からの相対座標。
width,heightウィンドウの境界線を含まないサイズ
border_width境界線の幅。
この幅だけを変更すると、ルート上のウィンドウ位置は移動する。
sibling兄弟ウィンドウの指定
stack_mode再スタックの方法。

■ sibiling が指定されている場合

Above: sibiling のすぐ上。
Below: sibiling のすぐ下。
TopIf: sibiling の下に隠れている場合、スタックの一番上。
BottomIf: sibiling の上にあり隠している場合、スタックの一番下。
Opposite: TopIf と BottomIf を判定。

■ sibiling が指定されていない場合

Above: スタックの一番上。
Below: スタックの一番下。
TopIf: 兄弟ウィンドウに隠れている場合、スタックの一番上。
BottomIf: いずれかの兄弟ウィンドウを隠している場合、スタックの一番下。
Opposite: TopIf と BottomIf を判定。
XMoveWindow(Display *display, Window w, int x, int y);
ウィンドウ位置を移動する。
ウィンドウのサイズを変更したり、ウィンドウを最前面にしたり、ウィンドウのマップ状態を変更したりすることはありません。

マップされたウィンドウを移動すると、そのウィンドウが子以外によって隠されているかどうか、およびバッキングストアが存在しないかどうかに応じて、ウィンドウの内容が失われる場合と失われない場合があります。
ウィンドウの内容が失われると、X サーバーは Expose イベントを生成します。
マップされたウィンドウを移動すると、隠れていたウィンドウに Expose イベントが生成されます。

ウィンドウの override_redirect が False で、親が SubstructureRedirectMask を選択している場合、X サーバーは ConfigureRequest イベントを生成し、それ以上の処理は実行されません。
それ以外の場合、ウィンドウは移動されます。
XResizeWindow(Display *display, Window w, unsigned int width, unsigned int height);
指定されたウィンドウの、境界線を含まない内側のサイズを変更します。
この関数は、ウィンドウの左上の座標や原点を変更せず、ウィンドウの表示順を変更しません。

マップされたウィンドウのサイズを変更すると、その内容が失われ、Expose イベントが生成される場合があります。
マップされたウィンドウが小さくなった場合、そのサイズを変更すると、隠れていたウィンドウ上で Expose イベントが生成されます。

ウィンドウの override_redirect が False で、親が SubstructureRedirectMask を選択している場合、X サーバーは ConfigureRequest イベントを生成し、それ以上の処理は実行されません。
幅または高さのいずれかがゼロの場合、BadValue エラーが発生します。
XMoveResizeWindow(Display *display, Window w, int x, int y, unsigned int width, unsigned int height);
指定されたウィンドウのサイズと位置を変更します。
マップされたウィンドウを移動したりサイズ変更すると、ウィンドウ上で Expose イベントが生成される場合があります。

ウィンドウの override_redirect が False で、親が SubstructureRedirectMask を選択している場合、X サーバーは ConfigureRequest イベントを生成し、それ以上の処理は実行されません。
XSetWindowBorderWidth(Display *display, Window w, unsigned int width);
ウィンドウの境界線の幅を設定
XRaiseWindow(Display *display, Window w);
指定されたウィンドウを、スタックの最上位に上げます。

ウィンドウの override_redirect が False で、親が SubstructureRedirectMask を選択している場合、X サーバーは ConfigureRequest イベントを生成し、それ以上の処理は実行されません。
XLowerWindow(Display *display, Window w);
指定されたウィンドウを、スタックの一番下に置く。
XCirculateSubwindows(Display *display, Window w, int direction);
指定されたウィンドウの子の表示順を、指定した方向に循環させます。
マップされていて、兄弟を隠している最上位、または、兄弟に隠れている最下位の子が存在した場合、それを反対方向に置きます。

他のクライアントが SubstructureRedirectMask を選択している場合、X サーバーは CirculateRequest イベントを生成し、それ以上の処理は実行されません。
子が実際に再スタックされると、X サーバーは CirculateNotify イベントを生成します。
direction
RaiseLowest で、最下位の子をスタックの一番上に置く。
LowerHighest で、最上位の子をスタックの一番下に置く。
XCirculateSubwindowsUp(Display *display, Window w);
兄弟によって部分的または完全に隠されている、指定されたウィンドウの、マップされた最下位の子を、最上位に置く。
全く隠れていない子は影響を受けません。
RaiseLowest を指定した XCirculateSubwindows() と同等。
XCirculateSubwindowsDown(Display *display, Window w);
兄弟を部分的または完全に隠している、指定されたウィンドウの、最上位にマップされた子を、最下位に置く。
全く隠れていない子は影響を受けません。
LowerHighest を指定した XCirculateSubwindows() と同等。
XRestackWindows(Display *display, Window windows[], int nwindows);
指定された順序で、ウィンドウを上から下に再スタックします。

override_redirect が False で、親が SubstructureRedirectMask を選択している場合、X サーバーは override_redirect フラグが False のウィンドウごとに、ConfigureRequest イベントを生成し、それ以上の処理は実行されません。
windows
スタックの上から順に、ウィンドウを配列で指定する。
配列の最初のウィンドウのスタック位置はそのままだが、それ以降は順に下に配置していく。
配列で指定されていないウィンドウは影響を受けない。
nwindows
windows 配列の数
属性
Status XGetWindowAttributes(Display *display, Window w, XWindowAttributes *window_attributes_return);

typedef struct {
 int x, y;
 int width, height;
 int border_width;
 int depth;
 Visual *visual;
 Window root;
 int class;  //InputOutput, InputOnly
 int bit_gravity;
 int win_gravity;
 int backing_store;
 unsigned long backing_planes;
 unsigned long backing_pixel;
 Bool save_under;
 Colormap colormap;
 Bool map_installed; //colormap がインストールされているか
 int map_state;      //ウィンドウの状態。IsUnmapped, IsUnviewable, IsViewable
 long all_event_masks;
 long your_event_mask;
 long do_not_propagate_mask;
 Bool override_redirect;
 Screen *screen;
} XWindowAttributes;
ウィンドウ属性を取得
window_attributes_return
属性の値が入る。

map_state: ウィンドウの状態。IsUnviewable は、自身はマップされているが、親がマップされていない状態。
all_event_masks: すべてのクライアントによってウィンドウ上で選択されたすべてのイベントマスク。
your_event_mask: 関数を実行するクライアントによって選択されたイベントマスク。
XChangeWindowAttributes(Display *display, Window w, unsigned long valuemask, XSetWindowAttributes *attributes);
指定されたウィンドウ属性を変更します。

  • 背景を変更しても、ウィンドウの内容は変更されません。ウィンドウとその背景を再描画するには、XClearWindow を使用します。
  • 境界線を変更したり、境界線 Pixmap の原点が変更されるように背景を変更すると、境界線が再描画されます。
  • ルートウィンドウの背景を None または ParentRelative に変更すると、デフォルトの背景 Pixmap が復元されます。
  • ルートウィンドウの境界線を CopyFromParent に変更すると、デフォルトの境界線 Pixmap が復元されます。
  • win_gravity を変更しても、ウィンドウの現在の位置には影響しません。
  • 隠されたウィンドウの backing_store を WhenMapped または Always に変更したり、マップされたウィンドウの backing_planes、backing_pixel、save_under を変更しても、すぐには効果がない場合があります。
  • colormap を変更すると (既存のマップの内容を変更するのではなく、新しいマップを定義すると)、ColormapNotify イベントが生成されます。
    表示されているウィンドウのカラーマップを変更しても、マップがインストールされていない可能性があるため、画面にはすぐには影響しません (XInstallColormap を参照)。
  • ルートウィンドウのカーソルを None に変更すると、デフォルトのカーソルが復元されます。
  • 可能な限り、カラーマップを共有することをお勧めします。

複数のクライアントが、同じウィンドウでイベントを選択できます。それらのイベントマスクは個別に維持されます。
イベントが生成されると、関係するすべてのクライアントに報告されます。
ただし、SubstructureRedirectMask、ResizeRedirectMask、ButtonPressMask を選択できるクライアントは、一度に 1 つだけです。
クライアントがこれらのイベントマスクのいずれかを選択しようとしたとき、他のクライアントがすでにイベントマスクを選択している場合、BadAccess エラーが発生します。
do_not_propagate_mask はウィンドウごとに 1 つだけあります。クライアントごとに 1 つではありません。
XSetWindowBackground(Display *display, Window w, unsigned long background_pixel);
ウィンドウの背景を、指定されたピクセル値に設定します。
背景を変更しても、ウィンドウの内容は変更されません。

渡されたピクセル値で埋められた、未定義のサイズの Pixmap を使用します。
InputOnly ウィンドウの背景を変更しようとすると、BadMatch エラーが発生します。
XSetWindowBackgroundPixmap(Display *display, Window w, Pixmap background_pixmap);
ウィンドウの背景 Pixmap を設定します。
背景 Pixmap への明示的な参照が行われない場合、背景 Pixmap はすぐに解放できます。
background_pixmap
ParentRelative : ウィンドウの親の背景 Pixmap が使用されます。ルートウィンドウの場合は、デフォルトの背景が復元されます。
None : 背景をなしにします
XSetWindowBorder(Display *display, Window w, unsigned long border_pixel);
ウィンドウの境界線を、指定したピクセル値に設定します。
これを InputOnly ウィンドウで実行しようとすると、BadMatch エラーが発生します。
XSetWindowBorderPixmap(Display *display, Window w, Pixmap border_pixmap);
ウィンドウの境界 Pixmap を、指定したピクスマップに設定します。
境界ピクスマップへの明示的な参照が行われない場合は、境界ピクスマップをすぐに解放できます。

CopyFromParent を指定すると、親ウィンドウの境界 Pixmap のコピーが使用されます。
これを InputOnly ウィンドウで実行しようとすると、BadMatch エラーが発生します。
XSetWindowColormap(Display *display, Window w, Colormap colormap);
指定されたウィンドウに、指定されたカラーマップを設定します。
カラーマップはウィンドウと同じビジュアルタイプである必要があり、そうでない場合は BadMatch エラーが発生します。
XDefineCursor(Display *display, Window w, Cursor cursor);
ポインタがウィンドウ内にあるときのカーソルを設定します。
None の場合、XUndefineCursor と同等になります。
XUndefineCursor(Display *display, Window w);
このウィンドウに対する、以前の XDefineCursor の効果を元に戻します。
ポインタがウィンドウ内にある場合、親のカーソルが使用されるようになります。
ルートウィンドウが親の場合、デフォルトのカーソルが復元されます。
情報
Status XQueryTree(Display *display, Window w, Window *root_return, Window *parent_return,
    Window **children_return, unsigned int *nchildren_return);
ルート、親、子ウィンドウのIDを取得。
root_return
ルートウィンドウIDが入る
parent_return
親ウィンドウIDが入る
children_return
すべての子ウィンドウIDの配列のポインタが入る。子がない場合は NULL が入る。
現在のスタック順で、最下位から最上位までがリストされる。
XFree() で解放する。
nchildren_return
子ウィンドウの数が入る
戻り値
失敗した場合は 0 を返し、成功した場合は 0 以外を返す
Bool XTranslateCoordinates(Display *display, Window src_w, Window dest_w, int src_x, int src_y,
    int *dest_x_return, int *dest_y_return, Window *child_return);
ソースウィンドウの原点を基準とした位置を、変換先ウィンドウの原点を基準とした位置に変換して返す。
src_w
ソースウィンドウ
dest_w
変換先のウィンドウ
dest_x_return,dest_y_return
変換後の位置が入る
child_return
指定位置が、マップ状態の子の範囲内に含まれる場合、その子ウィンドウのIDが入る。それ以外は None が入る。
戻り値
True の場合、変換に成功。
False の場合、src_w と dest_w は異なるスクリーン上にあり、値は 0 が入る。
Bool XQueryPointer(Display *display, Window w, Window *root_return, Window *child_return,
    int *root_x_return, int *root_y_return, int *win_x_return, int *win_y_return, unsigned int *mask_return);
マウスポインタが論理的に置かれているルートウィンドウと、ルートウィンドウの原点を基準としたポインタの座標を返します。

デバイスのイベントが凍結している場合、デバイスの論理状態 (Xlib を通じて確認される) は、物理状態よりも遅れる可能性があることに注意してください。
w
基準となるウィンドウ
root_return
ポインタがあるルートウィンドウIDが入る
child_return
ポインタがウィンドウの子の範囲内にあれば、その子が入る。それ以外は None。
root_x_return,root_y_return
ルートウィンドウを原点とした座標が入る
win_x_return,win_y_return
w のウィンドウを原点とした座標が入る
mask_return
キーボードとボタンの修飾フラグが入る。
戻り値
True で、ポインタは指定ウィンドウと同じスクリーン上に存在し、win_x_return,win_y_return,child_return に値が入る。
False で、ポインタは指定ウィンドウと同じスクリーン上に存在せず、win_x_return,win_y_return は 0、child_return は None が入る。
ウィンドウ管理
XReparentWindow(Display *display, Window w, Window parent, int x, int y);
指定ウィンドウがマップされている場合、そのウィンドウに対して UnmapWindow リクエストを自動的に実行し、階層内の現在の位置からウィンドウを削除し、指定された親の子として挿入します。
ウィンドウは、兄弟ウィンドウに対して、一番上に配置されます。

ウィンドウの親を変更した後、ReparentNotify イベントを生成させます。
このイベントの override_redirect メンバーは、ウィンドウの属性から設定されます。
このメンバーが True に設定されている場合、ウィンドウマネージャーは通常、このウィンドウを無視する必要があります。
最後に、指定されたウィンドウが元々マップされていた場合、X サーバーはそのウィンドウに対して MapWindow リクエストを自動的に実行します。

X サーバーは、隠れていたウィンドウに対して、通常の Expose 処理を実行します。
X サーバーは、最後の MapWindow リクエストにより、最初の UnmapWindow リクエストからの領域に対して Expose イベントを生成しない可能性があります。

次の場合に BadMatch エラーが発生します。

・新しい親ウィンドウは、元の親ウィンドウと同じスクリーン上にありません。
・新しい親ウィンドウは、指定されたウィンドウ、または指定されたウィンドウの下位ウィンドウです。
・新しい親は InputOnly だが、指定ウィンドウはそうではありません。
・指定されたウィンドウには ParentRelative の背景があり、新しい親ウィンドウは、指定されたウィンドウと同じ深さではありません。
x,y
新しい親ウィンドウ内の位置を指定
save-set
XChangeSaveSet(Display *display, Window w, int change_mode);
クライアントのセーブセットから、指定されたウィンドウを挿入または削除します。
指定されたウィンドウは、他のクライアントによって作成されている必要があります。そうでない場合は、BadMatch エラーが発生します。
change_mode
SetModeInsert で挿入、SetModeDelete で削除。
XAddToSaveSet(Display *display, Window w);
指定されたウィンドウを、クライアントのセーブセットに追加します。
指定されたウィンドウは、他のクライアントによって作成されている必要があります。そうでない場合は、BadMatch エラーが発生します。
XRemoveFromSaveSet(Display *display, Window w);
save-set から削除
ウィンドウマネージャ関連
Status XIconifyWindow(Display *display, Window w, int screen_number);
ICCCM 仕様により、ウィンドウをアイコン化する。

ClientMessage イベント (type = WM_CHANGE_STATE) を、指定されたスクリーンのルートウィンドウに送信します。

format = 32
data.l[0] = IconicState
event_mask = SubstructureNotifyMask | SubstructureRedirectMask

ウィンドウマネージャがこのメッセージの受信を選択していて、ウィンドウが通常の状態であれば、ウィンドウの状態を通常からアイコンに変更する要求として、処理してもよい。
WM_CHANGE_STATE プロパティがインターンできない場合、メッセージを送信せず、0 を返します。
戻り値
成功で 0 以外、それ以外は 0
Status XWithdrawWindow(Display *display, Window w, int screen_number);
ICCCM 仕様による、Withdraw 状態へ移行します (ウィンドウは非表示になり、タスクバーにも表示されない)。
指定されたウィンドウのマップを解除し、合成 UnmapNotify イベントを、指定されたスクリーンのルートウィンドウに送信します。
戻り値
UnmapNotify イベントが正常に送信された場合は、ゼロ以外を返します。それ以外の場合は、ゼロを返します。
Status XReconfigureWMWindow(Display *display, Window w, int screen_number, unsigned int value_mask, XWindowChanges *values);
指定されたトップレベルウィンドウで、ConfigureWindow リクエストを発行します。
stack_mode が変更され、リクエストが BadMatch エラーで失敗した場合、エラーは Xlib によってトラップされ、同じ構成パラメータを含む、合成 ConfigureRequest イベントが、指定されたウィンドウのルートに送信されます。
ウィンドウマネージャーは、このイベントを受信し、指定されたウィンドウを再構成する要求として処理することを選択できます。
戻り値
リクエストまたはイベントが正常に送信された場合は、ゼロ以外を返します。それ以外の場合は、ゼロを返します。