...
XSetSelectionOwner
till OnSelectionClear
XConvertSelection
while SelectionNotify
XChangeProperty target/anyproperty
XSetSelectionOwner
while OnSelectionRequest target
XSendEvent target
while OnSelectionRequest anyproperty
XSendEvent anyproperty
最终window XGetWindowProperty from ClipBoardManager
在收到SelectionClear事件时,将所以复制的内容都XConvertSelection到自己这个窗口上,包括TARGET和所有类型的内容,并且可以取出来想到的类型数据保存,再通过XSetSelectionOwner将当前窗口重新设置为owner。在收到SelectionRequest事件时,按需要返回TARGET类型和对应类型的内容。在收到SelectionClear事件时,将所以复制的内容都XConvertSelection到自己这个窗口上,包括TARGETS
和所有类型的内容,并且可以取出来想到的类型数据保存,再通过XSetSelectionOwner将当前窗口重新设置为owner。在收到SelectionRequest事件时,按需要返回TARGET类型和对应类型的内容。
即可以实现,实时获取剪贴板数据和更新自定义数据到剪贴板,具体在我们的实现中就是将复制的内容传给Android,并且在Android复制后,将内容写进UTF8_STRING属性,清除其他属性,实现Android和Linux的剪贴板同步。
现在还只实现了在Xserver内的所有类型复制,Xserver和Android的剪贴板只实现了文本同步,实际上文件复制同步只是对不同类型的复制内容的处理实现罢了。