1

Gtk::Box に配置されている Gtk::Socket 内に gvim を埋め込んでいます。埋め込まれた gvim ウィンドウにフォーカスを当てて、埋め込まれたウィンドウを実際にポイントしてクリックするのと同じことを達成するにはどうすればよいですか?

Gtk::Socket ウィジェットで使用->grab_focus()しても効果はありません。

XEMBED 仕様 ( http://standards.freedesktop.org/xembed-spec/xembed-spec-latest.html#idm139742761059984 ) によると、エンベダー (Gtk::Socket) は aXEMBED_FOCUS_INまたはXEMBED_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

これを実現するには 2 つの方法があります。1 つは、 https ://bugzilla.gnome.org/show_bug.cgi?id=729248 で提供されているパッチを使用するgtk_socket_focus_forward ()方法GtkSocketです。これを呼び出すと、Gtk::Plugウィンドウ内の最初のウィジェットがフォーカスされます。

使用例は、標準の例から適用された例gtk_socket_focus_forwardfocus_forward ブランチにあります。

これを実現する2 つ目の方法は、メーリング リスト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 に答える