gnucash stable: Multiple changes pushed

Robert Fewell bobit at code.gnucash.org
Thu Sep 12 05:27:04 EDT 2024


Updated	 via  https://github.com/Gnucash/gnucash/commit/9dee3433 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/4314bf1c (commit)
	from  https://github.com/Gnucash/gnucash/commit/f2aff99b (commit)



commit 9dee3433c178a82c64e8133e2940677f2389c0a7
Author: Robert Fewell <14uBobIT at gmail.com>
Date:   Thu Sep 12 10:17:42 2024 +0100

    Remove Windows ifdef for VK_DECIMAL
    
    There was Windows specific ifdef code for the setting of the event
    keyval property to GDK_KEY_KP_Decimal in five locations which is now
    redundant. The requirement for this was fixed in Gtk version 3.17.2
    https://gitlab.gnome.org/GNOME/gtk/-/commit/578043f97e891e423648c9f70ddf1d185f4615c4

diff --git a/gnucash/gnome-utils/gnc-amount-edit.c b/gnucash/gnome-utils/gnc-amount-edit.c
index 969da4c636..dedfbeb909 100644
--- a/gnucash/gnome-utils/gnc-amount-edit.c
+++ b/gnucash/gnome-utils/gnc-amount-edit.c
@@ -278,11 +278,6 @@ gnc_amount_edit_key_press (GtkWidget *widget, GdkEventKey *event, gpointer user_
         gtk_widget_set_tooltip_text (GTK_WIDGET(gae->image), NULL);
     }
 
