myst
			
				написал 30 октября 2006 года в 20:54 (995 просмотров)
			
			
			Ведет себя
			 как Череп; открыл 50 тем в форуме, оставил 2987 комментариев на сайте.			
	
	Постановка задачи: есть IrRC. Нужно сделать так, чтобы события, получаемые с него, попадали в GTK+ и крутились там как родные, т.е. фокус менялся, GtkButtons нажимались и т.д.
Возникает вопрос: кто-нибудь знает, как вообще можно внедрить в GTK+ свои события или перегрузить уже существующие не кастомизируя GDK?
Последние комментарии
-  
        
            OlegL, 17 декабря 2023 года в 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
        
  
DevOps as a Service from Palark
	24/7 SRE & DevOps service to cover all your Kubernetes needs.

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.
Бгагага! Я сделал это. На выходных опишу как.
нутк?