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

#gtk3 #gtk-rs

#gtk3 #gtk-rs

Вопрос:

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

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

Спасибо!

Комментарии:

1. Не могли бы вы опубликовать MCVE? Я не знаю, как ваше приложение использует ListBox.

Ответ №1:

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

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

Ответ №2:

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

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

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

Я также по-разному обработал «Return» и «Escape», возможно, это тоже окажется полезным.