找出哪个gtk小部件具有当前选择

找出哪个gtk小部件具有当前选择,gtk,selection,gtkentry,Gtk,Selection,Gtkentry,我有一个GtkEntry小部件的集合,其中一些是可编辑和可聚焦的,而另一些则不是。为了实现编辑->复制菜单项,我想找出其中哪一个(如果有的话)当前选择了文本。除了迭代所有小部件直到gtk\u editable\u get\u selection\u bounds返回true之外,还有其他方法可以做到这一点吗 我目前正在通过调用gtk_clipboard_get(GDK_SELECTION_PRIMARY)来回避这个问题,但是根据文档的说法,这是不可移植的(而且也会在当前显示的任何位置,而不仅仅是

我有一个
GtkEntry
小部件的集合,其中一些是可编辑和可聚焦的,而另一些则不是。为了实现编辑->复制菜单项,我想找出其中哪一个(如果有的话)当前选择了文本。除了迭代所有小部件直到
gtk\u editable\u get\u selection\u bounds
返回true之外,还有其他方法可以做到这一点吗


我目前正在通过调用
gtk_clipboard_get(GDK_SELECTION_PRIMARY)
来回避这个问题,但是根据文档的说法,这是不可移植的(而且也会在当前显示的任何位置,而不仅仅是在我的应用程序中选择文本)。

您尝试过
gtk_window_get_focus()
?用户经常与条目交互,因此它可能适合您。文档中说它“检索窗口中当前关注的小部件”。您可以自己查看它。然后,比较检索到的小部件是否是您的条目之一


一旦您获得了焦点条目,也许您希望使用它获取文本,但是,它将获得条目中的所有文本。如果这不符合您的目的,解决方案可能是使用以下方法:将当前选定内容的内容复制到“可编辑”(当然,将条目强制转换为“可编辑”)并将其放在剪贴板上。然后,如果适用,请粘贴使用复制的内容

g\u signal\u emit\u by\u name(条目“copy clipboard”,NULL)
也可以用于复制。这是我尝试的第一件事,但它不起作用,因为聚焦条目不一定是带有文本选择的条目不幸的是,当小部件声明选择时似乎没有信号,但您可以使用相同的条目“selection get”信号处理程序处理每个条目,然后伪造一个选择转换,这样就可以调用带有选择(如果有的话)的条目。ergosys:伪造选择转换是什么意思?请求选择转换而不实际打算接收数据。例如,调用gtk_selection_convert(),但没有(或可能有存根)selection received“signal handler.gtk_selection_convert()仍然需要我指定要接收的选择,这导致了与gtk_clipboard_get()相同的问题.据我所知,没有与GDK_SELECTION_PRIMARY相当的windows—我不确定windows本身是否不让您看到什么东西被选中但没有复制到剪贴板,或者gtk只是没有在x之外公开该功能。