-#ifdef G_OS_WIN32
-    /* gdk never sends GDK_KEY_KP_Decimal on win32. See #486658 */
-    if (event->hardware_keycode == VK_DECIMAL)
-        event->keyval = GDK_KEY_KP_Decimal;
-#endif
     if (event->keyval == GDK_KEY_KP_Decimal)
     {
         gchar *decimal;
diff --git a/gnucash/gnome/gnc-budget-view.c b/gnucash/gnome/gnc-budget-view.c
index dab47171d0..311b81306e 100644
--- a/gnucash/gnome/gnc-budget-view.c
+++ b/gnucash/gnome/gnc-budget-view.c
@@ -773,12 +773,6 @@ gbv_key_press_cb (GtkWidget *widget, GdkEventKey *event, gpointer user_data)
     if (event->type != GDK_KEY_PRESS || !priv->temp_cr)
         return FALSE;
 
-#ifdef G_OS_WIN32
-    /* gdk never sends GDK_KEY_KP_Decimal on win32. See #486658 */
-    if (event->hardware_keycode == VK_DECIMAL)
-        event->keyval = GDK_KEY_KP_Decimal;
-#endif
-
     switch (event->keyval)
     {
     case GDK_KEY_KP_Decimal:
diff --git a/gnucash/register/register-gnome/formulacell-gnome.c b/gnucash/register/register-gnome/formulacell-gnome.c
index 74691f34eb..196d7d2099 100644
--- a/gnucash/register/register-gnome/formulacell-gnome.c
+++ b/gnucash/register/register-gnome/formulacell-gnome.c
@@ -71,11 +71,7 @@ gnc_formula_cell_direct_update( BasicCell *bcell,
      * this after fixing a bug where one copy was kept up to date, and the
      * other not.  So, fix this.
      */
-#ifdef G_OS_WIN32
-    /* gdk never sends GDK_KEY_KP_Decimal on win32. See #486658 */
-    if (event->hardware_keycode == VK_DECIMAL)
-        event->keyval = GDK_KEY_KP_Decimal;
-#endif
+
     switch (event->keyval)
     {
     case GDK_KEY_Return:
diff --git a/gnucash/register/register-gnome/gnucash-sheet.c b/gnucash/register/register-gnome/gnucash-sheet.c
index 3590e909c9..1dad75c7d5 100644
--- a/gnucash/register/register-gnome/gnucash-sheet.c
+++ b/gnucash/register/register-gnome/gnucash-sheet.c
@@ -1876,14 +1876,8 @@ gnucash_sheet_key_press_event (GtkWidget *widget, GdkEventKey *event)
     sheet = GNUCASH_SHEET(widget);
     /* bug#60582 comment#27 2
            save shift state to enable <shift minus> and <shift equal>
-       bug#618434
-           save keyval to handle GDK_KEY_KP_Decimal event
      */
-#ifdef G_OS_WIN32
-    /* gdk never sends GDK_KEY_KP_Decimal on win32. See #486658 */
-    if (event->hardware_keycode == VK_DECIMAL)
-        event->keyval = GDK_KEY_KP_Decimal;
-#endif
+
     sheet->shift_state = event->state & GDK_SHIFT_MASK;
     sheet->keyval_state =
         (event->keyval == GDK_KEY_KP_Decimal) ? GDK_KEY_KP_Decimal : 0;
diff --git a/gnucash/register/register-gnome/pricecell-gnome.c b/gnucash/register/register-gnome/pricecell-gnome.c
index f0c22f8d95..5392b928dd 100644
--- a/gnucash/register/register-gnome/pricecell-gnome.c
+++ b/gnucash/register/register-gnome/pricecell-gnome.c
@@ -60,11 +60,6 @@ gnc_price_cell_direct_update (BasicCell *bcell,
 
     is_return = FALSE;
 
-#ifdef G_OS_WIN32
-    /* gdk never sends GDK_KEY_KP_Decimal on win32. See #486658 */
-    if (event->hardware_keycode == VK_DECIMAL)
-        event->keyval = GDK_KEY_KP_Decimal;
-#endif
     switch (event->keyval)
     {
     case GDK_KEY_Return:

commit 4314bf1c9f10bcf53965728d498ebb2e593e2b79
Author: Robert Fewell <14uBobIT at gmail.com>
Date:   Thu Sep 12 09:59:15 2024 +0100

    Bug 799399 - Windows Keypad decimal locale error
    
    On Windows, the keypad decimal isn't a comma in dialogs that use the
    GncAmountEdit widget for locales that calls for it.
    
    This appears to be a problem with Gtk so instead do the entry update
    in the key press call back instead of trying to change the event and
    passing it on.

diff --git a/gnucash/gnome-utils/gnc-amount-edit.c b/gnucash/gnome-utils/gnc-amount-edit.c
index c8774622dc..969da4c636 100644
--- a/gnucash/gnome-utils/gnc-amount-edit.c
+++ b/gnucash/gnome-utils/gnc-amount-edit.c
@@ -285,15 +285,40 @@ gnc_amount_edit_key_press (GtkWidget *widget, GdkEventKey *event, gpointer user_
 #endif
     if (event->keyval == GDK_KEY_KP_Decimal)
     {
+        gchar *decimal;
+    
         if (gae->print_info.monetary)
         {
             struct lconv *lc = gnc_localeconv ();
             event->keyval = lc->mon_decimal_point[0];
-            event->string[0] = lc->mon_decimal_point[0];
+            decimal = g_strdup_printf ("%c", lc->mon_decimal_point[0]);
         }
-    }
+        else
+            decimal = g_strdup_printf ("%c",'.');
+
+        GtkEditable *editable = GTK_EDITABLE(widget);
+        gint start_pos, end_pos;
+        gint position = gtk_editable_get_position (editable);
+
+        if (gtk_editable_get_selection_bounds (editable,
+                                               &start_pos, &end_pos))
+        {
+            position = start_pos;
 
-    result = (* GTK_WIDGET_GET_CLASS(widget)->key_press_event)(widget, event);
+            gtk_editable_delete_selection (editable);
+            gtk_editable_insert_text (editable,
+                                      decimal, -1, &position);
+        }
+        else
+            gtk_editable_insert_text (editable,
+                                      decimal, -1, &position);
+
+        gtk_editable_set_position (editable, position);
+        g_free (decimal);
+        result = TRUE;
+    }
+    else
+        result = (* GTK_WIDGET_GET_CLASS(widget)->key_press_event)(widget, event);
 
     switch (event->keyval)
     {



Summary of changes:
 gnucash/gnome-utils/gnc-amount-edit.c              | 36 +++++++++++++++++-----
 gnucash/gnome/gnc-budget-view.c                    |  6 ----
 .../register/register-gnome/formulacell-gnome.c    |  6 +---
 gnucash/register/register-gnome/gnucash-sheet.c    |  8 +----
 gnucash/register/register-gnome/pricecell-gnome.c  |  5 ---
 5 files changed, 30 insertions(+), 31 deletions(-)



More information about the gnucash-changes mailing list