[Others] deepin 的剪切板管理器在 剪切板所有权变更时 请求数据 机制存在BUG
Tofloor
default avatar
小钱钱
deepin
2025-03-29 03:16
Author

基本流程

  1. 获取剪切板所有权 成功 例如使用 xcb_set_selection_owner_checked
  2. 立即收到 剪切版管理器请求当前剪切板 ATOM(285) 对应 UTF_STRING 对应文本相关的数据
  3. 在返回数据的过程中 如果数据很小正常工作, 但是当数据量很大 使用 INCR 机制交换数据时 deepin
    例如 使用下面的代码告知 剪切版管理器 使用INCR机制交换数据
  4. xcb_change_property_checked(connection_, XCB_PROP_MODE_REPLACE, requestor, property, incr_atom_, 32,1, &byte_count)

其中 requestor 在我的电脑上是 4194305 , property 即返回数据放置的位置是 480

后续正常使用 xcb_send_event_checked 发送 SelectionNotify 告知剪切板管理器本次请求返回信息发送完毕。

然后 剪切版管理器就不在请求后续的 ATOM(285) 的数据, 。。。。 直到剪切板所有权变更为其他程序, 当前程序收到XCB_SELECTION_CLEAR

清空剪切板的数据之后 再次收到 后续ATOM(285) 的数据请求, 但是数据应被清空。

疑问:

  1. 为什么 INCR 之后不再接受后续的数据
  2. 为什么 INCR 后续数据的接收发生在 XCB_SELECTION_CLEAR 之后, 而不是它之前
Reply Favorite View the author
All Replies

No replies yet