抓住焦点到Gtk :: Socket内的嵌入式窗口

时间:2014-04-30 09:02:07

标签: gtk gtk3 gtkmm xembed

我在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_INXEMBED_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

1 个答案:

答案 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的方法略有不同,但似乎可以解决问题。