我试图读取剪贴板上文件的路径(如果有的话)。
所以我注意到当复制事件发生时,人们正在从剪贴板中读取:
https://github.com/awesomeWM/awesome/blob/master/selection.c#L84 http://www.cyberforum.ru/cpp-linux/thread220845.html
我不需要等待复制活动,我只需要检查它是否空白或有什么东西。我不关心未来的事件。所以我试图找出在调用中传递给xcb_get_property_unchecked
的内容:
xcb_get_property_unchecked(connect, 0, event_notify->requestor, event_notify->property,utf8_string, 0, UINT32_MAX);
等待该事件的这些代码正在传递event_notify->requestor
和event_notify->property
我猜测event_notify->requestor
我应该像这样传递选择所有者:
xcb_get_selection_owner_cookie_t cookie_primary, cookie_clipboard;
cookie_primary = xcb_get_selection_owner(connect, PRIMARY);//XCB_ATOM_PRIMARY
cookie_clipboard = xcb_get_selection_owner(connect, CLIPBOARD);
xcb_get_selection_owner_reply_t *reply_primary = xcb_get_selection_owner_reply( connect, cookie_primary, NULL );
xcb_get_selection_owner_reply_t *reply_clipboard = xcb_get_selection_owner_reply( connect, cookie_clipboard, NULL );
xcb_window_t win_owner_primary = reply_primary->owner;
xcb_window_t win_owner_clipboard = reply_clipboard->owner;
所以我想通过它win_owner_primary
或win_owner_clipboard
。但是,我无法弄清楚要传递的内容为property
。我尝试了一项实验,将事件从root重定向到我的民意调查,看看property
的价值是什么,但我没有收到任何事件 - https://gist.github.com/Noitidart/9026d03b83a4cf493c1744e46884a139
有谁知道我应该为property
传递什么?那么property
在选择事件时的可能值是什么?
由于
答案 0 :(得分:1)
这实际上只是选择如何运作。您需要做的是要求服务器转换选择,然后服务器将为您提供此事件。 AFAIK没有“直接”的方式来查询它(但我从来没有真正使用过选择)。
wikipedia article上的编写得非常好:
特别是,目标客户端首先询问服务器哪个窗口拥有该选择。然后两个客户端通过服务器传输选择。此交换涉及窗口的属性以及附加到窗口的任意数据。如果选择的内容被认为足够小以便一次性转移,则发生的步骤是:
- 选择的收件人请求转换选择,指定窗口的属性(这可能是必须粘贴文本的窗口)
- 作为响应,服务器向选择的当前所有者发送SelectionRequest事件;
- 所有者通过发送ChangeProperty将所选文本放置在请求者指定的窗口的属性中;请求服务器
- 所有者向服务器发送请求,向请求者发送SelectionNotify以通知选择已被转移
- 请求者现在可以通过向服务器发送一个或多个GetProperty请求来读取窗口属性中的选择;
- 请求者破坏财产;如果所有者已要求通知此情况,则会向其发送PropertyNotify事件。
醇>