gnucash stable: Multiple changes pushed
John Ralls
jralls at code.gnucash.org
Thu May 7 19:32:24 EDT 2026
Updated via https://github.com/Gnucash/gnucash/commit/b72a98ec (commit)
via https://github.com/Gnucash/gnucash/commit/cc4522c5 (commit)
via https://github.com/Gnucash/gnucash/commit/2d694e82 (commit)
via https://github.com/Gnucash/gnucash/commit/b9fd1c3e (commit)
from https://github.com/Gnucash/gnucash/commit/d1117549 (commit)
commit b72a98ecdf8a34eaeb7bb0dd40858df75411d43d
Merge: cc4522c5d5 b9fd1c3eca
Author: John Ralls <jralls at ceridwen.us>
Date: Thu May 7 16:04:26 2026 -0700
Merge Sherlock's 'remove-dead-IM_code' into stable.
commit cc4522c5d5696c80305aac3e87a3dedf46b9451b
Merge: d1117549e7 2d694e8225
Author: John Ralls <jralls at ceridwen.us>
Date: Thu May 7 15:50:53 2026 -0700
Merge Wayne Boyer's 'fix/macos-hidpi-offscreen-text' into stable.
commit 2d694e8225e84a004c55cb6284169e10a8f22311
Author: Wayne Boyer <wayne at happyhusky.net>
Date: Thu May 7 13:09:09 2026 -0700
Fix blurry text in HiDPI offscreen-rendered widgets
Fix blurry text on HiDPI/Retina displays in custom GnuCash widgets
that render into offscreen Cairo image surfaces.
This updates the register header and dense calendar widgets to
create scale-aware backing surfaces using the GTK widget scale
factor and `cairo_surface_set_device_scale()`.
- Register column headers
- Scheduled transaction dense calendar
Tested locally on macOS Apple Silicon with a native arm64 build.
Confirmed that:
- register header text now renders crisply
- scheduled transaction dense calendar text now renders crisply
diff --git a/gnucash/gnome-utils/gnc-dense-cal.c b/gnucash/gnome-utils/gnc-dense-cal.c
index 07c23a3010..ea378798d0 100644
--- a/gnucash/gnome-utils/gnc-dense-cal.c
+++ b/gnucash/gnome-utils/gnc-dense-cal.c
@@ -712,15 +712,20 @@ gdc_reconfig (GncDenseCal *dcal)
{
GtkWidget *widget;
GtkAllocation alloc;
+ int scale;
if (dcal->surface)
cairo_surface_destroy (dcal->surface);
widget = GTK_WIDGET(dcal->cal_drawing_area);
gtk_widget_get_allocation (widget, &alloc);
+ scale = gtk_widget_get_scale_factor (widget);
+ if (scale < 1)
+ scale = 1;
dcal->surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
- alloc.width,
- alloc.height);
+ alloc.width * scale,
+ alloc.height * scale);
+ cairo_surface_set_device_scale (dcal->surface, scale, scale);
gnc_dense_cal_draw_to_buffer (dcal);
}
@@ -980,8 +985,8 @@ gnc_dense_cal_draw_to_buffer (GncDenseCal *dcal)
gtk_style_context_add_class (stylectxt, GTK_STYLE_CLASS_CALENDAR);
gtk_render_background (stylectxt, cr, 0, 0,
- cairo_image_surface_get_width (dcal->surface),
- cairo_image_surface_get_height (dcal->surface));
+ alloc.width,
+ alloc.height);
gtk_style_context_remove_class (stylectxt, GTK_STYLE_CLASS_BACKGROUND);
diff --git a/gnucash/register/register-gnome/gnucash-header.c b/gnucash/register/register-gnome/gnucash-header.c
index 426d2f61d7..0406637b45 100644
--- a/gnucash/register/register-gnome/gnucash-header.c
+++ b/gnucash/register/register-gnome/gnucash-header.c
@@ -68,6 +68,7 @@ gnc_header_draw_offscreen (GncHeader *header)
int row_offset;
CellBlock *cb;
int i;
+ int scale;
cairo_t *cr;
virt_loc.vcell_loc.virt_row = 0;
@@ -83,9 +84,13 @@ gnc_header_draw_offscreen (GncHeader *header)
if (header->surface)
cairo_surface_destroy (header->surface);
+ scale = gtk_widget_get_scale_factor (GTK_WIDGET(header));
+ if (scale < 1)
+ scale = 1;
header->surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
- header->width,
- header->height);
+ header->width * scale,
+ header->height * scale);
+ cairo_surface_set_device_scale (header->surface, scale, scale);
cr = cairo_create (header->surface);
@@ -689,4 +694,3 @@ gnc_header_new (GnucashSheet *sheet)
return layout;
}
-
commit b9fd1c3ecad2c7eba331099f61ee65469a2b23d6
Author: Sherlock <119709043+agwekixj at users.noreply.github.com>
Date: Wed May 6 13:55:25 2026 -0700
Remove remaining obsolete IMContext from sheet
This patch removes IMContext state being maintained in the sheet's private area but not been used for over six years.
diff --git a/gnucash/register/register-gnome/gnucash-sheet.c b/gnucash/register/register-gnome/gnucash-sheet.c
index 4fca89639c..c1788d17a2 100644
--- a/gnucash/register/register-gnome/gnucash-sheet.c
+++ b/gnucash/register/register-gnome/gnucash-sheet.c
@@ -82,8 +82,6 @@ static void gnucash_sheet_deactivate_cursor_cell (GnucashSheet *sheet);
static void gnucash_sheet_activate_cursor_cell (GnucashSheet *sheet,
gboolean changed_cells);
static void gnucash_sheet_stop_editing (GnucashSheet *sheet);
-static gboolean gnucash_sheet_check_direct_update_cell (GnucashSheet *sheet,
- const VirtualLocation virt_loc);
gboolean gnucash_sheet_draw_cb (GtkWidget *widget, cairo_t *cr,
G_GNUC_UNUSED gpointer data);
@@ -275,7 +273,6 @@ gnucash_sheet_stop_editing (GnucashSheet *sheet)
sheet->delete_signal);
sheet->insert_signal = 0;
sheet->delete_signal = 0;
- sheet->direct_update_cell = FALSE;
gnucash_sheet_hide_editing_cursor (sheet);
@@ -428,7 +425,6 @@ gnucash_sheet_activate_cursor_cell (GnucashSheet *sheet,
}
gnucash_sheet_set_position (sheet, index + trailing);
}
- sheet->direct_update_cell = gnucash_sheet_check_direct_update_cell (sheet, virt_loc);
}
// when a gui refresh is called, we end up here so only grab the focus
// if the sheet is showing on the current plugin_page
@@ -1276,23 +1272,6 @@ gnucash_sheet_focus_out_event (GtkWidget *widget, GdkEventFocus *event)
return FALSE;
}
-static gboolean
-gnucash_sheet_check_direct_update_cell (GnucashSheet *sheet,
- const VirtualLocation virt_loc)
-{
- const gchar *type_name;
-
- 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)
- || (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;
-}
-
static void
gnucash_sheet_start_editing_at_cursor (GnucashSheet *sheet)
{
@@ -1784,7 +1763,7 @@ pass_to_entry_handler (GnucashSheet *sheet, GdkEventKey *event)
}
static gboolean
-gnucash_sheet_key_press_event_internal (GtkWidget *widget, GdkEventKey *event)
+gnucash_sheet_key_press_event (GtkWidget *widget, GdkEventKey *event)
{
Table *table;
GnucashSheet *sheet;
@@ -1866,27 +1845,6 @@ gnucash_sheet_key_press_event_internal (GtkWidget *widget, GdkEventKey *event)
return TRUE;
}
-static gboolean
-gnucash_sheet_key_press_event (GtkWidget *widget, GdkEventKey *event)
-{
- GnucashSheet *sheet;
-
- 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);
- /* bug#60582 comment#27 2
- save shift state to enable <shift minus> and <shift equal>
- */
-
- sheet->shift_state = event->state & GDK_SHIFT_MASK;
- sheet->keyval_state =
- (event->keyval == GDK_KEY_KP_Decimal) ? GDK_KEY_KP_Decimal : 0;
-
- return gnucash_sheet_key_press_event_internal (widget, event);
-}
-
static gboolean
gnucash_sheet_key_release_event (GtkWidget *widget, GdkEventKey *event)
{
@@ -2378,10 +2336,6 @@ gnucash_sheet_init (GnucashSheet *sheet)
| GDK_POINTER_MOTION_MASK
| GDK_POINTER_MOTION_HINT_MASK));
- /* setup IMContext */
- sheet->direct_update_cell = FALSE;
- sheet->shift_state = 0;
- sheet->keyval_state = 0;
sheet->bound = sheet->pos = 0;
}
diff --git a/gnucash/register/register-gnome/gnucash-sheetP.h b/gnucash/register/register-gnome/gnucash-sheetP.h
index 32027c7051..31ea4c2ee8 100644
--- a/gnucash/register/register-gnome/gnucash-sheetP.h
+++ b/gnucash/register/register-gnome/gnucash-sheetP.h
@@ -99,9 +99,6 @@ struct _GnucashSheet
GFunc open_doclink_cb;
gpointer open_doclink_cb_data;
- guint shift_state;
- guint keyval_state;
- gboolean direct_update_cell; /** Indicates that this cell has special operation keys. */
int pos, bound; /** Corresponds to GtkEditable's current_pos and selection_bound */
};
Summary of changes:
gnucash/gnome-utils/gnc-dense-cal.c | 13 +++++--
gnucash/register/register-gnome/gnucash-header.c | 10 +++--
gnucash/register/register-gnome/gnucash-sheet.c | 48 +-----------------------
gnucash/register/register-gnome/gnucash-sheetP.h | 3 --
4 files changed, 17 insertions(+), 57 deletions(-)
More information about the gnucash-changes
mailing list