myst
написал 30 октября 2006 года в 20:54 (895 просмотров)
Ведет себя
как Череп; открыл 50 тем в форуме, оставил 2987 комментариев на сайте.
Постановка задачи: есть IrRC. Нужно сделать так, чтобы события, получаемые с него, попадали в GTK+ и крутились там как родные, т.е. фокус менялся, GtkButtons нажимались и т.д.
Возникает вопрос: кто-нибудь знает, как вообще можно внедрить в GTK+ свои события или перегрузить уже существующие не кастомизируя GDK?
Последние комментарии
- OlegL, 17 декабря в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
ecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.
Update:
Нашлась отличная функция
В связи с этим есть вопрос, кто знает, как правильно заполнять поля сруктуры GdkEvent (GdkEventKey)? В частности window.
Я не понял задачу. Ты хочешь добавить какое-то событие в event loop какой-то программы? Или в куда?
Я организовать свой event loop, но со стандартными GDK событиями. Потому что на set-top box, внутри которого этот GTK используется, обладает только одним устройством ввода — пультом дистанционного управления. Драйвер для ядра у меня есть и читать с пульта я могу. Осталось научиться впихивать события в GTK.
Вот есть функция gtk_signal_emit и еще были родственные функции, ничего толком уже не помню :(
Айоп, gtk_signal_emit() возбуждает сигнал изнутри виджета. Перехватить его можно снаружи. Мне же надо наоборот — загнать сигнал внутрь GTK. Причём не сигнал даже, а event. Event низкоуровневый, уровня «нажата кнопка Cursor left». Я тут уже и девелоперам GTK мозг попил, так и они сказать не могут, как правильно зполнить поля в этой грёбанной структуре. Дожили, нах!
ты вообщем имхо первый кто это захотел)
кстати, почему бы тебе не воспользоваться чем-то ниже gdk? Если тебе нужно собитие нажатия кнопки, то заэмулируй его не в gdk, а где-нить ниже типа hal…
decvar, какой нахрен HAL, в embedded Linux, где всё железо специальное и 64 метра на всё про всё?!
я знал что у тя embedded?
Во всяком случает вот что говорят про эвенты:
As part of its initialization routine, GDK installs a hook into GLib’s main loop that will monitor the X socket for new X events. When something shows up-perhaps the user has just resized your GNOME application’s main window or typed something on the keyboard-the main loop triggers GDK’s event-processing callback function. This callback pulls the queued events off the socket one by one and translates them into GdkEvent structures. GDK stores the GdkEvent instances inside a queue of its own, in memory, ready to be pulled out and processed at the widget level by GTK+. Some of these events will end up triggering GTK+ signals (see Section 2.3.5).
Соответственно тебе надо в Glib идти, и в ее mainloop уже че-то постить
дока по api здесь
см. выше:
Гм… я вроде бы доки читал, а этого не видел. Мораль — надо перечитать! :)) Но это мне не поможет. У меня есть уже точка доступа для более-менее вменяемого впрыска событий. Лезть ещё ниже — это ваще шняга, тем более у меня gdk-directfb используется…
Во всяком случая предложная мною дока вполне подходит для создания и посылки сигналов.
decvar, да, проблема в том, что я делаю всё (вроде бы) правильно, а события реджектятся… сегодня может быть разберусь поковырявшись GDB в GDK.
Бгагага! Я сделал это. На выходных опишу как.
нутк?