プロパティのユーティリティ

文字列プロパティ
XSetWMNameWM_NAME プロパティをセット
XGetWMNameWM_NAME プロパティを取得
XStoreName文字列から WM_NAME プロパティをセット
XFetchNameWM_NAME プロパティを文字列で取得
XSetWMIconNameWM_ICON_NAME プロパティをセット
XGetWMIconNameWM_ICON_NAME プロパティを取得
XSetIconNameWM_ICON_NAME プロパティを文字列でセット
XGetIconNameWM_ICON_NAME プロパティを文字列で取得
XSetWMClientMachineWM_CLIENT_MACHINE プロパティをセット
XGetWMClientMachineWM_CLIENT_MACHINE プロパティを取得
WM_HINTS
struct XWMHintsXWMHints 構造体
XAllocWMHintsXWMHints 構造体を確保
XGetWMHintsWM_HINTS プロパティを取得
XSetWMHintsWM_HINTS プロパティをセット
サイズヒント
struct XSizeHintsXSizeHints 構造体
XAllocSizeHintsXSizeHints 構造体を作成
XSetWMNormalHintsWM_NORMAL_HINTS プロパティをセット
XGetWMNormalHintsWM_NORMAL_HINTS プロパティを取得
XSetWMSizeHintsサイズヒントを、指定プロパティにセット
XGetWMSizeHints指定プロパティからサイズヒントを取得
WM_CLASS
XAllocClassHintXClassHint 構造体を確保
XSetClassHintWM_CLASS プロパティをセット
XGetClassHintWM_CLASS プロパティを取得
ほか
XSetTransientForHintWM_TRANSIENT_FOR プロパティをセット
XGetTransientForHintWM_TRANSIENT_FOR プロパティを取得
XSetWMProtocolsWM_PROTOCOLS プロパティをセット
XGetWMProtocolsWM_PROTOCOLS プロパティを取得
XSetWMColormapWindowsWM_COLORMAP_WINDOWS プロパティをセット
XGetWMColormapWindowsWM_COLORMAP_WINDOWS プロパティを取得
XAllocIconSizeXIconSize 構造体を確保
XSetIconSizesWM_ICON_SIZE プロパティをセット
XGetIconSizesWM_ICON_SIZE プロパティを取得
XmbSetWMProperties各プロパティをセット
XSetWMProperties各プロパティをセット (XTextProperty)
XSetCommandWM_COMMAND プロパティをセット
XGetCommandWM_COMMAND プロパティを取得
文字列プロパティ
void XSetWMName(Display *display, Window w, XTextProperty *text_prop);
XSetTextProperty を呼び出して WM_NAME プロパティを設定します。
Status XGetWMName(Display *display, Window w, XTextProperty *text_prop_return);
WM_NAME プロパティを取得
XStoreName(Display *display, Window w, char *window_name);
文字列から WM_NAME プロパティをセットする。

ウィンドウマネージャーは、ユーザーがウィンドウを簡単に識別できるように、タイトルバーなどの目立つ場所にウィンドウ名を表示できます。
一部のウィンドウマネージャーでは、ウィンドウのアイコンにウィンドウの名前が表示される場合がありますが、アプリケーションによってウィンドウのアイコン名が提供されている場合は、そのアイコン名を使用することが推奨されます。
window_name
ホストポータプル文字列エンコーディングでない場合、結果は実装に依存します。
Status XFetchName(Display *display, Window w, char **window_name_return);
WM_NAME プロパティを文字列で取得
window_name_return
ウィンドウに WM_NAME プロパティが設定されていない場合、値は NULL になる。
サーバーから返されたデータがラテンポータブル文字エンコーディングである場合、返される文字列はホストポータブル文字エンコーディングになります。それ以外の場合、結果は実装に依存します。

XFree() で解放する。
戻り値
0 以外で成功。それ以外の場合は、ウィンドウに WM_NAME が設定されていないため、0 が返されます。
void XSetWMIconName(Display *display, Window w, XTextProperty *text_prop);
WM_ICON_NAME プロパティをセット
Status XGetWMIconName(Display *display, Window w, XTextProperty *text_prop_return);
WM_ICON_NAME プロパティを取得
XSetIconName(Display *display, Window w, char *icon_name);
WM_ICON_NAME プロパティを文字列でセット
Status XGetIconName(Display *display, Window w, char **icon_name_return);
WM_ICON_NAME プロパティを文字列で取得
void XSetWMClientMachine(Display *display, Window w, XTextProperty *text_prop);
WM_CLIENT_MACHINE プロパティをセット
Status XGetWMClientMachine(Display *display, Window w, XTextProperty *text_prop_return);
WM_CLIENT_MACHINE プロパティに対して、XGetTextProperty を実行します。
成功するとゼロ以外のステータスを返します。それ以外の場合は、ゼロのステータスを返します。
WM_HINTS
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;

