rem: gint jour, mois, annee;
add: guint jour, mois, annee;
context: gboolean clavier_calendrier ( GtkCalendar *pCalendar,			      GdkEventKey *ev,			      GtkWidget *entry ){    gint jour, mois, annee;    gint offset = 7;    GtkWidget *pTopLevelWidget;    /* on récupère la popup du calendrier pour pouvoir la détruire en temps voulu */    pTopLevelWidget = gtk_widget_get_toplevel ( GTK_WIDGET ( pCalendar ) );    gtk_calendar_get_date ( pCalendar, &annee, &mois, &jour );    switch ( ev -> keyval )    {	case GDK_Escape :	    /* on quitte le calendrier et on le ferme sans rien faire */	    gtk_signal_emit_stop_by_name ( GTK_OBJECT ( pCalendar ),					   "key-press-event");	    if ( GTK_WIDGET_TOPLEVEL ( pTopLevelWidget ) )		gtk_widget_destroy ( pTopLevelWidget );	    break ;	case GDK_Return :		/* touches entrée */	case GDK_KP_Enter :	    /* on valide la date choisie */	    gtk_signal_emit_stop_by_name ( GTK_OBJECT ( pCalendar ),					   "key-press-event");	    gtk_entry_set_text ( GTK_ENTRY ( entry ),				 gsb_format_date ( jour, mois + 1, annee ));	    if ( GTK_WIDGET_TOPLEVEL ( pTopLevelWidget ) )		gtk_widget_destroy ( pTopLevelWidget );	    break ;	case GDK_Left :		/* touches flèche gauche */	case GDK_KP_Left:	case GDK_minus:		/* touches - */	case GDK_KP_Subtract:	    /* on passe au jour précédent */	    jour--;	    /* si la date n'est pas valide, c'est parce qu'on a changé de mois */	    if ( g_date_valid_day ( jour ) != TRUE )	    {		/* donc, dernier jour ...*/		jour = 31 ;		/* ... du mois précédent */		mois-- ;		/* parce qu'il y a une différence de type et un décalage de valeur		   pour identifier le mois :		   - pour g_date, janvier = 1		   - pour gtk_calendar, janvier = 0 */		/* si le mois n'est pas valide, c'est parce qu'on a changé d'année */		if ( g_date_valid_month ( mois + 1 ) != TRUE )		{		    /* donc mois de décembre... */		    mois = 11;		    /* de l'année précédente */		    annee--;		    /* si l'année n'est pas valide, ça craint !!!!, alors on choisit		       le début de notre ère chrétienne :-) */		    if ( g_date_valid_year ( annee ) != TRUE )			annee = 1;		}		/* on cherche le dernier jour du mois */		while ( g_date_valid_dmy ( jour, mois + 1, annee ) != TRUE )		    jour--;	    }	    /* on positionne le calendrier au milieu du mois pour éviter des effets	       de bord de la fonction gtk_calendar_select_month */	    gtk_calendar_select_day( pCalendar , 15 );	    gtk_calendar_select_month ( pCalendar , mois, annee );	    gtk_calendar_select_day( pCalendar , jour );	    break ;	case GDK_Right :		/* touches flèche droite */	case GDK_KP_Right:	case GDK_plus:		/* touches + */	case GDK_KP_Add:	    /* on passe au jour suivant */	    jour++;	    /* si la date n'est pas valide, c'est parce qu'on a changé de mois */	    if ( g_date_valid_dmy ( jour, mois + 1, annee ) != TRUE )	    {		/* donc, premier jour ...*/		jour = 1 ;		/* ... du mois suivant */		mois++ ;		/* si le mois n'est pas valide, c'est parce qu'on a changé d'année */		if ( g_date_valid_month ( mois + 1 ) != TRUE )		{		    /* donc mois de janvier... */		    mois = 0;		    /* de l'année suivante */		    annee++;		    /* si l'année n'est pas valide, c'est qu'on a fait le tour du temps :-))),		       alors on choisit le début de notre ère chrétienne :-) */		    if ( g_date_valid_year ( annee ) != TRUE )			annee = 1;		}	    }	    gtk_calendar_select_day( pCalendar , 15 );	    gtk_calendar_select_month ( pCalendar , mois, annee );	    gtk_calendar_select_day( pCalendar, jour );	    break ;	case GDK_Up :		/* touches flèche haut */	case GDK_KP_Up :	    /* on passe à la semaine précédente */	    jour -= 7;	    /* si la date n'est pas valide, c'est parce qu'on a changé de mois */	    if ( g_date_valid_day ( jour ) != TRUE )	    {		/* on revient donc en arrière */		jour += 7;		offset = 7;		/* pour calculer le nombre de jours qu'il faut soustraire au mois		   précédent */		while ( g_date_valid_day ( jour - 7 + offset  ) == TRUE )		    offset--;		mois-- ;		/* si le mois n'est pas valide, c'est parce qu'on a changé d'année */		if ( g_date_valid_month ( mois + 1 ) != TRUE )		{		    /* donc mois de décembre... */		    mois = 11;		    /* de l'année précédente */		    annee--;		    if ( g_date_valid_year ( annee ) != TRUE )			annee = 1;		}		/* on cherche quel est le dernier du mois */		jour = 31;		while ( g_date_valid_dmy ( jour, mois + 1, annee ) != TRUE )		    jour--;		/* pour lui soustraire le nombre de jours précédemment calculé */		jour -= offset;	    }	    gtk_calendar_select_day( pCalendar , 15 );	    gtk_calendar_select_month ( pCalendar , mois, annee );	    gtk_calendar_select_day( pCalendar, jour );	    break ;	case GDK_Down :		/* touches flèche bas */	case GDK_KP_Down :	    /* on passe à la semaine suivante */	    jour += 7 ;	    if ( g_date_valid_dmy ( jour, mois + 1, annee ) != TRUE )	    {		jour -= 7;		offset = 0;		while ( g_date_valid_dmy ( jour + offset, mois + 1, annee ) == TRUE )		    offset++;		offset--;		mois++ ;		/* parce qu'il y a une différence de type et un décalage de valeur		   pour identifier le mois :		   - pour g_date, janvier = 1		   - pour gtk_calendar, janvier = 0 */		if ( g_date_valid_month ( mois + 1 ) != TRUE )		{		    mois = 0;		    annee++;		    if ( g_date_valid_year ( annee ) != TRUE )			annee = 1;		}		jour = 7 - offset;	    }	    gtk_calendar_select_day( pCalendar , 15 );	    gtk_calendar_select_month ( pCalendar , mois, annee );	    gtk_calendar_select_day( pCalendar, jour );	    break ;	case GDK_Home :		/* touches Home */	case GDK_KP_Home :	    /* on passe au 1er jour du mois */	    gtk_calendar_select_day( pCalendar, 1 );	    break ;	case GDK_End :		/* touches End */	case GDK_KP_End :	    /* on passe au dernier jour du mois */	    jour = 31;	    while ( g_date_valid_dmy ( jour, mois + 1, annee ) != TRUE )		jour--;	    gtk_calendar_select_day( pCalendar, jour );	    break ;	case GDK_Page_Up :		/* touches PgUp */	case GDK_KP_Page_Up :	    /* on passe au mois précédent */	    gtk_calendar_select_day( pCalendar , 15 );	    mois-- ;	    if ( g_date_valid_month ( mois + 1 ) != TRUE )	    {		mois = 11;		annee--;		if ( g_date_valid_year ( annee ) != TRUE )		    annee = 1;	    }	    while ( g_date_valid_dmy ( jour, mois + 1, annee ) != TRUE )		jour--;	    gtk_calendar_select_day( pCalendar , 15 );	    gtk_calendar_select_month ( pCalendar , mois, annee );	    gtk_calendar_select_day( pCalendar, jour );	    break ;	case GDK_Page_Down :		/* touches PgDn */	case GDK_KP_Page_Down :	    /* on passe au mois suivant */	    gtk_calendar_select_day( pCalendar , 15 );	    mois++ ;	    if ( g_date_valid_month ( mois + 1 ) != TRUE )	    {		mois = 0;		annee++;		if ( g_date_valid_year ( annee ) != TRUE )		    annee = 1;	    }	    while ( g_date_valid_dmy ( jour, mois + 1, annee ) != TRUE )		jour--;	    gtk_calendar_select_day( pCalendar , 15 );	    gtk_calendar_select_month ( pCalendar , mois, annee );	    gtk_calendar_select_day( pCalendar, jour );	    break ;	default :	    break ;    }    return TRUE;}