nixp.ru v3.0

27 мая 2017,
суббота,
05:23:00 MSK

DevOps с компанией «Флант»
Аватар пользователя myst
myst написал 30 октября 2006 года в 20:54 (400 просмотров) Ведет себя как Череп; открыл 50 тем в форуме, оставил 2987 комментариев на сайте.

Постановка задачи: есть IrRC. Нужно сделать так, чтобы события, получаемые с него, попадали в GTK+ и крутились там как родные, т.е. фокус менялся, GtkButtons нажимались и т.д.

Возникает вопрос: кто-нибудь знает, как вообще можно внедрить в GTK+ свои события или перегрузить уже существующие не кастомизируя GDK?

myst

Update:

Нашлась отличная функция

void gtk_main_do_event(GdkEvent *event)

В связи с этим есть вопрос, кто знает, как правильно заполнять поля сруктуры GdkEvent (GdkEventKey)? В частности window.

decvar

Я не понял задачу. Ты хочешь добавить какое-то событие в event loop какой-то программы? Или в куда?

myst

Я организовать свой event loop, но со стандартными GDK событиями. Потому что на set-top box, внутри которого этот GTK используется, обладает только одним устройством ввода — пультом дистанционного управления. Драйвер для ядра у меня есть и читать с пульта я могу. Осталось научиться впихивать события в GTK.

metal

Вот есть функция gtk_signal_emit и еще были родственные функции, ничего толком уже не помню :(

myst

Айоп, gtk_signal_emit() возбуждает сигнал изнутри виджета. Перехватить его можно снаружи. Мне же надо наоборот — загнать сигнал внутрь GTK. Причём не сигнал даже, а event. Event низкоуровневый, уровня «нажата кнопка Cursor left». Я тут уже и девелоперам GTK мозг попил, так и они сказать не могут, как правильно зполнить поля в этой грёбанной структуре. Дожили, нах!

decvar

ты вообщем имхо первый кто это захотел)

decvar

кстати, почему бы тебе не воспользоваться чем-то ниже gdk? Если тебе нужно собитие нажатия кнопки, то заэмулируй его не в gdk, а где-нить ниже типа hal…

myst

decvar, какой нахрен HAL, в embedded Linux, где всё железо специальное и 64 метра на всё про всё?!

decvar

я знал что у тя 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 здесь

myst
decvar
я знал что у тя embedded?

см. выше:

Потому что на set-top box, внутри которого этот GTK используется, обладает только одним устройством ввода — пультом дистанционного управления.


decvar
Во всяком случает вот что говорят про эвенты:

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
У меня есть уже точка доступа для более-менее вменяемого впрыска событий

Во всяком случая предложная мною дока вполне подходит для создания и посылки сигналов.

myst

decvar, да, проблема в том, что я делаю всё (вроде бы) правильно, а события реджектятся… сегодня может быть разберусь поковырявшись GDB в GDK.

myst

Бгагага! Я сделал это. На выходных опишу как.

decvar

нутк?