1

我已将 gvim 嵌入到 Gtk::Socket 中,该 Gtk::Socket 位于 Gtk::Box 中,如何将焦点放在嵌入的 gvim 窗口中,以便实现与在嵌入窗口中实际指向和单击相同的效果?

在 Gtk::Socket 小部件上使用->grab_focus()没有任何效果。

根据 XEMBED 规范(http://standards.freedesktop.org/xembed-spec/xembed-spec-latest.html#idm139742761059984),嵌入器(Gtk::Socket)似乎应该XEMBED_FOCUS_INXEMBED_WINDOW_ACTIVATE孩子,但在 Gtk::Socket 中似乎没有这个接口。

可以在这里找到基于Gtk::Plug 和 Gtk::Socket 示例的我正在尝试做的一个简单示例: https ://github.com/gauteh/plug-socket-grab-focus 。

如果这是一个错误,已在此处报告:https ://bugzilla.gnome.org/show_bug.cgi?id=729248

4

1 回答 1

0

现在有两种方法可以实现这一点,一种是使用以下提供的补丁:https ://bugzilla.gnome.org/show_bug.cgi?id= 729248 添加一个gtk_socket_focus_forward ()方法到GtkSocket. 调用它会将第一个小部件聚焦在窗口内Gtk::Plug

使用示例gtk_socket_focus_forward可以在从标准示例改编的示例的focus_forward 分支中找到。

实现此目的的第二种方法是按照邮件列表Gtk::DIR_TAB_FORWARD中的描述发送信号,可以在tab_forward分支中找到类似的示例。

这涉及以下内容:

socket->set_can_focus (true);
socket->child_focus (Gtk::DIR_TAB_FORWARD);

该方法确实与 可能的方法略有gtk_socket_focus_forward不同,但似乎可以解决问题。

于 2014-09-01T14:03:06.067 回答