ウィンドウタイトルの取得
タイトルバー的なものをつけるときに表示する文字列(ウィンドウ名)を取得する方法。WindowsだとGetWindowText()で一発だけど、Xの場合そうはいかない。
- ウィンドウ名はウィンドウに関連付けられたプロパティ(型と名前を持つデータ)となっている
- 2つある
- WM_NAME:
- _NET_WM_NAME: freedesktop.orgのEWMH由来。UTF8文字列。両方ある場合はこちらを優先すべき
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'; }