我在Gtk :: Socket中嵌入了gvim,它放在Gtk :: Box中,如何将焦点集中到嵌入式gvim窗口,以便实现与实际指向并单击嵌入窗口相同的效果?
在Gtk :: Socket小部件上使用->grab_focus()
没有任何效果。
根据XEMBED规范(http://standards.freedesktop.org/xembed-spec/xembed-spec-latest.html#idm139742761059984),似乎嵌入器(Gtk :: Socket)应向孩子发送XEMBED_FOCUS_IN
或XEMBED_WINDOW_ACTIVATE
信号,但确实如此在Gtk :: Socket中似乎不是一个接口。
我可以在此处找到基于Gtk::Plug and Gtk::Socket example尝试执行的操作的简单示例:https://github.com/gauteh/plug-socket-grab-focus。
如果这是一个错误,已在此处报告:https://bugzilla.gnome.org/show_bug.cgi?id=729248
答案 0 :(得分:0)
现在有两种方法可以实现此目的,一种方法是使用以下提供的修补程序:https://bugzilla.gnome.org/show_bug.cgi?id=729248,为gtk_socket_focus_forward ()
添加GtkSocket
方法。调用此方法会将第一个小部件集中在Gtk::Plug
窗口中。
使用gtk_socket_focus_forward
的示例可以在focus_forward branch改编的示例的standard example中找到。
第二种实现此目的的方法是按the mailing list所述发送Gtk::DIR_TAB_FORWARD
信号,类似的示例可以在tab_forward分支中找到。
这涉及以下内容:
socket->set_can_focus (true);
socket->child_focus (Gtk::DIR_TAB_FORWARD);
该方法与gtk_socket_focus_forward
的方法略有不同,但似乎可以解决问题。