Как отправить события нажатия клавиш в неактивную запись с помощью GTK

У меня есть окно GTK с двумя элементами: Entry, который функционирует как вход для поиска, и ListBox, который отображает результаты поиска. Когда ListBox имеет фокус (например, пользователь перемещается по нему с помощью клавиш со стрелками), я хотел бы направлять любые нажатия клавиш, которые они делают, на входную запись поиска вместо ListBox.

Я был бы признателен за любые указания по перенаправлению цели определенных событий GTK или любой другой способ справиться с этой ситуацией. Я использую gtk-rs, но я думаю, что GTK-решения на любом языке будет достаточно для меня.

Спасибо!

1 ответ

Ооо, это сложно. Вы можете повозиться с маской события виджетов и добавить обработчики событий в виджет, см. https://developer.gnome.org/gtk3/stable/GtkWidget.html

Пользовательские обработчики событий могут быть крутой кривой обучения.

Это именно то, что я здесь делаю: https://github.com/jimmykarily/fuzzygui/blob/7ddb72ad712e7afa5bfcb2d06b435b74caeb8140/main.go#L88

(на самом деле весь графический интерфейс - это именно то, что вы описываете, я бы не удивился, если бы вы действительно пытались реализовать тот же инструмент:D).

Все, что вам нужно сделать, это подключиться к событию в главном окне и убедиться, что вы "сфокусировались" на элементе, который должен обрабатывать это событие. Если это клавиша со стрелкой, вы фокусируетесь на списке. Если это что-то еще, вы сосредотачиваетесь на записи. я использовал GrabFocusWithoutSelecting для входа, потому что GrabFocus удалил текст в записи при ее вызове.

Я также по-разному обработал "Возврат" и "Побег", это тоже может вам пригодиться.

Другие вопросы по тегам