【问题标题】:find out which gtk widget has the current selection找出当前选择的 gtk 小部件
【发布时间】:2012-05-09 13:35:58
【问题描述】:

我有一组GtkEntry 小部件,其中一些是可编辑和可聚焦的,而有些则不是。我想找出其中哪些(如果有的话)当前选择了文本,以实现 Edit->Copy 菜单项。除了遍历所有小部件直到 gtk_editable_get_selection_bounds 返回 true 之外,还有什么方法可以做到这一点?

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

【问题讨论】:

  • 不幸的是,当小部件声明选择时似乎没有信号,但您可以为每个条目使用相同的“selection-get”信号处理程序,然后伪造选择转换,因此您会被要求输入带有选择的条目(如果有)。
  • ergosys:你所说的伪造选择转换是什么意思?
  • 请求选择转换,但实际上并不打算接收数据。 IE。调用 gtk_selection_convert(),但没有(或者可能是存根)“选择接收”信号处理程序。
  • gtk_selection_convert() 仍然需要我指定要接收的选择,这会导致与 gtk_clipboard_get() 相同的问题。据我所知,没有相当于 GDK_SELECTION_PRIMARY 的 windows - 我不确定 windows 本身是否不允许您看到何时选择了某些内容但未复制到剪贴板,或者 gtk 是否只是不公开x 之外的功能。

标签: gtk selection gtkentry


【解决方案1】:

你试过gtk_window_get_focus ()吗?用户经常与条目交互,因此它可能对您有用。文档说它“在窗口中检索当前聚焦的小部件”。你可以自己看here。然后,比较检索到的小部件是否是您的条目之一。

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

【讨论】:

  • g_signal_emit_by_name(entry, "copy-clipboard", NULL) 也适用于复制。
  • 这是我尝试的第一件事,但它不起作用,因为焦点条目不一定是带有文本选择的条目
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-26
  • 1970-01-01
  • 1970-01-01
  • 2015-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多