if you use gtk_widget_child_focus in key-press-event, the event doing before the press.
In this way the event is when you validate the entry.
Code:
#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h> ///usr/include/gtk-2.0/gdk/gdkkeysyms.h
#include <glib/gprintf.h>
typedef struct {
GtkWidget *base; //GtkWindow (main)
int other; //example
} for_entry;
static gboolean
Control_Activate(GtkEntry *entry,gpointer data)
{
for_entry *ent = (for_entry *) data;
printf("\n %s\n",gtk_widget_get_name(GTK_WIDGET(entry)));
gtk_widget_child_focus(ent->base,GTK_DIR_TAB_FORWARD);
return FALSE;
}
int
main( int argc,
char **argv )
{
GtkWidget *window;
GtkWidget *vbox;
GtkWidget *entry;
for_entry *ent = g_slice_new(for_entry);
//Data data;
gint i;
gtk_init( &argc, &argv );
window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
g_signal_connect( G_OBJECT( window ), "destroy",
G_CALLBACK( gtk_main_quit ), NULL );
vbox = gtk_vbox_new( TRUE, 6 );
gtk_container_add( GTK_CONTAINER( window ), vbox );
for( i = 0; i < 10; i++ )
{
entry = gtk_entry_new();
//data.entries[i] = entry;
gtk_box_pack_start( GTK_BOX( vbox ), entry, FALSE, FALSE, 0 );
ent->base = window;
ent->other = 0;
g_signal_connect(entry,"activate",G_CALLBACK(Control_Activate),ent);
}
gtk_widget_show_all( window );
gtk_main();
return( 0 );
}