ログイン
編集不可のページディスカッション情報添付ファイル
"clear/wm_devel/2012-08-18"の差分

MMA
1と2のリビジョン間の差分
2012-08-18 02:56:29時点のリビジョン1
サイズ: 1335
編集者: clear
コメント:
2012-08-18 13:46:38時点のリビジョン2
サイズ: 1436
編集者: clear
コメント:
削除された箇所はこのように表示されます。 追加された箇所はこのように表示されます。
行 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';
    }
}

clear/wm_devel/2012-08-18 (最終更新日時 2012-08-18 13:46:38 更新者 clear)