【发布时间】:2015-07-02 14:48:28
【问题描述】:
我在阅读某些 XWindow ICCCM 属性时遇到问题。
问题实际上是当我尝试读取 _NET_WM_STATUS 属性时。 我正在使用的功能是:
int get_property_value(Display* display, Window window,char *propname, long max_length,
unsigned long *nitems_return, unsigned char **prop_return){
int result;
Atom property;
Atom actual_type_return;
int actual_format_return;
unsigned long bytes_after_return;
unsigned char* prop_to_return;
unsigned long n_items;
printf("-----GET_PROPERTY_VALUE-------\n");
printf("\tPropname: %s\n", propname);
property = XInternAtom(display, propname, True);
if(property==None){
printf("\tWrong Atom\n");
return;
}
result = XGetWindowProperty(display, window, property, 0, /* long_offset */
(~0L), /* long_length */
False, /* delete */
AnyPropertyType, /* req_type */
&actual_type_return,
&actual_format_return,
&n_items, &bytes_after_return, &prop_to_return);
if (result != Success){
printf("\tXGetWindowProperty failed\n");
return (-1);
} else {
printf("\tActual Type: %s\n", XGetAtomName(display,property));
printf("\tProperty format: %d\n", actual_format_return);
//printf("Actual property return: %s\n", XGetAtomName(display,actual_type_return));
printf("\tByte after return: %ld\n", bytes_after_return);
printf("\tnitems return: %d\n", n_items);
printf("\tprop return: %s\n", prop_to_return);
}
printf("-----END OF GET_PROPERTY_VALUE-------\n");
return (0);
}
get_property_value 函数在收到 ClientMessage 后调用,这是处理事件的一段代码:
case ClientMessage:
printf("ClientMessage\n");
printf("Message: %s\n", XGetAtomName(display,local_event.xclient.message_type));
unsigned long nitems_return;
unsigned char *prop_return;
get_property_value(display, local_event.xclient.window, XGetAtomName(display,local_event.xclient.message_type), 256, &nitems_return, (unsigned char **)&prop_return);
break;
但是当我读取属性时,有时我会得到一个没有值的属性,这可能吗? 问题主要是当我尝试在 ClientMessage 事件中读取从 firefox 发送的 AtomProperties(我正在尝试读取 _NET_WM_STATE 值)时。
从输出中可以看出,属性名称已正确读取,但似乎它不包含任何项目。
ClientMessage
Message: _NET_WM_STATE
-----GET_PROPERTY_VALUE-------
Propname: _NET_WM_STATE
Actual Type: _NET_WM_STATE
Property format: 0
Byte after return: 0
nitems return: 0
prop return: (null)
-----END OF GET_PROPERTY_VALUE-------
【问题讨论】:
-
有什么想法吗?我真的被这个问题困住了,我找不到任何有用的文档,这似乎只发生在 firefox 上。
-
我认为你不会轻易克服这一点。 Firefox 不像普通应用程序那样使用窗口系统。您可能应该拆分问题,因为“取消隐藏 firefox 菜单”是与原始问题不同的问题(通过 IMO 方式,您将获得更多可见性)。
-
谢谢丹尼尔!我会听从您的建议,并为 firefox 相关问题创建一个单独的问题。