417
416
static void hb_amount_insert_text_handler (GtkEntry *entry, const gchar *text, gint length, gint *position, gpointer data)
419
418
GtkEditable *editable = GTK_EDITABLE(entry);
420
int i, count=0, dcpos=-1;
421
gchar *result = g_new0 (gchar, length+1);
423
const gchar *numtext;
425
//g_message("insert_text-handler: text:%s - pos:%d - length:%d", text, *position, length);
419
gint i, digits, count=0, dcpos=-1;
422
DB( g_print("-----\ninsert_text-handler: instxt:%s pos:%d len:%d\n", text, *position, length) );
427
424
digits = gtk_spin_button_get_digits(GTK_SPIN_BUTTON(entry));
428
numtext = gtk_entry_get_text(entry);
429
for (i=0 ; numtext[i]!='\0' ; i++)
431
if(numtext[i]==',' || numtext[i]=='.')
435
//g_message("previous text='%s' dcpos:'%d'", numtext, dcpos);
436
for (i=0 ; i < length ; i++)
438
if( g_ascii_isdigit(text[i]) && ( (*position <= dcpos + digits) || dcpos < 0) )
441
if( text[i]=='-' && *position==0 ) /* minus sign only at position 0 */
444
if( dcpos < 0 && (text[i]=='.' || text[i]==',') ) /* decimal separator if not in previous string */
445
result[count++] = '.';
450
result[count++] = text[i];
426
// most common : only 1 char to be inserted
429
const gchar *curtxt = gtk_entry_get_text(entry);
431
for (i=0 ; curtxt[i]!='\0' ; i++)
433
if(curtxt[i]==',' || curtxt[i]=='.')
436
DB( g_print(" dcpos:'%d'\n", dcpos) );
438
clntxt = g_new0 (gchar, length+1);
439
for (i=0 ; i < length ; i++)
441
if( g_ascii_isdigit(text[i]) && ( (*position <= dcpos + digits) || dcpos < 0) )
444
if( text[i]=='-' && *position==0 ) /* minus sign only at position 0 */
447
if( dcpos < 0 && (text[i]=='.' || text[i]==',') ) /* decimal separator if not in previous string */
448
clntxt[count++] = '.';
453
clntxt[count++] = text[i];
456
// less common: paste a full text
459
clntxt = hb_string_dup_raw_amount_clean(text, digits);
460
count = strlen(clntxt);
465
DB( g_print(" insert %d char '%s' at %d\n", count, clntxt, *position) );
454
466
g_signal_handlers_block_by_func (G_OBJECT (editable), G_CALLBACK (hb_amount_insert_text_handler), data);
455
gtk_editable_insert_text (editable, result, count, position);
467
gtk_editable_insert_text (editable, clntxt, count, position);
456
468
g_signal_handlers_unblock_by_func (G_OBJECT (editable), G_CALLBACK (hb_amount_insert_text_handler), data);
458
473
g_signal_stop_emission_by_name (G_OBJECT (editable), "insert-text");
466
477
GtkWidget *make_amount(GtkWidget *label)
468
479
GtkWidget *spinner;