//flags
#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 AllHints (InputHint|StateHint|IconPixmapHint|IconWindowHint|IconPositionHint|IconMaskHint|WindowGroupHint)
#define XUrgencyHint      (1L << 8)

//initial_state
#define WithdrawnState 0 //非表示
#define NormalState 1    //通常表示
#define IconicState 3    //アイコン化
XWMHints 構造体
XWMHints *XAllocWMHints(void);
XWMHints 構造体を確保
XWMHints *XGetWMHints(Display *display, Window w);
WM_HINTS プロパティを取得
int XSetWMHints(Display *display, Window w, XWMHints *wm_hints);
WM_HINTS プロパティをセット
サイズヒント
typedef struct {
    long flags;
    int x, y;
    int width, height;
    int min_width, min_height;
    int max_width, max_height;
    int width_inc, height_inc;
    struct {
        int x; //分子
        int y; //分母
    } min_aspect, max_aspect;
    int base_width, base_height;
    int win_gravity;
    /* 将来的に拡張する可能性あり */
} XSizeHints;

//flags
#define USPosition      (1L<<0)
#define USSize          (1L<<1)
#define PPosition       (1L<<2)
#define PSize           (1L<<3)
#define PMinSize        (1L<<4)
#define PMaxSize        (1L<<5)
#define PResizeInc      (1L<<5)
#define PAspect         (1L<<6)
#define PBaseSize       (1L<<8)
#define PWinGravity     (1L<<9)
#define PAllHints       (PPosition|Psize|PMinSize|PMaxSize|PResizeInc|PAspect)
XSizeHints 構造体
x,y,width,height
※廃止
min_width,min_height
最小ウィンドウサイズ
max_width,max_height
最大ウィンドウサイズ
width_inc,height_inc
ウィンドウサイズの計算時に使用される段階的な値
min_aspect,max_aspect
ウィンドウサイズのアスペクト比の範囲
base_width,base_height
ウィンドウサイズ計算時の基本サイズ
win_gravity
フレームウィンドウの基準位置。
クライアントウィンドウへの位置変更が要求された時、この位置を基準にして、フレームウィンドウを移動する。
ウィンドウ属性の win_gravity と同じ値を指定する。
flags
フラグ。
PAllHints の使用は推奨されない。

USPosition, USSize は、Withdrawn 状態からの移行時、位置とサイズがユーザーによって指定されたことを示す。
PPosition, PSize は、位置とサイズがプログラムによって指定されたことを示す。
このフラグがある場合、ウィンドウマネージャによって位置やサイズが調整されず、現在の位置やサイズが使われるかもしれない。
XSizeHints *XAllocSizeHints(void);
ゼロクリアされた XSizeHints 構造体を確保する。

メモリが不十分な場合、XAllocSizeHints は NULL を返します。
この構造体に割り当てられたメモリを解放するには、XFree を使用します。

※XSizeHints のメンバ値は増える可能性があるため、この関数で確保してから使うこと。
void XSetWMNormalHints(Display *display, Window w, XSizeHints *hints);
WM_NORMAL_HINTS プロパティのサイズヒントを置き換えます。
このプロパティは、type = WM_SIZE_HINTS, format = 32 で保存されます。
Status XGetWMNormalHints(Display *display, Window w, XSizeHints *hints_return, long *supplied_return);
WM_NORMAL_HINTS プロパティに保存されているサイズヒントを返します。
プロパティのタイプが WM_SIZE_HINTS で、format が 32 で、古い (ICCCM 以前) または新しいサイズヒント構造体を含めるのに十分な長さの場合、XSizeHints 構造体のさまざまなフィールドを設定し、supplyed_return 引数をリストに設定します。
supplied_return
ユーザーが提供したヒントを返します。
正常に戻り、ICCCM 以前のサイズヒントプロパティが読み取られた場合、次のビットが含まれます。
(USPosition|USSize|PPosition|PSize|PMinSize|PMaxSize|PResizeInc|PAspect)

