rem: if ( ( ev -> state & GDK_CONTROL_MASK ) != GDK_CONTROL_MASK ) inc_dec_date ( widget, -ONE_DAY ); else inc_dec_date ( widget, -ONE_WEEK );
add: if ( ( ev -> state & GDK_CONTROL_MASK ) != GDK_CONTROL_MASK || ev -> keyval != GDK_KP_Subtract  ) inc_dec_date ( widget, -ONE_DAY ); else inc_dec_date ( widget, -ONE_WEEK );
context: gboolean touches_champ_formulaire ( GtkWidget *widget,				    GdkEventKey *ev,				    gint *no_origine ){    gint origine;    gint element_suivant;    GtkWidget *popup_cal;    origine = GPOINTER_TO_INT ( no_origine );    /* si etat.entree = 1, la touche entrée finit l'opération ( fonction par défaut ) */    /* sinon elle fait comme tab */    if ( !etat.entree && ( ev -> keyval == GDK_Return || ev -> keyval == GDK_KP_Enter ))	ev->keyval = GDK_Tab ;    switch ( ev -> keyval )    {	case GDK_Escape :		/* échap */	    echap_formulaire();	    break;	    /* 	    touche haut */	case GDK_Up:	    element_suivant = recherche_element_suivant_formulaire ( origine,								     2 );	    widget_grab_focus_formulaire ( element_suivant );	    return TRUE;	    break;	    /* 	    touche bas */	case GDK_Down:	    element_suivant = recherche_element_suivant_formulaire ( origine,								     3 );	    widget_grab_focus_formulaire ( element_suivant );	    return TRUE;	    break;	    /* 	    tabulation inversée (+SHIFT) */	case GDK_ISO_Left_Tab:	    /* 	    on passe au widget précédent */	    element_suivant = recherche_element_suivant_formulaire ( origine,								     0 );	    widget_grab_focus_formulaire ( element_suivant );	    return TRUE;	    break;	    /* tabulation */	case GDK_Tab :	    /* une tabulation passe au widget affiché suivant */	    /* et retourne à la date ou enregistre l'opé s'il est à la fin */	    /* 	    si on est sur le débit et qu'on a entré qque chose dedans, on efface le crédit */	    if ( origine == TRANSACTION_FORM_DEBIT		 &&		 strlen ( gtk_entry_get_text ( GTK_ENTRY ( widget ))))	    {		gtk_widget_set_style ( widget_formulaire_par_element (TRANSACTION_FORM_CREDIT),				       style_entree_formulaire[ENGRIS] );		gtk_entry_set_text ( GTK_ENTRY ( widget_formulaire_par_element (TRANSACTION_FORM_CREDIT) ),				     _("Credit") );	    }	    	    /* 	    si on est sur le crédit et qu'on a entré qque chose dedans, on efface le débit */	    if ( origine == TRANSACTION_FORM_CREDIT		 &&		 strlen ( gtk_entry_get_text ( GTK_ENTRY ( widget ))))	    {		gtk_widget_set_style ( widget_formulaire_par_element (TRANSACTION_FORM_DEBIT),				       style_entree_formulaire[ENGRIS] );		gtk_entry_set_text ( GTK_ENTRY ( widget_formulaire_par_element (TRANSACTION_FORM_DEBIT) ),				     _("Debit") );	    }	    element_suivant = recherche_element_suivant_formulaire ( origine,								     1 );	    if ( element_suivant == -2 )		fin_edition();	    else		widget_grab_focus_formulaire ( element_suivant );	    return TRUE;	    break;	    /* touches entrée */	case GDK_KP_Enter :	case GDK_Return :	    /* si la touche CTRL est elle aussi active et si on est sur un champ	     * de date, c'est que l'on souhaite ouvrir un calendrier */	    if ( ( ev -> state & GDK_CONTROL_MASK ) == GDK_CONTROL_MASK		 &&		 ( origine == TRANSACTION_FORM_DATE		   ||		   origine == TRANSACTION_FORM_VALUE_DATE ))	    {		popup_cal = gsb_calendar_new ( GTK_WIDGET ( GTK_ENTRY ( widget_formulaire_par_element (origine) ) ) );		gtk_widget_grab_focus ( GTK_WIDGET ( popup_cal ) );		return TRUE;	    }	    fin_edition();	    return TRUE;	    break;	    /* touches + */	case GDK_KP_Add:	case GDK_plus:	    /* si on est dans une entree de date, on augmente d'un jour	       ou d'une semaine(si ctrl) la date */	    switch ( origine )	    {		case TRANSACTION_FORM_VALUE_DATE:		case TRANSACTION_FORM_DATE:		    verifie_champs_dates ( origine );		    if ( ( ev -> state & GDK_CONTROL_MASK ) != GDK_CONTROL_MASK )			inc_dec_date ( widget,				       ONE_DAY );		    else			inc_dec_date ( widget,				       ONE_WEEK );		    return TRUE;		    break;		case TRANSACTION_FORM_CHEQUE:		    increment_decrement_champ ( widget,						1 );		    return TRUE;		    break;	    }	    break;	    /* touches - */	case GDK_KP_Subtract:	case GDK_minus:	    /* si on est dans une entree de date, on diminue d'un jour	       ou d'une semaine(si ctrl) la date */	    switch ( origine )	    {		case TRANSACTION_FORM_VALUE_DATE:		case TRANSACTION_FORM_DATE:		    verifie_champs_dates ( origine );		    if ( ( ev -> state & GDK_CONTROL_MASK ) != GDK_CONTROL_MASK )			inc_dec_date ( widget,				       -ONE_DAY );		    else			inc_dec_date ( widget,				       -ONE_WEEK );		    return TRUE;		    break;		case TRANSACTION_FORM_CHEQUE:		    		    increment_decrement_champ ( widget,						-1 );		    return TRUE;		    break;	    }	    break;	    /* touche PgUp */	case GDK_Page_Up :	case GDK_KP_Page_Up :	    /* si on est dans une entree de date, on augmente d'un mois 	       ou d'un an (si ctrl) la date */	    switch ( origine )	    {		case TRANSACTION_FORM_VALUE_DATE:		case TRANSACTION_FORM_DATE:		    verifie_champs_dates ( origine );		    if ( ( ev -> state & GDK_CONTROL_MASK ) != GDK_CONTROL_MASK )			inc_dec_date ( widget,				       ONE_MONTH );		    else			inc_dec_date ( widget,				       ONE_YEAR );		    return TRUE;		    break;	    }	    break;	    /* touche PgDown */	case GDK_Page_Down :	case GDK_KP_Page_Down :	    /* si on est dans une entree de date, on diminue d'un mois 	       ou d'un an (si ctrl) la date */	    switch ( origine )	    {		case TRANSACTION_FORM_VALUE_DATE:		case TRANSACTION_FORM_DATE:		    verifie_champs_dates ( origine );		    if ( ( ev -> state & GDK_CONTROL_MASK ) != GDK_CONTROL_MASK )			inc_dec_date ( widget,				       -ONE_MONTH );		    else			inc_dec_date ( widget,				       -ONE_YEAR );		    return TRUE;		    break;	    }	    break;        }    return FALSE;}