r19222 - gnucash/trunk/src/register/register-gnome - Bug #618434 - Decimal separator is always '.' when using the keypad, patch by Yasuaki Taniguchi

Geert Janssens gjanssens at code.gnucash.org
Thu Jun 3 15:56:29 EDT 2010


Author: gjanssens
Date: 2010-06-03 15:56:29 -0400 (Thu, 03 Jun 2010)
New Revision: 19222
Trac: http://svn.gnucash.org/trac/changeset/19222

Modified:
   gnucash/trunk/src/register/register-gnome/gnucash-sheet.c
   gnucash/trunk/src/register/register-gnome/gnucash-sheet.h
Log:
Bug #618434 - Decimal separator is always '.' when using the keypad, patch by Yasuaki Taniguchi

Modified: gnucash/trunk/src/register/register-gnome/gnucash-sheet.c
===================================================================
--- gnucash/trunk/src/register/register-gnome/gnucash-sheet.c	2010-06-03 19:56:12 UTC (rev 19221)
+++ gnucash/trunk/src/register/register-gnome/gnucash-sheet.c	2010-06-03 19:56:29 UTC (rev 19222)
@@ -1219,7 +1219,10 @@
     type_name = gnc_table_get_cell_type_name (sheet->table, virt_loc);
 
     if( (g_strcmp0 (type_name, DATE_CELL_TYPE_NAME) == 0)
-        || (g_strcmp0 (type_name, COMBO_CELL_TYPE_NAME) == 0) ) return TRUE;
+        || (g_strcmp0 (type_name, COMBO_CELL_TYPE_NAME) == 0) 
+	|| (g_strcmp0 (type_name, NUM_CELL_TYPE_NAME) == 0)
+	|| (g_strcmp0 (type_name, PRICE_CELL_TYPE_NAME) == 0)
+	|| (g_strcmp0 (type_name, FORMULA_CELL_TYPE_NAME) == 0)) return TRUE;
 
     return FALSE;
 }
@@ -1902,14 +1905,21 @@
 
     sheet = GNUCASH_SHEET (widget);
 
-    /* save shift state to enable <shift minus> and <shift equal>.
-       see bug#60582 comment#27 2)
+    /* bug#60582 comment#27 2
+           save shift state to enable <shift minus> and <shift equal>
+       bug#618434
+           save keyval to handle GDK_KP_Decimal event
      */
     if (sheet->preedit_length)
-        sheet->shift_state = 0;
+	{
+	    sheet->shift_state = 0;
+	    sheet->keyval_state = 0;
+	}
     else
-        sheet->shift_state = event->state & GDK_SHIFT_MASK;
-
+	{
+	    sheet->shift_state = event->state & GDK_SHIFT_MASK;
+	    sheet->keyval_state = (event->keyval == GDK_KP_Decimal)? GDK_KP_Decimal:0;
+	}
     if (gtk_im_context_filter_keypress (sheet->im_context, event))
     {
         sheet->need_im_reset = TRUE;
@@ -1986,7 +1996,9 @@
 
         event = gdk_event_new (GDK_KEY_PRESS);
         keyevent = (GdkEventKey *) event;
-        keyevent->keyval = gdk_unicode_to_keyval(str[0]);
+        keyevent->keyval = 
+	    sheet->keyval_state ? sheet->keyval_state 
+	    : gdk_unicode_to_keyval(str[0]);
         keyevent->state |= sheet->shift_state;
         result = gnucash_sheet_direct_event(sheet, event);
         gdk_event_free(event);
@@ -2805,6 +2817,7 @@
     sheet->retrieve_surrounding_signal = 0;
     sheet->delete_surrounding_signal = 0;
     sheet->shift_state = 0;
+    sheet->keyval_state = 0;
 }
 
 

Modified: gnucash/trunk/src/register/register-gnome/gnucash-sheet.h
===================================================================
--- gnucash/trunk/src/register/register-gnome/gnucash-sheet.h	2010-06-03 19:56:12 UTC (rev 19221)
+++ gnucash/trunk/src/register/register-gnome/gnucash-sheet.h	2010-06-03 19:56:29 UTC (rev 19222)
@@ -144,6 +144,7 @@
     guint delete_surrounding_signal;
 
     guint shift_state;
+    guint keyval_state;
 
 } GnucashSheet;
 
@@ -258,6 +259,6 @@
 
 /*
   Local Variables:
-  c-basic-offset: 8
+  c-basic-offset: 4
   End:
 */



More information about the gnucash-changes mailing list