【问题标题】:How is XGetWindowProperty() and XListProperties() related for a particular window-IDXGetWindowProperty() 和 XListProperties() 如何与特定窗口 ID 相关
【发布时间】:2013-08-29 20:30:53
【问题描述】:

“PropertyNotify”事件由 xServer 为 id 为“win”的窗口生成。现在我调用 xlib 函数 XGetWindowProperty()XListProperties() 以获得相同的 win-id,如下所示

    int getProp(Atom atom, Window win, unsigned long *nitems_ret, 
                unsigned char **prop_return, Atom *type_ret, int *format_ret)
    {
        Atom type;
        int format;
        unsigned long bytes_after_ret;

        if (!type_ret)
            type_ret=&type;

        if (!format_ret)
            format_ret=&format;


        XGetWindowProperty(m_display, win, atom, 0, 65536, 0, 
                           AnyPropertyType, type_ret, format_ret, 
                           nitems_ret, &bytes_after_ret, prop_return);

          // printing the content of variable "prop_return" suppose it's not empty 
                                                               -----------------(1)

       int nprops = 0;
       Atom *prorList = XListProperties(m_display, win, &nprops);

         // printing content of var "prorList"  ------------------------(2)

   };

现在比较 (1) 和 (2) 的输出,那么 (1) 的输出是否应该包含在 (2) 中。请给出验证答案的理由。正如我从网上了解到的那样,关于XGetWindowProperty(),它从给定的 window-id 和其他补充的属性中返回所需的属性类型。在这里检查我只是传递参数AnyPropertyType

现在我还调用函数XListProperties() 列出给定win-id 的所有Atom 属性并打印它们以与XGetWindowProperty() 的输出进行比较(考虑输出不是NULL)但我发现那里与他们不匹配。现在我的问题是这些属性从哪里出现在XGetWindowProperty() 中,或者错误在于我的理解。请解释这些功能和它们的原子属性的区别。如果有人可以推荐好的 xlib 书籍或链接到网站以更好地理解,那将非常有帮助。

谢谢,

【问题讨论】:

    标签: x11 xlib xserver


    【解决方案1】:

    XListProperties 列出属性名称prop_return 是一个属性。没有理由将它包含在属性名称列表中。 atom 是该属性的名称,应该可以在该列表中找到。

    【讨论】:

    • 你说的是对的,但我的后续问题是为什么 prop_list(property) 和 prop_return 都是 Atom 类型。就像从这个 [链接](standards.freedesktop.org/wm-spec/1.3/ar01s05.html#id3076744) 我发现对于属性名称 _NET_WM_ALLOWED_ACTIONS 属性值是“_NET_WM_ACTION_RESIZE”、“_NET_WM_ACTION_MINIMIZE”等。那么如何区分它们,因为'XInternAtom();'接受第二个参数,即原子。除了这个还有一个问题:- xwindow manager 是否可以让一个窗口重新调整大小,如果它没有属性,如果它是 '!=_NET_WM_ACTION_RESIZE' 就像...
    • xwindow 管理器是否可以允许窗口重新调整大小,如果它没有特定的属性“_NET_WM_ACTION_RESIZE”,可能是其他属性也允许窗口重新调整大小,因为我得到了一个可调整大小但没有属性值 _NET_WM_ACTION_RESIZE 的窗口。当函数 XChangeProperty() 被调用时,你能通过一些了解吗?拜托,我恳切地请求花一些时间来消除我的疑问。这将是真正的赞赏和鼓励。并感谢您的回复。如果您找不到时间回答,请提供一些好的参考阅读。
    • 有一个名为_NET_WM_ALLOWED_ACTIONS的属性。它的值类型是一个原子列表。 (令人困惑,因为属性列表也是原子列表)。可能包含在该列表中的原子是 _NET_WM_ACTION_RESIZE 等。并非所有属性都是这样,有些是字符串值,有些是像素图值等,但这个是原子列表值我>。我不完全理解你区分这些原子的意思。 WM 可以忽略_NET_WM_ALLOWED_ACTIONS(从技术上讲,没有什么可以迫使 WM 遵守此约定),但通常不会这样做。
    • 运行xprop | grep _NET_WM_ALLOWED_ACTIONS 并单击您的窗口。它是否打印_NET_WM_ACTION_RESIZE
    • 感谢您的回答。但是,我仍然对从 'xprop | 开始有一些疑问。 grep _NET_WM_ALLOWED_ACTIONS' 没有工作任何窗口(我检查了很多)所以只是检查了许多窗口的'xprop',然后我没有得到属性名称'_NET_WM_ALLOWED_ACTIONS',尽管我得到了其他属性名称和它的值。你能告诉我我做错了什么或者某事不见了。 [关于“区分”我问的是因为当我在 XInternAtom() 的参数中使用属性名称或值时;它返回数字值。]。
    猜你喜欢
    • 2016-12-21
    • 2019-05-04
    • 2013-09-06
    • 2021-04-08
    • 2018-09-27
    • 2012-07-12
    • 1970-01-01
    • 2011-12-20
    • 1970-01-01
    相关资源
    最近更新 更多