Como faço para descobrir o que GDK eventos são necessários para um sinal de GTK +?
Pergunta
Eu estou usando Glade-3 para o meu projeto de GUI, mas eu mantenho-me bater este problema. Eu não vejo nada nos sinais de mapeamento documentação GTK + para eventos ou em Glade-3 (3.4.5). Existe um lugar no código GTK + fonte para encontrar esta informação?
Nota:. É importante nesta questão de reconhecer que eventos e sinais não são a mesma coisa em GTK
Exemplo:
Eu tenho um EventBox que requer os seguintes eventos a fim de receber os seguintes sinais. Como faço para determinar quais eventos são necessários por um dado sinal?
Events: GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_STRUCTURE_MASK
Signals: leave_notify_event, enter_notify_event
Solução
Ok, eu acho que sei o que dizer agora, eu encontrei esta tabela combinando-se os sinais de GTK e GDK eventos. Aqui é .
Outras dicas
Supondo que eu ter interpretado a pergunta corretamente, você está querendo ligar os sinais especificados no arquivo Glade para as funções no código-fonte. Como fazer isso depende se você estiver usando libglade para carregar os arquivos gerar ou GtkBuilder, ambos são semelhantes, mas vou dar amostras em C só para estar completa.
Usando libglade você faria assim:
GladeXml *xml = glade_xml_new(filename, NULL, NULL); // Load the file
glade_xml_signal_autoconnect(xml); // Connect the signals
Usando GtkBuilder seria assim:
GtkBuilder *xml = gtk_builder_new();
gtk_builder_add_from_file(xml, filename, NULL); // Load the file
gtk_builder_connect_signals(xml, NULL); // Connect the signals
Ao utilizar GtkBuilder o segundo parâmetro de sinal em função de conexão pode ser substituído com um ponteiro para dados que irá então ser passado para os manipuladores de sinal.
No futuro, sugiro usar GtkBuilder como libglade está a caminho de ser substituído.
Links
Aqui estão os links para a documentação relevent sobre as duas funções mencionadas acima
Você pode capturar os eventos com gdk_event_handler_set()
Primeiro, registre seu próprio manipulador de eventos GDK na inicialização:
gdk_event_handler_set(my_gdk_event_handler, NULL, NULL);
... Então usá-lo para imprimir qualquer informação útil, e não se esqueça de passar o evento para GTK + através gtk_main_do_event()
como aqui:
void my_gdk_event_handler(GdkEvent *event, gpointer data)
{
printf("Received GdkEvent of type %d", event->type);
gtk_main_do_event(event); // Pass event to GTK+
}