GTK+/Começando: diferenças entre revisões

[edição não verificada][edição não verificada]
Conteúdo apagado Conteúdo adicionado
Edudobay (discussão | contribs)
Edudobay (discussão | contribs)
Linha 245:
== Eventos ==
 
Além do mecanismo de sinais acima descrito, há um conjunto de eventos que refletem o mecanismo de eventos do X. Podem-se também associar callbacks a esses eventos, que são:
 
* event (evento)
* button_press_event (apertamento de botão)
* button_release_event (soltamento de botão)
* scroll_event (rolagem)
* motion_notify_event (notificação de movimento)
* delete_event (deleção)
* destroy_event (destruição)
* expose_event
* key_press_event (apertamento de tecla)
* key_release_event (soltamento de tecla)
* enter_notify_event (notificação de entrada)
* leave_notify_event (notificação de saída)
* configure_event (configuração)
* focus_in_event (entrada de foco)
* focus_out_event (saída de foco)
* map_event (mapeamento)
* unmap_event (desmapeamento)
* property_notify_event (notificação de propriedade)
* selection_clear_event (limpeza da seleção)
* selection_request_event (requisição de seleção)
* selection_notify_event (notificação de seleção)
* proximity_in_event (proximidade)
* proximity_out_event
* visibility_notify_event (notificação de visibilidade)
* client_event (cliente)
* no_expose_event
* window_state_event (estado da janela)
 
Para conectar uma função callback a um desses eventos, use a função g_signal_connect(), como descrito acima, usando um dos nomes de eventos acima como parâmetro ''name''. A função callback para eventos tem uma forma ligeiramente diferente da usada para os sinais:
 
gint callback_func( GtkWidget *widget,
GdkEvent *event,
gpointer callback_data );
 
GdkEvent é um <tt>union</tt> em C, cujo tipo dependerá de qual dos eventos acima ocorreu. Para podermos distinguir que evento foi lançado, cada alternativa possível tem um membro chamado <tt>type</tt> (tipo) que reflete o evento sendo lançado. Os outros componentes da estrutura dependerão do tipo do evento. São valores possíveis para o tipo:
 
GDK_NOTHING
GDK_DELETE
GDK_DESTROY
GDK_EXPOSE
GDK_MOTION_NOTIFY
GDK_BUTTON_PRESS
GDK_2BUTTON_PRESS
GDK_3BUTTON_PRESS
GDK_BUTTON_RELEASE
GDK_KEY_PRESS
GDK_KEY_RELEASE
GDK_ENTER_NOTIFY
GDK_LEAVE_NOTIFY
GDK_FOCUS_CHANGE
GDK_CONFIGURE
GDK_MAP
GDK_UNMAP
GDK_PROPERTY_NOTIFY
GDK_SELECTION_CLEAR
GDK_SELECTION_REQUEST
GDK_SELECTION_NOTIFY
GDK_PROXIMITY_IN
GDK_PROXIMITY_OUT
GDK_DRAG_ENTER
GDK_DRAG_LEAVE
GDK_DRAG_MOTION
GDK_DRAG_STATUS
GDK_DROP_START
GDK_DROP_FINISHED
GDK_CLIENT_EVENT
GDK_VISIBILITY_NOTIFY
GDK_NO_EXPOSE
GDK_SCROLL
GDK_WINDOW_STATE
GDK_SETTING
 
Assim, para conectar uma função callback a um desses eventos, escreveríamos algo como:
 
g_signal_connect (G_OBJECT (button), "button_press_event",
G_CALLBACK (button_press_callback), NULL);
 
Esse código assume que <tt>button</tt> é um widget Button (botão). Agora, quando o mouse (rato) está sobre esse botão e um botão do mouse for pressionado, a função button_press_callback() será chamada. Essa função pode ser declarada como:
 
static gboolean button_press_callback( GtkWidget *widget,
GdkEventButton *event,
gpointer data );
 
Note que podemos declarar o segundo argumento como do tipo <tt>GdkEventButton</tt> porque sabemos que tipo de evento ocorrerá para que essa função seja chamada.
 
O valor retornado nessa função indica se o evento deve ser propagado pelo mecanismo de tratamento de eventos do GTK. Retornar TRUE indica que o evento foi tratado, e que não deve ser mais propagado. Retornar FALSE continua o tratamento normal de eventos. Veja a seção sobre [[../Manipulação avançada de eventos e sinais/]] para obter mais detalhes deste processo de propagação.
 
Para detalhes nos tipos de dados GdkEvent, veja o apêndice [[../Tipos de evento do GDK/]].
 
As APIs de seleção e arrastar-e-soltar do GDK também lançam certos eventos refletidos no GTK pelos sinais. Veja [[../Arrastar-e-soltar#Sinais_no_widget_de_origem|Sinais no widget de origem]] e [[../Arrastar-e-soltar#Sinais_no_widget_de_destino|Sinais no widget de destino]] para detalhes da "assinatura" das funções callback para esses sinais:
 
* selection_received
* selection_get
* drag_begin_event
* drag_end_event
* drag_data_delete
* drag_motion
* drag_drop
* drag_data_get
* drag_data_received
 
== Analisando o Hello World ==