Я предполагаю, что вы управляете обоими окнами, и это на системе X11, такой как Linux.Если нет, то это намного сложнее.Я делал подобные вещи в одном приложении, и вот некоторые воспоминания.
Вы, наверное, поняли, что не можете просто использовать gtk_widget_grab_focus () .Это работает только для определения того, какой виджет в окне имеет фокус, когда само окно имеет фокус.
Это X11 определяет, какое окно получает событие клавиатуры, основываясь на иерархии окон, информации из оконного менеджера и т. Д.Тем не менее, вы можете поэкспериментировать с этим через GDK, чтобы получить желаемый результат.
Вам нужно будет узнать о распространении события GDK и, возможно, прочитать некоторые из источников GDK.Но я считаю, что, как правило, вам нужно сделать следующее:
- Используйте gdk_event_handler_set () для установки вашего собственного обработчика событий.Вам нужно будет сделать это после инициализации GTK + и связать с gtk_main_do_event ().
- Когда вы получите событие клавиатуры (GdkEventKey), посмотрите на структуру событий X.Если у него есть XID для окна A, замените его XID для окна B и передайте его GTK +.Вам может потребоваться продублировать событие и не изменять исходное.
Если окна принадлежат разным приложениям, вы можете посмотреть на gdk_event_send_client_message (), но я никогда не использовал его.