Возьмите фокус на встроенное окно внутри Gtk::Socket
Я встроил gvim в Gtk::Socket, который помещен в Gtk::Box, как я могу захватить фокус на встроенном окне gvim, чтобы добиться того же, что и указывать и щелкать во встроенном окне?
С помощью ->grab_focus()
на виджет Gtk::Socket не оказывает никакого влияния.
Согласно спецификации XEMBED ( http://standards.freedesktop.org/xembed-spec/xembed-spec-latest.html) кажется, что устройство для встраивания (Gtk::Socket) должно отправить либо XEMBED_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
1 ответ
Теперь есть два способа добиться этого, один из них - использовать патч, как указано в: 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
, но, кажется, делает свое дело.