Como faço para descobrir o que GDK eventos são necessários para um sinal de GTK +?

StackOverflow https://stackoverflow.com/questions/808338

  •  03-07-2019
  •  | 
  •  

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
Foi útil?

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+
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top