Gtk 剪贴板所有者更改事件:检测更改者是否是我

Gtk 剪贴板所有者更改事件:检测更改者是否是我

在 Python 3 应用程序中,可以很容易地在 Gtk 3 中设置普通 ctrl-C ctrl-V 剪贴板的内容,例如

clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
clipboard.set_text("It worked!, -1)

使用剪贴板对象的信号还可以轻松监视剪贴板的变化owner-change

但是,owner-change如果我的应用程序剪贴板的内容,我不知道怎么做。信号owner-change传递一个owner指向的参数Gdk.Window,但我从未在我的应用程序中明确创建窗口;我假设 Gtk 悄悄地为我创建了一个窗口,因为需要有一些 X 窗口来拥有剪贴板的内容。当剪贴板所有者更改时,我可以使用以下方法获取该 X 窗口的 ID:

def clipboardChanged(clipboard, owner_change):
    print("New owner is", owner_change.owner.get_xid())

clipboard.connect('owner-change', clipboardChanged)

这个新所有者窗口显然属于我的应用程序,但我如何提前找到它的 xid?也就是说:我如何从信号中判断owner-change新所有者是

(注意:如果我设置剪贴板的内容两次,我会收到两个owner-change信号,并且每次都是,所以这是不可靠的:特别是,owner_change.reason也会为“同一个所有者再次设置”发送,而不仅仅是“NEW_OWNERNEW_OWNER不同的所有者现在拥有剪贴板”。)

相关内容