プロパティが BaseSize,WinGravity も含めるのに十分な大きさである場合、次のビットも含まれます。
PBaseSize|PWinGravity
戻り値
ユーザーが指定したフィールド (定義された値が含まれているかどうかに関係なく) を取得し、ゼロ以外のステータスを返します。それ以外の場合は、ゼロのステータスを返します。
void XSetWMSizeHints(Display *display, Window w, XSizeHints *hints, Atom property);
指定されたウィンドウ上の指定されたプロパティに、サイズヒントをセットする。
このプロパティは、WM_SIZE_HINTS のタイプおよび format = 32 で保存されます。
ウィンドウの通常のサイズのヒントを設定するには、XSetWMNormalHints 関数を使用できます。
Status XGetWMSizeHints(Display *display, Window w, XSizeHints *hints_return, long *supplied_return, Atom property);
指定プロパティからサイズヒントを取得
WM_CLASS
XClassHint *XAllocClassHint(void);

typedef struct {
    char *res_name;
    char *res_class;
} XClassHint;
XClassHint 構造体を確保する。確保時、ゼロクリアされている。

メモリが不十分な場合、NULL を返します。
この構造体に割り当てられたメモリを解放するには、XFree を使用します。

res_name メンバーには、アプリケーション名が含まれ、res_class メンバーには、アプリケーションクラス名が含まれます。
このプロパティに設定される名前は、WM_NAME として設定される名前と異なる場合があることに注意してください。
つまり、WM_NAME はタイトルバーに何を表示するかを指定するため、一時的な情報 (たとえば、現在エディタのバッファ内にあるファイルの名前) を含めることができます。
一方、WM_CLASS の一部として指定された名前は、アプリケーションのリソースを、リソースデータベースから取得するときに使用する、アプリケーションの正式名です。
XSetClassHint(Display *display, Window w, XClassHint *class_hints);
WM_CLASS プロパティをセットする。
文字列が Host Portable Character Encoding にない場合、結果は実装に依存します。
Status XGetClassHint(Display *display, Window w, XClassHint *class_hints_return);
WM_CLASS プロパティから値を取得する。

サーバーから返されたデータが Latin Portable Character Encoding である場合、返される文字列は Host Portable Character Encoding です。それ以外の場合、結果は実装に依存します。

res_name と res_class を解放するには、それぞれで個別に XFree を使用します。
戻り値
成功するとゼロ以外のステータスを返します。それ以外の場合は、ゼロのステータスを返します。
ほか
XSetTransientForHint(Display *display, Window w, Window prop_window);
WM_TRANSIENT_FOR プロパティをセット
Status XGetTransientForHint(Display *display, Window w, Window *prop_window_return);
指定されたウィンドウの WM_TRANSIENT_FOR プロパティを返します。
成功するとゼロ以外のステータスを返します。それ以外の場合は、ゼロのステータスを返します。
Status XSetWMProtocols(Display *display, Window w, Atom *protocols, int count);
指定されたウィンドウ上の WM_PROTOCOLS プロパティを、protocol 引数で指定されたアトムのリストに置き換えます。
プロパティは、ATOM タイプおよび format = 32 で保存されます。
WM_PROTOCOLS アトムが存在しない場合、0 を返します。それ以外の場合は、ゼロ以外を返します。
Status XGetWMProtocols(Display *display, Window w, Atom **protocols_return, int *count_return);
指定されたウィンドウの WM_PROTOCOLS プロパティに保存されているアトムのリストを返します。

これらのアトムは、このウィンドウの所有者が参加することを希望するウィンドウマネージャー・プロトコルを記述します。
プロパティが存在し、type = ATOM, format = 32 で、アトム WM_PROTOCOLS をインターンできる場合、値を返す。
protocols_return
確保されたアトムの配列のポインタが返る。XFree で解放する。
count_return
アトムの数が返る。
戻り値
成功時 0 以外。それ以外は値を設定せずに 0 を返す。
Status XSetWMColormapWindows(Display *display, Window w, Window *colormap_windows, int count);
WM_COLORMAP_WINDOWS プロパティを、colormap_windows 引数で指定されたウィンドウのリストに置き換えます。

このプロパティは、type = WINDOW, format = 32 で保存されます。
戻り値
WM_COLORMAP_WINDOWS アトムが存在しない場合、0 を返します。それ以外の場合は、0 以外を返します。
Status XGetWMColormapWindows(Display *display, Window w, Window **colormap_windows_return, int *count_return);
指定されたウィンドウの WM_COLORMAP_WINDOWS プロパティに格納されている、ウィンドウのリストを返します。

これらの識別子は、ウィンドウマネージャーがこのウィンドウにインストールする必要があるカラーマップを示します。
プロパティが存在し、type = WINDOW、format = 32 で、アトム WM_COLORMAP_WINDOWS をインターンできる場合、値を返します。
colormap_windows_return
確保されたウィンドウの配列のポインタを返す。XFree で解放する。
count_return
配列の数が返る
戻り値
成功時 0 以外。それ以外は、値を設定せずに 0 を返す。
XIconSize *XAllocIconSize(void);

