== ウィンドウタイトルの取得 == タイトルバー的なものをつけるときに表示する文字列(ウィンドウ名)を取得する方法。Windowsだと`GetWindowText()`で一発だけど、Xの場合そうはいかない。 * ウィンドウ名はウィンドウに関連付けられたプロパティ(型と名前を持つデータ)となっている。`XGetTextProperty()`で取得 * 単純な`char *`で出てくるわけじゃないので取り出す必要がある * WM_NAMEと_NET_WM_NAMEの2つある。_NET_WM_NAMEはUTF-8文字列。両方設定されている場合は_NET_WM_NAMEの方を優先すべき(こっちの方が新しい) {{{ void get_window_title(Window w, char *title, int size) { XTextProperty prop; /* try to get _NET_WM_NAME */ XGetTextProperty(dpy, w, &prop, net_wm_name); if (prop.nitems == 0) { /* fall back to WM_NAME */ XGetWMName(dpy, w, &prop); } title[0] = '\0'; if (prop.nitems > 0 && prop.value) { if (prop.encoding == XA_STRING) { strncpy(title, (char *)prop.value, size - 1); } else { char **l = NULL; int count; XmbTextPropertyToTextList(dpy, &prop, &l, &count); if (count > 0 && *l) strncpy(title, *l, size - 1); XFreeStringList(l); } title[size - 1] = '\0'; } } }}}