使用 Gtk2Hs,我想设置一个回调来监听剪贴板的“所有者更改”事件。
我可以通过以下查询了解 X 服务器是否支持此功能:
display <- fmap fromJust displayGetDefault
canBeNotified <- displayRequestSelectionNotification display selectionPrimary
在 C中这样做应该是直截了当的:
GtkClipboard* clipboard = gtk_clipboard_get(GDK_SELECTION_PRIMARY);
g_signal_connect(clipboard, "owner-change",
G_CALLBACK(handle_owner_change), NULL);
我看到 Gtk2Hs 中的回调是这样设置的:
<widget> `on` <event> $ <action>
问题
我找不到任何
OwnerChangeEvent
. Graphics.UI.Gtk.Gdk.EventM仅提供类型函数EventM
来查询所有者更改事件。on
System.Glib.Signals需要一个关联的小部件接受任何对象和与该对象关联的事件 (on :: object -> Signal object callback -> callback -> IO (ConnectId object
)。如果我对 X 的理解正确,则不需要有一个窗口来监听此事件。
要么我误解了如何将它包装在一起,要么我已经达到了 Gtk2Hs 中尚未实现的 gtk 部分。
因此,我查看了它的定义,keyPressEvent
如下所示:
keyPressEvent :: WidgetClass self => Signal self (EventM EKey Bool)
keyPressEvent = Signal (eventM "key_press_event" [KeyPressMask])
ownerChangeEvent
所以,我通过在 gtk like 中简单地添加一个定义来进行测试keyPressEvent
,但替换"key_press_event"
为"owner_change_event"
.
这不起作用,因为我收到关于找不到事件的运行时错误。自然。
如果可能的话,关于如何在 gtk 中正确监听“所有者更改”事件的任何想法?