gnucash maint: Bug 796734 - Auto-complete entry not highlighting to allow...
John Ralls
jralls at code.gnucash.org
Tue Sep 4 18:12:27 EDT 2018
Updated via https://github.com/Gnucash/gnucash/commit/75ccd57d (commit)
from https://github.com/Gnucash/gnucash/commit/f6d873dc (commit)
commit 75ccd57dbf8d26eb0d393a81f48b2337324fb7f3
Author: John Ralls <jralls at ceridwen.us>
Date: Tue Sep 4 11:08:25 2018 -0700
Bug 796734 - Auto-complete entry not highlighting to allow...
for incremental entry.
Because the Quartz Input Method module (imquartz.c) messes with the
selected text, so we cache it in the gnucash_sheet object and restore it
after the input module is done with the keypress.
diff --git a/gnucash/register/register-gnome/gnucash-sheet.c b/gnucash/register/register-gnome/gnucash-sheet.c
index d3f68ac..7e22642 100644
--- a/gnucash/register/register-gnome/gnucash-sheet.c
+++ b/gnucash/register/register-gnome/gnucash-sheet.c
@@ -1040,6 +1040,9 @@ gnucash_sheet_insert_cb (GtkWidget *widget,
if (start_sel != end_sel)
gtk_editable_select_region(editable, start_sel, end_sel);
+ /* Save the selected region in case the input module eats it. */
+ sheet->start_sel = start_sel;
+ sheet->end_sel = end_sel;
g_string_free (new_text_gs, TRUE);
g_string_free (change_text_gs, TRUE);
@@ -1810,10 +1813,17 @@ gnucash_sheet_key_press_event_internal (GtkWidget *widget, GdkEventKey *event)
if (pass_on)
{
gboolean result = FALSE;
- // If sheet is readonly, entry is not realized
- if (gtk_widget_get_realized (GTK_WIDGET(sheet->entry)))
- result = gtk_widget_event (sheet->entry, (GdkEvent *) event);
+ GtkEditable *editable = GTK_EDITABLE(sheet->entry);
+ // If sheet is readonly, entry is not realized
+ if (gtk_widget_get_realized (GTK_WIDGET(editable)))
+ result = gtk_widget_event (GTK_WIDGET(editable), (GdkEvent*)event);
+ /* Restore the stored selection in case it was eaten by the input
+ * module.
+ */
+ if (sheet->start_sel != sheet->end_sel)
+ gtk_editable_select_region(editable, sheet->start_sel,
+ sheet->end_sel);
return result;
}
@@ -1834,13 +1844,15 @@ static gint
gnucash_sheet_key_press_event (GtkWidget *widget, GdkEventKey *event)
{
GnucashSheet *sheet;
+ GtkEditable *editable = NULL;
+ int start_sel = 0, end_sel = 0;
g_return_val_if_fail(widget != NULL, TRUE);
g_return_val_if_fail(GNUCASH_IS_SHEET(widget), TRUE);
g_return_val_if_fail(event != NULL, TRUE);
sheet = GNUCASH_SHEET (widget);
-
+ editable = GTK_EDITABLE(sheet->entry);
/* bug#60582 comment#27 2
save shift state to enable <shift minus> and <shift equal>
bug#618434
@@ -1861,6 +1873,9 @@ gnucash_sheet_key_press_event (GtkWidget *widget, GdkEventKey *event)
sheet->shift_state = event->state & GDK_SHIFT_MASK;
sheet->keyval_state = (event->keyval == GDK_KEY_KP_Decimal) ? GDK_KEY_KP_Decimal : 0;
}
+
+ gtk_editable_get_selection_bounds (editable, &start_sel, &end_sel);
+
if (gtk_im_context_filter_keypress (sheet->im_context, event))
{
sheet->need_im_reset = TRUE;
@@ -2590,6 +2605,7 @@ gnucash_sheet_init (GnucashSheet *sheet)
sheet->delete_surrounding_signal = 0;
sheet->shift_state = 0;
sheet->keyval_state = 0;
+ sheet->start_sel = sheet->end_sel = 0;
}
diff --git a/gnucash/register/register-gnome/gnucash-sheetP.h b/gnucash/register/register-gnome/gnucash-sheetP.h
index bd2ec3c..8881068 100644
--- a/gnucash/register/register-gnome/gnucash-sheetP.h
+++ b/gnucash/register/register-gnome/gnucash-sheetP.h
@@ -112,6 +112,7 @@ struct _GnucashSheet
guint shift_state;
guint keyval_state;
+ int start_sel, end_sel;
};
Summary of changes:
gnucash/register/register-gnome/gnucash-sheet.c | 24 ++++++++++++++++++++----
gnucash/register/register-gnome/gnucash-sheetP.h | 1 +
2 files changed, 21 insertions(+), 4 deletions(-)
More information about the gnucash-changes
mailing list