typedef struct {
    int min_width, min_height;
    int max_width, max_height;
    int width_inc, height_inc;
} XIconSize;
XIconSize 構造体を確保する。ゼロクリアされる。
メモリが不十分な場合、XAllocIconSize は NULL を返します。
この構造体に割り当てられたメモリを解放するには、XFree を使用します。
XSetIconSizes(Display *display, Window w, XIconSize *size_list, int count);
WM_ICON_SIZE プロパティをセット
count
size_list の配列の数
Status XGetIconSizes(Display *display, Window w, XIconSize **size_list_return, int *count_return);
WM_ICON_SIZE プロパティを取得する。

ウィンドウマネージャーが、最も適切に認識するアイコンサイズを調べたい場合に使う。
次に、アプリケーションは XSetWMHints を使用して、サポートされているサイズのいずれかのアイコン Pixmap またはウィンドウをウィンドウマネージャーに提供する必要があります。
size_list_return
確保された XIconSize の配列のポインタが返る。XFree で解放する。
count_return
配列の数が返る
戻り値
ウィンドウマネージャーがアイコンサイズを設定していない場合、0 を返します。それ以外の場合は、ゼロ以外を返します。
void XmbSetWMProperties(Display *display, Window w, char *window_name, char *icon_name, char *argv[], int argc,
    XSizeHints *normal_hints, XWMHints *wm_hints, XClassHint *class_hints);
他のクライアント (特にウィンドウマネージャーおよびセッションマネージャー) との通信に使用される、重要なウィンドウプロパティを設定する。

マシンのホスト名は XSetWMClientMachine を使用して保存されます。

class_hints->res_name と argv、RESOURCE_NAME 環境変数、およびマシンのホスト名は、LC_CTYPE カテゴリ (POSIX 準拠システムでは LC_CTYPE、それ以外の場合は LANG 環境変数) のロケールのエンコーディングにあると想定されます。
対応する WM_CLASS、WM_COMMAND、WM_CLIENT_MACHINE プロパティは、ローカルホストのロケールアナウンサーに従って型指定されます。
プロパティに保存する前にエンコード変換は実行されません。

現在のロケールでプロパティテキストを処理する必要があるクライアントの場合、WM_LOCALE_NAME プロパティを、現在のロケールの名前に設定します。
名前はホストポータブル文字エンコーディングにあるとみなされ、プロパティに保存するために STRING に変換されます。
window_name
NULL 以外で、WM_NAME をセット (現在のロケールのエンコード)。
STRING エンコードに完全に変換できる場合、プロパティはタイプ "STRING" で作成されます。
それ以外の場合、"COMPOUND_TEXT" で作成されます。
icon_name
NULL 以外で、WM_ICON_NAME をセット (現在のロケールのエンコード)
argv,argc
argv が NULL 以外の場合、argv と argc から WM_COMMAND プロパティを設定します。
argc が 0 の場合は、長さ 0 のコマンドを示します。
normal_hints
NULL 以外で、WM_NORMAL_HINTS をセット
wm_hints
NULL 以外で、WM_HINTS をセット
class_hints
NULL 以外で、WM_CLASS をセット。
res_name メンバーが NULL に設定され、RESOURCE_NAME 環境変数が設定されている場合、環境変数の値が res_name に置き換えられます。
res_name メンバーが NULL で、環境変数が設定されておらず、argv と argv[0] が設定されている場合は、ディレクトリパスが取り除かれた argv[0] の値が、res_name にセットされます。
void XSetWMProperties(Display *display, Window w, XTextProperty *window_name, XTextProperty *icon_name,
    char **argv, int argc, XSizeHints *normal_hints, XWMHints *wm_hints, XClassHint *class_hints);
各プロパティをセット (XTextProperty)
XSetCommand(Display *display, Window w, char **argv, int argc);
アプリケーションの呼び出しに使用されるコマンドと引数を設定します。 (通常、argv はメインプログラムの argv 配列です)
文字列が Host Portable Character Encoding にない場合、結果は実装に依存します。
Status XGetCommand(Display *display, Window w, char ***argv_return, int *argc_return);
WM_COMMAND プロパティを読み取り、文字列リストを返します。

WM_COMMAND プロパティが存在する場合、その type = STRING で format = 8 です。
argv_return
確保された文字列リストのポインタが返る。XFreeStringList で解放する。
サーバーから返されたデータが Latin Portable Character Encoding である場合、返される文字列は Host Portable Character Encoding です。それ以外の場合、結果は実装に依存します。
argc_return
argc の値が返る。
戻り値
成功で 0 以外。それ以外は 0