【发布时间】:2020-04-21 22:11:53
【问题描述】:
我昨天刚开始学习 X11,我很难找到有关它的信息。
我希望能够检索 X11 窗口的 UTF-8 标题 _NET_WM_NAME。问题是您应该使用长度参数调用它。我目前的解决方案包括首先使用带有 0 长度参数的 XGetWindowProperty 检索字符串的长度,然后使用 bytes_after_return 信息再次调用 XGetWindowProperty length。
问题在于这涉及到两次分配和释放。我不是一个超级高级的程序员,但这可能不太好,对吧?虽然在实践中,为获取窗口标题之类的小而罕见的事情进行两次分配可能不会产生太大影响,但我到处听到仍然应该避免不必要的分配和释放。
这是我的代码:
Atom actualType;
int actualFormat;
unsigned long nItems;
unsigned long bytesAfter;
unsigned char* prop;
XGetWindowProperty(
display,
window,
_NET_WM_NAME,
0UL,
0UL,
False,
UTF8_STRING,
&actualType,
&actualFormat,
&nItems,
&bytesAfter,
&prop
);
XFree(prop);
XGetWindowProperty(
display,
window,
_NET_WM_NAME,
0UL,
(bytesAfter + 3UL) / 4UL, // Divide by four and round up
False,
UTF8_STRING,
&actualType,
&actualFormat,
&nItems,
&bytesAfter,
&prop
);
printf("title: %s", prop);
XFree(prop);
有没有更好的方法来做到这一点?
另一种解决方案是在每次设置标题时存储标题,但我不确定保存的标题和实际标题是否可能去同步。
谢谢大家
【问题讨论】: