Я пытаюсь изменить популярную программу Waybar (которую можно найти здесь). Waybar - это очень настраиваемая строка состояния, которая организует различные визуальные элементы в «модули», которые могут реагировать на определенную форму взаимодействия, такие как события Mouseover и нажимают (или нажимать кнопку, как, по -видимому, GTK, по -видимому, ссылается на них). Я хочу расширить функциональность, чтобы позволить модулям реагировать на нажатия клавиш. Waybar допускает группы модулей, называемых «ящиками», которые отображают только первый модуль в ящике на стержне до тех пор, пока не появятся. Это позволяет скрывать модули, которые вам не нужны / хотите, чтобы постоянно отображались в баре. Мне бы хотелось, если бы я мог расширить ящики на клавишах вместо того, чтобы привести их в мысли, чтобы увидеть их содержимое. Это не важно для моего вопроса, но я все равно добавляю его здесь для дополнительного контекста. В частности, я считаю, что это две строки в конкретных. < /P>
Код: Выделить всё
event_box_.signal_enter_notify_event().connect(sigc::mem_fun(*this, &AModule::handleMouseEnter));
event_box_.signal_leave_notify_event().connect(sigc::mem_fun(*this, &AModule::handleMouseLeave));
From the naming scheme of these signal methods, I found signal_key_press_event() and signal_key_release_event() which seemed to do exactly what I wanted, so I wrote my own rudimentary key press handlers (that just print to the console upon being triggered) and tried adding these lines
Код: Выделить всё
event_box_.signal_key_press_event().connect(sigc::mem_fun(*this, &AModule::handleKeyPress),false);
event_box_.signal_key_release_event().connect(sigc::mem_fun(*this, &AModule::handleKeyRelease),false);
< /code>
И ничего не происходит. Мой язык Sear утверждает, что окно GDK ::, связанное с виджетом, необходимо включить GDK :: key_press_mask для получения события, а в некоторых других местах в файле я вижу Event_box_.add_events (gdk :: some_mask_here)
, так что я пытаюсь добавить event_.add_events (gdk :: key_press) Ничего. Затем я вижу, что, по -видимому, сфокусированные виджеты должны быть нанесены на карту (что я не понимаю, что это такое), и когда я пытаюсь составить карту event_box, это просто выплевывает много ошибок после запуска исполняемого файла. Я немного прочитал о модели перехвата событий GTK 4 и видел некоторые рекомендации по использованию «EventController», но я все еще недостаточно понимаю, чтобы знать, что именно нужно сделать. Я боюсь, что это очень общий вопрос, но у кого -нибудь есть какие -либо советы о том, как именно event_box может получить событие нажатия клавиши?
Подробнее здесь:
https://stackoverflow.com/questions/797 ... erstanding