Как отправить события нажатия клавиш в неактивную запись с помощью 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
удалил текст в записи при ее вызове.
Я также по-разному обработал "Возврат" и "Побег", это тоже может вам пригодиться.