⇤ ← 2012-08-18 02:56:29時点のリビジョン1
サイズ: 1335
コメント:
|
← 2012-08-18 13:46:38時点のリビジョン2 ⇥
サイズ: 1436
コメント:
|
削除された箇所はこのように表示されます。 | 追加された箇所はこのように表示されます。 |
行 1: | 行 1: |
#acl clear:admin,read,write,delete,revert Known: All: | |
行 4: | 行 3: |
* ウィンドウ名はウィンドウに関連付けられたプロパティ(型と名前を持つデータ)となっている * 2つある * WM_NAME: * _NET_WM_NAME: freedesktop.orgのEWMH由来。UTF8文字列。両方ある場合はこちらを優先すべき |
* ウィンドウ名はウィンドウに関連付けられたプロパティ(型と名前を持つデータ)となっている。`XGetTextProperty()`で取得 * 単純な`char *`で出てくるわけじゃないので取り出す必要がある * WM_NAMEと_NET_WM_NAMEの2つある。_NET_WM_NAMEはUTF-8文字列。両方設定されている場合は_NET_WM_NAMEの方を優先すべき(こっちの方が新しい) |
行 32: | 行 30: |
title[size - 1] = '\0'; | |
行 33: | 行 32: |
title[size - 1] = '\0'; |
ウィンドウタイトルの取得
タイトルバー的なものをつけるときに表示する文字列(ウィンドウ名)を取得する方法。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'; } }