gnucash stable: Multiple changes pushed

John Ralls jralls at code.gnucash.org
Sat May 27 10:12:28 EDT 2023


Updated	 via  https://github.com/Gnucash/gnucash/commit/b56eff68 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/dd5be317 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/1b9bd075 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/aca60210 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/945f63bd (commit)
	 via  https://github.com/Gnucash/gnucash/commit/2213e63e (commit)
	 via  https://github.com/Gnucash/gnucash/commit/39a1bfd1 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/fea6405f (commit)
	 via  https://github.com/Gnucash/gnucash/commit/80f370f0 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/546a91a5 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/b5497dc4 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/52a9af21 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/02f61c6d (commit)
	 via  https://github.com/Gnucash/gnucash/commit/3db83b7a (commit)
	 via  https://github.com/Gnucash/gnucash/commit/5d98cc4c (commit)
	 via  https://github.com/Gnucash/gnucash/commit/965fe59a (commit)
	 via  https://github.com/Gnucash/gnucash/commit/b621b5cd (commit)
	 via  https://github.com/Gnucash/gnucash/commit/d4649bc6 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/fd56cb6b (commit)
	 via  https://github.com/Gnucash/gnucash/commit/c632164d (commit)
	 via  https://github.com/Gnucash/gnucash/commit/faba15a4 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/b669d272 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/9a8f54a2 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/b3e13d46 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/7c7ec317 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/23e4d0e1 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/5d39d83a (commit)
	 via  https://github.com/Gnucash/gnucash/commit/5d955654 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/167c55e5 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/8e36a645 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/cce0ccff (commit)
	from  https://github.com/Gnucash/gnucash/commit/6111184c (commit)



commit b56eff6821b20371fbdac002139a83ef21422a51
Merge: dd5be317d8 cce0ccff7b
Author: John Ralls <jralls at ceridwen.us>
Date:   Sat May 27 10:10:44 2023 -0400

    Merge Richard Cohen's 'fix-show-log-window' into stable.


commit dd5be317d8f0da0d6ca63fe01a143864214f4b77
Merge: 1b9bd0752b 945f63bd4d
Author: John Ralls <jralls at ceridwen.us>
Date:   Sat May 27 10:09:05 2023 -0400

    Merge Richard Cohen's 'define-type' into stable.


commit 1b9bd0752b2ae759fce28468f5d62d9d5140331f
Merge: 6111184c73 aca602103e
Author: John Ralls <jralls at ceridwen.us>
Date:   Sat May 27 10:06:42 2023 -0400

    Merge Simon Arlott's 'bug-798796' into stable.


commit aca602103e113c6e0d33ad30e8d11a0926ed5eba
Author: Simon Arlott <sa.me.uk>
Date:   Fri May 26 19:16:46 2023 +0100

    Bug 798796 - Account list incomplete in report options
    
    Allow stock/fund accounts that are descendants of Bank accounts to be
    selected for the Advanced Portfolio, Investment Lots and Investment
    Portfolio reports.

diff --git a/gnucash/report/reports/standard/advanced-portfolio.scm b/gnucash/report/reports/standard/advanced-portfolio.scm
index 7421dcddda..935d560c9a 100644
--- a/gnucash/report/reports/standard/advanced-portfolio.scm
+++ b/gnucash/report/reports/standard/advanced-portfolio.scm
@@ -129,7 +129,7 @@ by preventing negative stock balances.<br/>")
       (filter gnc:account-is-stock?
               (gnc-account-get-descendants-sorted
                (gnc-get-current-root-account)))
-      (list ACCT-TYPE-ASSET ACCT-TYPE-STOCK ACCT-TYPE-MUTUAL))
+      (list ACCT-TYPE-ASSET ACCT-TYPE-BANK ACCT-TYPE-STOCK ACCT-TYPE-MUTUAL))
 
     (gnc-register-simple-boolean-option options
       gnc:pagename-accounts optname-zero-shares "e"
diff --git a/gnucash/report/reports/standard/investment-lots.scm b/gnucash/report/reports/standard/investment-lots.scm
index 741740811d..ae23c33cd7 100644
--- a/gnucash/report/reports/standard/investment-lots.scm
+++ b/gnucash/report/reports/standard/investment-lots.scm
@@ -147,7 +147,7 @@
       (filter gnc:account-is-stock?
               (gnc-account-get-descendants-sorted
                (gnc-get-current-root-account)))
-    (list ACCT-TYPE-ASSET ACCT-TYPE-STOCK ACCT-TYPE-MUTUAL))
+    (list ACCT-TYPE-ASSET ACCT-TYPE-BANK ACCT-TYPE-STOCK ACCT-TYPE-MUTUAL))
 
     (gnc-register-simple-boolean-option options
         gnc:pagename-accounts
diff --git a/gnucash/report/reports/standard/portfolio.scm b/gnucash/report/reports/standard/portfolio.scm
index 19432a30f0..eb516b3a99 100644
--- a/gnucash/report/reports/standard/portfolio.scm
+++ b/gnucash/report/reports/standard/portfolio.scm
@@ -65,7 +65,7 @@
       (gnc:filter-accountlist-type
        (list ACCT-TYPE-STOCK ACCT-TYPE-MUTUAL)
        (gnc-account-get-descendants-sorted (gnc-get-current-root-account)))
-      (list ACCT-TYPE-ASSET ACCT-TYPE-STOCK ACCT-TYPE-MUTUAL))
+      (list ACCT-TYPE-ASSET ACCT-TYPE-BANK ACCT-TYPE-STOCK ACCT-TYPE-MUTUAL))
 
     (gnc-register-simple-boolean-option options
       gnc:pagename-accounts optname-zero-shares "e"

commit 945f63bd4df90b0034a3132964549a17ebbbf4e8
Author: Richard Cohen <richard at daijobu.co.uk>
Date:   Thu May 4 17:32:54 2023 +0100

    Refactor: DEFINE_TYPE GnucashSheet < GtkLayout

diff --git a/gnucash/register/register-gnome/gnucash-sheet.c b/gnucash/register/register-gnome/gnucash-sheet.c
index d2ef3ce62b..3590e909c9 100644
--- a/gnucash/register/register-gnome/gnucash-sheet.c
+++ b/gnucash/register/register-gnome/gnucash-sheet.c
@@ -70,8 +70,6 @@ enum
 
 /* This static indicates the debugging module that this .o belongs to. */
 static QofLogModule log_module = G_LOG_DOMAIN;
-static GtkLayout *sheet_parent_class;
-
 
 /** Prototypes *********************************************************/
 
@@ -91,6 +89,7 @@ gboolean gnucash_sheet_draw_cb (GtkWidget *widget, cairo_t *cr,
 
 /** Implementation *****************************************************/
 
+G_DEFINE_TYPE (GnucashSheet, gnucash_sheet, GTK_TYPE_LAYOUT);
 
 /* gtk_editable_set_position sets both current_pos and selection_bound to the
  * supplied value. gtk_editable_select_region(start, end) sets current_pos to
@@ -802,8 +801,7 @@ gnucash_sheet_finalize (GObject *object)
 
     g_object_unref (sheet->cursor);
 
-    if (G_OBJECT_CLASS(sheet_parent_class)->finalize)
-        (*G_OBJECT_CLASS(sheet_parent_class)->finalize)(object);
+    (*G_OBJECT_CLASS(gnucash_sheet_parent_class)->finalize)(object);
 }
 
 
@@ -1209,8 +1207,8 @@ gnucash_sheet_size_allocate (GtkWidget *widget, GtkAllocation *allocation)
 
     ENTER("widget=%p, allocation=%p", widget, allocation);
 
-    if (GTK_WIDGET_CLASS(sheet_parent_class)->size_allocate)
-        (*GTK_WIDGET_CLASS(sheet_parent_class)->size_allocate)
+    if (GTK_WIDGET_CLASS(gnucash_sheet_parent_class)->size_allocate)
+        (*GTK_WIDGET_CLASS(gnucash_sheet_parent_class)->size_allocate)
         (widget, allocation);
 
     if (allocation->height == sheet->window_height &&
@@ -1254,8 +1252,8 @@ gnucash_sheet_focus_in_event (GtkWidget *widget, GdkEventFocus *event)
 {
     GnucashSheet *sheet = GNUCASH_SHEET(widget);
 
-    if (GTK_WIDGET_CLASS(sheet_parent_class)->focus_in_event)
-        (*GTK_WIDGET_CLASS(sheet_parent_class)->focus_in_event)
+    if (GTK_WIDGET_CLASS(gnucash_sheet_parent_class)->focus_in_event)
+        (*GTK_WIDGET_CLASS(gnucash_sheet_parent_class)->focus_in_event)
         (widget, event);
 
     gnc_item_edit_focus_in (GNC_ITEM_EDIT(sheet->item_editor));
@@ -1268,8 +1266,8 @@ gnucash_sheet_focus_out_event (GtkWidget *widget, GdkEventFocus *event)
 {
     GnucashSheet *sheet = GNUCASH_SHEET(widget);
 
-    if (GTK_WIDGET_CLASS(sheet_parent_class)->focus_out_event)
-        (*GTK_WIDGET_CLASS(sheet_parent_class)->focus_out_event)
+    if (GTK_WIDGET_CLASS(gnucash_sheet_parent_class)->focus_out_event)
+        (*GTK_WIDGET_CLASS(gnucash_sheet_parent_class)->focus_out_event)
         (widget, event);
 
     gnc_item_edit_focus_out (GNC_ITEM_EDIT(sheet->item_editor));
@@ -2329,8 +2327,6 @@ gnucash_sheet_class_init (GnucashSheetClass *klass)
 
     gtk_widget_class_set_css_name (GTK_WIDGET_CLASS(klass), "gnc-id-sheet");
 
-    sheet_parent_class = g_type_class_peek_parent (klass);
-
     /* Method override */
     gobject_class->finalize = gnucash_sheet_finalize;
 
@@ -2393,37 +2389,6 @@ gnucash_sheet_init (GnucashSheet *sheet)
     sheet->bound = sheet->pos = 0;
 }
 
-
-GType
-gnucash_sheet_get_type (void)
-{
-    static GType gnucash_sheet_type = 0;
-
-    if (!gnucash_sheet_type)
-    {
-        static const GTypeInfo gnucash_sheet_info =
-        {
-            sizeof (GnucashSheetClass),
-            NULL,       /* base_init */
-            NULL,       /* base_finalize */
-            (GClassInitFunc) gnucash_sheet_class_init,
-            NULL,       /* class_finalize */
-            NULL,       /* class_data */
-            sizeof (GnucashSheet),
-            0,      /* n_preallocs */
-            (GInstanceInitFunc) gnucash_sheet_init
-        };
-
-        gnucash_sheet_type =
-            g_type_register_static (GTK_TYPE_LAYOUT,
-                                    "GnucashSheet",
-                                    &gnucash_sheet_info, 0);
-    }
-
-    return gnucash_sheet_type;
-}
-
-
 static gboolean
 gnucash_sheet_tooltip (GtkWidget  *widget, gint x, gint y,
                        gboolean    keyboard_mode,

commit 2213e63e3041cc4581b131e323c1c9ad10fcf010
Author: Richard Cohen <richard at daijobu.co.uk>
Date:   Thu May 4 17:32:43 2023 +0100

    Refactor: DEFINE_TYPE GnucashRegister < GtkGrid

diff --git a/gnucash/register/register-gnome/gnucash-register.c b/gnucash/register/register-gnome/gnucash-register.c
index 2fdf417e97..1324581307 100644
--- a/gnucash/register/register-gnome/gnucash-register.c
+++ b/gnucash/register/register-gnome/gnucash-register.c
@@ -69,7 +69,6 @@ enum
 
 /* This static indicates the debugging module that this .o belongs to. */
 static QofLogModule log_module = GNC_MOD_REGISTER;
-static GtkGrid *register_parent_class;
 static guint register_signals[LAST_SIGNAL];
 
 
@@ -95,6 +94,8 @@ struct _GnucashRegisterClass
 
 /** Implementation *****************************************************/
 
+G_DEFINE_TYPE (GnucashRegister, gnucash_register, GTK_TYPE_GRID)
+
 void
 gnucash_register_add_cell_types (void)
 {
@@ -367,8 +368,6 @@ gnucash_register_class_init (GnucashRegisterClass *klass)
 
     gtk_widget_class_set_css_name (GTK_WIDGET_CLASS(klass), "gnc-id-register");
 
-    register_parent_class = g_type_class_peek_parent (klass);
-
     register_signals[ACTIVATE_CURSOR] =
         g_signal_new("activate_cursor",
                      G_TYPE_FROM_CLASS(gobject_class),
@@ -428,37 +427,6 @@ gnucash_register_init (GnucashRegister *g_reg)
     gtk_grid_set_column_homogeneous (GTK_GRID(table), FALSE);
 }
 
-
-GType
-gnucash_register_get_type (void)
-{
-    static GType gnucash_register_type = 0;
-
-    if (!gnucash_register_type)
-    {
-        static const GTypeInfo gnucash_register_info =
-        {
-            sizeof (GnucashRegisterClass),
-            NULL,       /* base_init */
-            NULL,       /* base_finalize */
-            (GClassInitFunc) gnucash_register_class_init,
-            NULL,       /* class_finalize */
-            NULL,       /* class_data */
-            sizeof (GnucashRegister),
-            0,      /* n_preallocs */
-            (GInstanceInitFunc) gnucash_register_init,
-        };
-
-        gnucash_register_type = g_type_register_static
-                                (gtk_grid_get_type (),
-                                 "GnucashRegister",
-                                 &gnucash_register_info, 0);
-    }
-
-    return gnucash_register_type;
-}
-
-
 void
 gnucash_register_attach_popup (GnucashRegister *reg,
                                GtkWidget *popup,

commit 39a1bfd10da528887555d3f7d2ae8d654207a8e6
Author: Richard Cohen <richard at daijobu.co.uk>
Date:   Thu May 4 17:32:37 2023 +0100

    Refactor: DEFINE_TYPE GncItemList < GtkEventBox

diff --git a/gnucash/register/register-gnome/gnucash-item-list.c b/gnucash/register/register-gnome/gnucash-item-list.c
index 4bb631a0e0..febc0b2189 100644
--- a/gnucash/register/register-gnome/gnucash-item-list.c
+++ b/gnucash/register/register-gnome/gnucash-item-list.c
@@ -44,12 +44,13 @@ enum
     LAST_SIGNAL
 };
 
-static GtkEventBoxClass* gnc_item_list_parent_class;
 static guint gnc_item_list_signals[LAST_SIGNAL];
 
 gboolean _gnc_item_find_selection (GtkTreeModel* model, GtkTreePath* path,
                                    GtkTreeIter* iter, gpointer data);
 
+G_DEFINE_TYPE (GncItemList, gnc_item_list, GTK_TYPE_EVENT_BOX);
+
 gint
 gnc_item_list_num_entries (GncItemList* item_list)
 {
@@ -390,8 +391,6 @@ gnc_item_list_class_init (GncItemListClass* item_list_class)
 {
     GObjectClass*  object_class = G_OBJECT_CLASS (item_list_class);
 
-    gnc_item_list_parent_class = g_type_class_peek_parent (item_list_class);
-
     gtk_widget_class_set_css_name (GTK_WIDGET_CLASS(item_list_class), "gnc-id-sheet-list");
 
     gnc_item_list_signals[SELECT_ITEM] =
@@ -429,36 +428,6 @@ gnc_item_list_class_init (GncItemListClass* item_list_class)
     item_list_class->activate_item = NULL;
 }
 
-
-GType
-gnc_item_list_get_type (void)
-{
-    static GType gnc_item_list_type = 0;
-
-    if (gnc_item_list_type == 0)
-    {
-        static const GTypeInfo gnc_item_list_info =
-        {
-            sizeof (GncItemListClass),
-            NULL,
-            NULL,
-            (GClassInitFunc)  gnc_item_list_class_init,
-            NULL,
-            NULL,
-            sizeof (GncItemList),
-            0,
-            (GInstanceInitFunc) gnc_item_list_init
-        };
-
-        gnc_item_list_type =
-            g_type_register_static (GTK_TYPE_EVENT_BOX, "GncItemList",
-                                    &gnc_item_list_info, 0);
-    }
-
-    return gnc_item_list_type;
-}
-
-
 static void
 tree_view_selection_changed (GtkTreeSelection* selection,
                              gpointer data)

commit fea6405f789c38f4ed5348747cea1b40c165fa54
Author: Richard Cohen <richard at daijobu.co.uk>
Date:   Thu May 4 17:32:31 2023 +0100

    Refactor: DEFINE_TYPE GncItemEditTb < GtkToggleButton

diff --git a/gnucash/register/register-gnome/gnucash-item-edit.c b/gnucash/register/register-gnome/gnucash-item-edit.c
index 1f2156f878..74316db005 100644
--- a/gnucash/register/register-gnome/gnucash-item-edit.c
+++ b/gnucash/register/register-gnome/gnucash-item-edit.c
@@ -62,11 +62,12 @@ enum
 
 static QofLogModule log_module = G_LOG_DOMAIN;
 
-static GtkToggleButtonClass *gnc_item_edit_tb_parent_class;
 static void gnc_item_edit_destroying (GtkWidget *this, gpointer data);
 
 G_DEFINE_TYPE (GncItemEdit, gnc_item_edit, GTK_TYPE_BOX)
 
+G_DEFINE_TYPE (GncItemEditTb, gnc_item_edit_tb, GTK_TYPE_TOGGLE_BUTTON)
+
 static void
 gnc_item_edit_tb_init (GncItemEditTb *item_edit_tb)
 {
@@ -153,8 +154,6 @@ gnc_item_edit_tb_class_init (GncItemEditTbClass *gnc_item_edit_tb_class)
 
     gtk_widget_class_set_css_name (GTK_WIDGET_CLASS(gnc_item_edit_tb_class), "button");
 
-    gnc_item_edit_tb_parent_class = g_type_class_peek_parent (gnc_item_edit_tb_class);
-
     object_class = G_OBJECT_CLASS(gnc_item_edit_tb_class);
     widget_class = GTK_WIDGET_CLASS(gnc_item_edit_tb_class);
 
@@ -174,34 +173,6 @@ gnc_item_edit_tb_class_init (GncItemEditTbClass *gnc_item_edit_tb_class)
     widget_class->get_preferred_height = gnc_item_edit_tb_get_preferred_height;
 }
 
-GType
-gnc_item_edit_tb_get_type (void)
-{
-    static GType gnc_item_edit_tb_type = 0;
-
-    if (!gnc_item_edit_tb_type)
-    {
-        static const GTypeInfo gnc_item_edit_tb_info =
-        {
-            sizeof (GncItemEditTbClass),
-            NULL,
-            NULL,
-            (GClassInitFunc)gnc_item_edit_tb_class_init,
-            NULL,
-            NULL,
-            sizeof (GncItemEditTb),
-            0, /* n_preallocs */
-            (GInstanceInitFunc)gnc_item_edit_tb_init,
-            NULL,
-        };
-        gnc_item_edit_tb_type =
-            g_type_register_static (GTK_TYPE_TOGGLE_BUTTON,
-                                    "GncItemEditTb",
-                                    &gnc_item_edit_tb_info, 0);
-    }
-    return gnc_item_edit_tb_type;
-}
-
 GtkWidget *
 gnc_item_edit_tb_new (GnucashSheet *sheet)
 {

commit 80f370f0d29cc11ea44e5582bb7618314349e284
Author: Richard Cohen <richard at daijobu.co.uk>
Date:   Fri May 5 13:36:01 2023 +0100

    Refactor: DEFINE_TYPE GncItemEdit < GtkBox

diff --git a/gnucash/register/register-gnome/gnucash-item-edit.c b/gnucash/register/register-gnome/gnucash-item-edit.c
index da6b5044b3..1f2156f878 100644
--- a/gnucash/register/register-gnome/gnucash-item-edit.c
+++ b/gnucash/register/register-gnome/gnucash-item-edit.c
@@ -61,10 +61,12 @@ enum
 #define MIN_BUTT_WIDTH 20 // minimum size for a button excluding border
 
 static QofLogModule log_module = G_LOG_DOMAIN;
-static GtkBoxClass *gnc_item_edit_parent_class;
 
 static GtkToggleButtonClass *gnc_item_edit_tb_parent_class;
 static void gnc_item_edit_destroying (GtkWidget *this, gpointer data);
+
+G_DEFINE_TYPE (GncItemEdit, gnc_item_edit, GTK_TYPE_BOX)
+
 static void
 gnc_item_edit_tb_init (GncItemEditTb *item_edit_tb)
 {
@@ -775,8 +777,6 @@ gnc_item_edit_class_init (GncItemEditClass *gnc_item_edit_class)
 
     gtk_widget_class_set_css_name (GTK_WIDGET_CLASS(gnc_item_edit_class), "gnc-id-cursor");
 
-    gnc_item_edit_parent_class = g_type_class_peek_parent (gnc_item_edit_class);
-
     object_class = G_OBJECT_CLASS(gnc_item_edit_class);
     widget_class = GTK_WIDGET_CLASS(gnc_item_edit_class);
 
@@ -796,39 +796,6 @@ gnc_item_edit_class_init (GncItemEditClass *gnc_item_edit_class)
     widget_class->get_preferred_height = gnc_item_edit_get_preferred_height;
 }
 
-/* FIXME: This way of initializing GObjects is obsolete. We should be
- * using G_DECLARE_FINAL_TYPE instead of rolling _get_type by hand.
- */
-GType
-gnc_item_edit_get_type (void)
-{
-    static GType gnc_item_edit_type = 0;
-
-    if (!gnc_item_edit_type)
-    {
-        static const GTypeInfo gnc_item_edit_info =
-        {
-            sizeof (GncItemEditClass),
-            NULL,
-            NULL,
-            (GClassInitFunc) gnc_item_edit_class_init,
-            NULL,
-            NULL,
-            sizeof (GncItemEdit),
-            0, /* n_preallocs */
-            (GInstanceInitFunc) gnc_item_edit_init,
-            NULL,
-        };
-
-        gnc_item_edit_type =
-            g_type_register_static (GTK_TYPE_BOX,
-                                    "GncItemEdit",
-                                    &gnc_item_edit_info, 0);
-    }
-
-    return gnc_item_edit_type;
-}
-
 gint
 gnc_item_edit_get_margin (GncItemEdit *item_edit, Sides side)
 {

commit 546a91a5753a9de848c59447d1c9f6e87bdddd68
Author: Richard Cohen <richard at daijobu.co.uk>
Date:   Thu May 4 17:32:24 2023 +0100

    Refactor: DEFINE_TYPE GncHeader < GtkLayout

diff --git a/gnucash/register/register-gnome/gnucash-header.c b/gnucash/register/register-gnome/gnucash-header.c
index e9cad07f51..4c8f7c55ef 100644
--- a/gnucash/register/register-gnome/gnucash-header.c
+++ b/gnucash/register/register-gnome/gnucash-header.c
@@ -40,8 +40,6 @@
 
 #include "gnucash-header.h"
 
-static GtkLayout *parent_class;
-
 enum
 {
     PROP_0,
@@ -49,6 +47,8 @@ enum
     PROP_CURSOR_NAME, /* the name of the current cursor */
 };
 
+G_DEFINE_TYPE (GncHeader, gnc_header, GTK_TYPE_LAYOUT)
+
 static void
 gnc_header_draw_offscreen (GncHeader *header)
 {
@@ -261,8 +261,8 @@ gnc_header_unrealize (GtkWidget *widget)
         g_object_unref (header->normal_cursor);
     header->normal_cursor = NULL;
 
-    if (GTK_WIDGET_CLASS(parent_class)->unrealize)
-        GTK_WIDGET_CLASS(parent_class)->unrealize (GTK_WIDGET(header));
+    if (GTK_WIDGET_CLASS(gnc_header_parent_class)->unrealize)
+        GTK_WIDGET_CLASS(gnc_header_parent_class)->unrealize (GTK_WIDGET(header));
 }
 
 
@@ -276,7 +276,7 @@ gnc_header_finalize (GObject *object)
     g_free (header->cursor_name);
     header->cursor_name = NULL;
 
-    G_OBJECT_CLASS(parent_class)->finalize (object);
+    G_OBJECT_CLASS(gnc_header_parent_class)->finalize (object);
 }
 
 
@@ -645,8 +645,6 @@ gnc_header_class_init (GncHeaderClass *header_class)
 
     gtk_widget_class_set_css_name (GTK_WIDGET_CLASS(header_class), "gnc-id-header");
 
-    parent_class = g_type_class_peek_parent (header_class);
-
     object_class->finalize = gnc_header_finalize;
     object_class->get_property = gnc_header_get_property;
     object_class->set_property = gnc_header_set_property;
@@ -672,36 +670,6 @@ gnc_header_class_init (GncHeaderClass *header_class)
     item_class->event     = gnc_header_event;
 }
 
-
-GType
-gnc_header_get_type (void)
-{
-    static GType gnc_header_type = 0;
-
-    if (!gnc_header_type)
-    {
-        static const GTypeInfo gnc_header_info =
-        {
-            sizeof (GncHeaderClass),
-            NULL,
-            NULL,
-            (GClassInitFunc) gnc_header_class_init,
-            NULL,
-            NULL,
-            sizeof (GncHeader),
-            0,
-            (GInstanceInitFunc) gnc_header_init
-        };
-
-        gnc_header_type = g_type_register_static (GTK_TYPE_LAYOUT,
-                          "GncHeader",
-                          &gnc_header_info, 0);
-    }
-
-    return gnc_header_type;
-}
-
-
 GtkWidget *
 gnc_header_new (GnucashSheet *sheet)
 {

commit b5497dc45b412e97defa9cd50b747832ae867f08
Author: Richard Cohen <richard at daijobu.co.uk>
Date:   Mon Apr 24 12:43:19 2023 +0100

    Refactor: DEFINE_TYPE GncDatePicker < GtkBox

diff --git a/gnucash/register/register-gnome/gnucash-date-picker.c b/gnucash/register/register-gnome/gnucash-date-picker.c
index 9cb950460c..6a0b9a0d6f 100644
--- a/gnucash/register/register-gnome/gnucash-date-picker.c
+++ b/gnucash/register/register-gnome/gnucash-date-picker.c
@@ -28,7 +28,6 @@
 #include <gdk/gdkkeysyms.h>
 #include "gnucash-date-picker.h"
 
-
 /* Item list signals */
 enum
 {
@@ -37,9 +36,9 @@ enum
     LAST_SIGNAL
 };
 
-static GtkBoxClass *gnc_date_picker_parent_class;
 static guint gnc_date_picker_signals[LAST_SIGNAL];
 
+G_DEFINE_TYPE (GNCDatePicker, gnc_date_picker, GTK_TYPE_BOX)
 
 void
 gnc_date_picker_set_date (GNCDatePicker *date_picker,
@@ -118,9 +117,6 @@ gnc_date_picker_key_event(GtkWidget *widget, GdkEventKey *event, gpointer data)
 static void
 gnc_date_picker_class_init (GNCDatePickerClass *date_picker_class)
 {
-    gnc_date_picker_parent_class =
-        GTK_BOX_CLASS (g_type_class_peek_parent (date_picker_class));
-
     GObjectClass  *object_class = G_OBJECT_CLASS (date_picker_class);
 
     gtk_widget_class_set_css_name (GTK_WIDGET_CLASS(date_picker_class), "gnc-id-date-picker");
@@ -147,35 +143,6 @@ gnc_date_picker_class_init (GNCDatePickerClass *date_picker_class)
     date_picker_class->date_picked = NULL;
 }
 
-GType
-gnc_date_picker_get_type (void)
-{
-    static GType gnc_date_picker_type = 0;
-
-    if (gnc_date_picker_type == 0)
-    {
-        GTypeInfo type_info =
-        {
-            sizeof(GNCDatePickerClass),       /* class_size */
-            NULL,   				/* base_init */
-            NULL,				/* base_finalize */
-            (GClassInitFunc)gnc_date_picker_class_init,
-            NULL,				/* class_finalize */
-            NULL,				/* class_data */
-            sizeof(GNCDatePicker),		/* */
-            0,				/* n_preallocs */
-            (GInstanceInitFunc)gnc_date_picker_init,
-        };
-
-        gnc_date_picker_type =
-            g_type_register_static (GTK_TYPE_BOX,
-                                    "GNCDatePicker",
-                                    &type_info, 0);
-    }
-
-    return gnc_date_picker_type;
-}
-
 
 static void
 day_selected (GtkCalendar *calendar, GNCDatePicker *gdp)

commit 52a9af217784894347ab76e70f04e05889cdfc18
Author: Richard Cohen <richard at daijobu.co.uk>
Date:   Thu May 4 18:08:57 2023 +0100

    Refactor: DEFINE_TYPE GnucashCursor < GObject

diff --git a/gnucash/register/register-gnome/gnucash-cursor.c b/gnucash/register/register-gnome/gnucash-cursor.c
index 1751d7e775..1dff192119 100644
--- a/gnucash/register/register-gnome/gnucash-cursor.c
+++ b/gnucash/register/register-gnome/gnucash-cursor.c
@@ -36,8 +36,6 @@
 #include "gnucash-sheetP.h"
 #include "gnucash-style.h"
 
-static GObjectClass *gnucash_cursor_parent_class;
-
 enum
 {
     PROP_0,
@@ -45,6 +43,9 @@ enum
 };
 
 
+G_DEFINE_TYPE (GnucashCursor, gnucash_cursor, G_TYPE_OBJECT)
+
+
 static void
 gnucash_cursor_get_pixel_coords (GnucashCursor *cursor,
                                  gint *x, gint *y,
@@ -268,6 +269,12 @@ gnucash_cursor_get_property (GObject         *object,
 }
 
 
+static void
+gnucash_cursor_init (GnucashCursor *instance)
+{
+}
+
+
 static void
 gnucash_cursor_class_init (GnucashCursorClass *klass)
 {
@@ -275,8 +282,6 @@ gnucash_cursor_class_init (GnucashCursorClass *klass)
 
     object_class = G_OBJECT_CLASS (klass);
 
-    gnucash_cursor_parent_class = g_type_class_peek_parent (klass);
-
     /* GObject method overrides */
     object_class->set_property = gnucash_cursor_set_property;
     object_class->get_property = gnucash_cursor_get_property;
@@ -293,36 +298,6 @@ gnucash_cursor_class_init (GnucashCursorClass *klass)
 }
 
 
-GType
-gnucash_cursor_get_type (void)
-{
-    static GType gnucash_cursor_type = 0;
-
-    if (!gnucash_cursor_type)
-    {
-        static const GTypeInfo gnucash_cursor_info =
-        {
-            sizeof (GnucashCursorClass),
-            NULL,		/* base_init */
-            NULL,		/* base_finalize */
-            (GClassInitFunc) gnucash_cursor_class_init,
-            NULL,		/* class_finalize */
-            NULL,		/* class_data */
-            sizeof (GnucashCursor),
-            0,		/* n_preallocs */
-            NULL        /* instance initialization */
-        };
-
-        gnucash_cursor_type =
-            g_type_register_static (G_TYPE_OBJECT,
-                                    "GnucashCursor",
-                                    &gnucash_cursor_info, 0);
-    }
-
-    return gnucash_cursor_type;
-}
-
-
 GnucashCursor *
 gnucash_cursor_new (GnucashSheet *sheet)
 {

commit 02f61c6d76bad32bd7231cb7841445c721b4bd54
Author: Richard Cohen <richard at daijobu.co.uk>
Date:   Thu May 4 17:55:02 2023 +0100

    Refactor: DEFINE_TYPE GNCReconcileView < GNCQueryView

diff --git a/gnucash/gnome/reconcile-view.c b/gnucash/gnome/reconcile-view.c
index cfd66bd33c..27924be5ad 100644
--- a/gnucash/gnome/reconcile-view.c
+++ b/gnucash/gnome/reconcile-view.c
@@ -52,12 +52,9 @@ enum
 
 
 /** Static Globals ****************************************************/
-static GNCQueryViewClass *parent_class = NULL;
 static guint reconcile_view_signals[LAST_SIGNAL] = {0};
 
 /** Static function declarations **************************************/
-static void gnc_reconcile_view_init (GNCReconcileView *view);
-static void gnc_reconcile_view_class_init (GNCReconcileViewClass *klass);
 static void gnc_reconcile_view_finalize (GObject *object);
 static gpointer gnc_reconcile_view_is_reconciled (gpointer item,
                                                   gpointer user_data);
@@ -79,34 +76,7 @@ static gboolean gnc_reconcile_view_tooltip_cb (GNCQueryView *qview,
                                                GtkTooltip* tooltip,
                                                gpointer* user_data);
 
-GType
-gnc_reconcile_view_get_type (void)
-{
-    static GType gnc_reconcile_view_type = 0;
-
-    if (gnc_reconcile_view_type == 0)
-    {
-        static const GTypeInfo gnc_reconcile_view_info =
-        {
-            sizeof (GNCReconcileViewClass),
-            NULL,
-            NULL,
-            (GClassInitFunc) gnc_reconcile_view_class_init,
-            NULL,
-            NULL,
-            sizeof (GNCReconcileView),
-            0,
-            (GInstanceInitFunc) gnc_reconcile_view_init
-        };
-
-        gnc_reconcile_view_type = g_type_register_static (GNC_TYPE_QUERY_VIEW,
-                                                          "GncReconcileView",
-                                                          &gnc_reconcile_view_info,
-                                                          0);
-    }
-    return gnc_reconcile_view_type;
-}
-
+G_DEFINE_TYPE (GNCReconcileView, gnc_reconcile_view, GNC_TYPE_QUERY_VIEW)
 
 static gboolean
 gnc_reconcile_view_tooltip_cb (GNCQueryView *qview, gint x, gint y,
@@ -495,8 +465,6 @@ gnc_reconcile_view_class_init (GNCReconcileViewClass *klass)
 
     object_class =  G_OBJECT_CLASS(klass);
 
-    parent_class = g_type_class_peek_parent (klass);
-
     reconcile_view_signals[TOGGLE_RECONCILED] =
         g_signal_new ("toggle_reconciled",
                       G_OBJECT_CLASS_TYPE(object_class),
@@ -822,7 +790,7 @@ gnc_reconcile_view_finalize (GObject *object)
         g_hash_table_destroy (view->reconciled);
         view->reconciled = NULL;
     }
-    G_OBJECT_CLASS(parent_class)->finalize (object);
+    G_OBJECT_CLASS(gnc_reconcile_view_parent_class)->finalize (object);
 }
 
 gint

commit 3db83b7a2cd2188662c9ca6c8a963f036a3fbc27
Author: Richard Cohen <richard at daijobu.co.uk>
Date:   Thu May 11 16:23:21 2023 +0100

    Refactor: DEFINE_TYPE GNCSplitReg < GtkBox

diff --git a/gnucash/gnome/gnc-split-reg.c b/gnucash/gnome/gnc-split-reg.c
index 8976e5153f..ed612032a0 100644
--- a/gnucash/gnome/gnc-split-reg.c
+++ b/gnucash/gnome/gnc-split-reg.c
@@ -171,41 +171,13 @@ void gnc_split_reg_size_allocate( GtkWidget *widget,
                                   gpointer user_data );
 
 
-static void gnc_split_reg_class_init( GNCSplitRegClass *klass );
-static void gnc_split_reg_init( GNCSplitReg *gsr );
 static void gnc_split_reg_init2( GNCSplitReg *gsr );
 void gnc_split_reg_dispose(GObject *obj);
 
 FROM_STRING_FUNC(SortType, ENUM_LIST_SORTTYPE)
 AS_STRING_FUNC(SortType, ENUM_LIST_SORTTYPE)
 
-GType
-gnc_split_reg_get_type( void )
-{
-    static GType gnc_split_reg_type = 0;
-
-    if (!gnc_split_reg_type)
-    {
-        GTypeInfo type_info =
-        {
-            sizeof(GNCSplitRegClass),      /* class_size */
-            NULL,               /* base_init */
-            NULL,               /* base_finalize */
-            (GClassInitFunc)gnc_split_reg_class_init,
-            NULL,               /* class_finalize */
-            NULL,               /* class_data */
-            sizeof(GNCSplitReg),        /* */
-            0,                  /* n_preallocs */
-            (GInstanceInitFunc)gnc_split_reg_init,
-        };
-
-        gnc_split_reg_type = g_type_register_static( GTK_TYPE_BOX,
-                             "GNCSplitReg",
-                             &type_info, 0 );
-    }
-
-    return gnc_split_reg_type;
-}
+G_DEFINE_TYPE (GNCSplitReg, gnc_split_reg, GTK_TYPE_BOX)
 
 /* SIGNALS */
 enum gnc_split_reg_signal_enum

commit 5d98cc4c1db47c881e0bfcc3e5e77223d0ee6aea
Author: Richard Cohen <richard at daijobu.co.uk>
Date:   Thu May 4 17:32:05 2023 +0100

    Refactor: DEFINE_TYPE GncSxSlrTreeModelAdapter < GObject

diff --git a/gnucash/gnome/dialog-sx-since-last-run.c b/gnucash/gnome/dialog-sx-since-last-run.c
index 63f0d3e7c5..be82415924 100644
--- a/gnucash/gnome/dialog-sx-since-last-run.c
+++ b/gnucash/gnome/dialog-sx-since-last-run.c
@@ -72,7 +72,6 @@ struct _GncSxSinceLastRunDialog
 
 /* ------------------------------------------------------------ */
 
-static GObjectClass *parent_class = NULL;
 
 struct _GncSxSlrTreeModelAdapter
 {
@@ -92,9 +91,7 @@ typedef struct _GncSxSlrTreeModelAdapterClass
 } GncSxSlrTreeModelAdapterClass;
 
 GType gnc_sx_slr_tree_model_adapter_get_type (void);
-static void gnc_sx_slr_tree_model_adapter_class_init (GncSxSlrTreeModelAdapterClass *klass);
-static void gnc_sx_slr_tree_model_adapter_interface_init (gpointer g_iface, gpointer iface_data);
-static void gnc_sx_slr_tree_model_adapter_init (GTypeInstance *instance, gpointer klass);
+static void gnc_sx_slr_tree_model_adapter_interface_init (GtkTreeModelIface *tree_model);
 GncSxSlrTreeModelAdapter* gnc_sx_slr_tree_model_adapter_new (GncSxInstanceModel *instances);
 static void gnc_sx_slr_tree_model_adapter_dispose (GObject *obj);
 static void gnc_sx_slr_tree_model_adapter_finalize (GObject *obj);
@@ -149,49 +146,13 @@ _var_numeric_to_string (gnc_numeric *value, GString **str)
 
 /* ------------------------------------------------------------ */
 
-GType
-gnc_sx_slr_tree_model_adapter_get_type (void)
-{
-    static GType gsstma_type = 0;
-    if (gsstma_type == 0)
-    {
-        static const GTypeInfo info =
-        {
-            sizeof (GncSxSlrTreeModelAdapterClass),
-            NULL,                                                       /* base_init */
-            NULL,                                                       /* base_finalize */
-            (GClassInitFunc)gnc_sx_slr_tree_model_adapter_class_init,   /* class_init */
-            NULL,                                                       /* class_finalize */
-            NULL,                                                       /* class_data */
-            sizeof (GncSxSlrTreeModelAdapter),
-            0,                                                          /* n_preallocs */
-            (GInstanceInitFunc)gnc_sx_slr_tree_model_adapter_init       /* instance_init */
-        };
-        static const GInterfaceInfo itreeModel_info =
-        {
-            (GInterfaceInitFunc) gnc_sx_slr_tree_model_adapter_interface_init,    /* interface_init */
-            NULL,                                                                 /* interface_finalize */
-            NULL                                                                  /* interface_data */
-        };
-
-        gsstma_type = g_type_register_static (G_TYPE_OBJECT,
-                                              "GncSxSlrTreeModelAdapterType",
-                                              &info, 0);
-        g_type_add_interface_static (gsstma_type,
-                                     GTK_TYPE_TREE_MODEL,
-                                     &itreeModel_info);
-    }
-    return gsstma_type;
-}
+G_DEFINE_TYPE_WITH_CODE (GncSxSlrTreeModelAdapter, gnc_sx_slr_tree_model_adapter, G_TYPE_OBJECT,
+     G_IMPLEMENT_INTERFACE (GTK_TYPE_TREE_MODEL, gnc_sx_slr_tree_model_adapter_interface_init))
 
 static void
 gnc_sx_slr_tree_model_adapter_class_init (GncSxSlrTreeModelAdapterClass *klass)
 {
-    GObjectClass *obj_class;
-
-    parent_class = g_type_class_peek_parent (klass);
-
-    obj_class = G_OBJECT_CLASS(klass);
+    GObjectClass *obj_class = G_OBJECT_CLASS(klass);
 
     obj_class->dispose = gnc_sx_slr_tree_model_adapter_dispose;
     obj_class->finalize = gnc_sx_slr_tree_model_adapter_finalize;
@@ -300,10 +261,8 @@ gsslrtma_unref_node (GtkTreeModel *tree_model,
 }
 
 static void
-gnc_sx_slr_tree_model_adapter_interface_init (gpointer g_iface, gpointer iface_data)
+gnc_sx_slr_tree_model_adapter_interface_init (GtkTreeModelIface *tree_model)
 {
-    GtkTreeModelIface *tree_model = (GtkTreeModelIface*)g_iface;
-
     tree_model->get_flags = gsslrtma_get_flags;
     tree_model->get_n_columns = gsslrtma_get_n_columns;
     tree_model->get_column_type = gsslrtma_get_column_type;
@@ -377,9 +336,8 @@ enum
 };
 
 static void
-gnc_sx_slr_tree_model_adapter_init (GTypeInstance *instance, gpointer klass)
+gnc_sx_slr_tree_model_adapter_init (GncSxSlrTreeModelAdapter *adapter)
 {
-    GncSxSlrTreeModelAdapter *adapter = GNC_SX_SLR_TREE_MODEL_ADAPTER(instance);
     // columns:    thing-name, instance-state, variable-value, instance-visible, variable-visible, instance_state_sensitivity
     // at depth=0: <sx>,       N/A,            N/A,            N/A               N/A,              N/A
     // at depth=1: <instance>, <state>,        N/A,            <valid>,          N/A,              <valid>
@@ -777,14 +735,14 @@ gnc_sx_slr_tree_model_adapter_dispose (GObject *obj)
     g_object_unref (G_OBJECT(adapter->real));
     adapter->real = NULL;
 
-    G_OBJECT_CLASS(parent_class)->dispose (obj);
+    G_OBJECT_CLASS(gnc_sx_slr_tree_model_adapter_parent_class)->dispose (obj);
 }
 
 static void
 gnc_sx_slr_tree_model_adapter_finalize (GObject *obj)
 {
     g_return_if_fail (obj != NULL);
-    G_OBJECT_CLASS(parent_class)->finalize (obj);
+    G_OBJECT_CLASS(gnc_sx_slr_tree_model_adapter_parent_class)->finalize (obj);
 }
 
 GncSxSlrTreeModelAdapter*

commit 965fe59a46e8e5470527c664795a627d963c1cd3
Author: Richard Cohen <richard at daijobu.co.uk>
Date:   Thu May 4 17:31:50 2023 +0100

    Refactor: DEFINE_TYPE GncSxListTreeModelAdapter < GObject

diff --git a/gnucash/gnome-utils/gnc-sx-list-tree-model-adapter.c b/gnucash/gnome-utils/gnc-sx-list-tree-model-adapter.c
index b40c2785ca..14c689d45c 100644
--- a/gnucash/gnome-utils/gnc-sx-list-tree-model-adapter.c
+++ b/gnucash/gnome-utils/gnc-sx-list-tree-model-adapter.c
@@ -66,12 +66,9 @@ enum
     LAST_SIGNAL
 };
 
-static GObjectClass *parent_class = NULL;
+static void gsltma_tree_model_interface_init (GtkTreeModelIface *tree_model);
+static void gsltma_tree_sortable_interface_init (GtkTreeSortableIface *tree_sortable);
 
-static void gnc_sx_list_tree_model_adapter_class_init (GncSxListTreeModelAdapterClass *klass);
-static void gsltma_tree_model_interface_init (gpointer g_iface, gpointer iface_data);
-static void gsltma_tree_sortable_interface_init (gpointer g_iface, gpointer iface_data);
-static void gnc_sx_list_tree_model_adapter_init (GTypeInstance *instance, gpointer klass);
 static void gnc_sx_list_tree_model_adapter_dispose (GObject *obj);
 static void gnc_sx_list_tree_model_adapter_finalize (GObject *obj);
 
@@ -79,57 +76,15 @@ static guint gnc_sx_list_tree_model_adapter_signals[LAST_SIGNAL] = {0};
 
 static GncSxInstances* gsltma_get_sx_instances_from_orig_iter (GncSxListTreeModelAdapter *model, GtkTreeIter *orig_iter);
 
-GType
-gnc_sx_list_tree_model_adapter_get_type (void)
-{
-    static GType type = 0;
-    if (type == 0)
-    {
-        static const GTypeInfo info =
-        {
-            sizeof (GncSxListTreeModelAdapterClass),
-            NULL,   /* base_init */
-            NULL,   /* base_finalize */
-            (GClassInitFunc)gnc_sx_list_tree_model_adapter_class_init,   /* class_init */
-            NULL,   /* class_finalize */
-            NULL,   /* class_data */
-            sizeof (GncSxListTreeModelAdapter),
-            0,      /* n_preallocs */
-            (GInstanceInitFunc)gnc_sx_list_tree_model_adapter_init    /* instance_init */
-        };
-        static const GInterfaceInfo itree_model_info =
-        {
-            (GInterfaceInitFunc) gsltma_tree_model_interface_init,    /* interface_init */
-            NULL,               /* interface_finalize */
-            NULL                /* interface_data */
-        };
-        static const GInterfaceInfo itree_sortable_info =
-        {
-            (GInterfaceInitFunc) gsltma_tree_sortable_interface_init,    /* interface_init */
-            NULL,               /* interface_finalize */
-            NULL                /* interface_data */
-        };
-
-        type = g_type_register_static (G_TYPE_OBJECT,
-                                       "GncSxListTreeModelAdapterType",
-                                       &info, 0);
-        g_type_add_interface_static (type,
-                                     GTK_TYPE_TREE_MODEL,
-                                     &itree_model_info);
-        g_type_add_interface_static (type,
-                                     GTK_TYPE_TREE_SORTABLE,
-                                     &itree_sortable_info);
-    }
-    return type;
-}
+G_DEFINE_TYPE_WITH_CODE (GncSxListTreeModelAdapter, gnc_sx_list_tree_model_adapter, G_TYPE_OBJECT,
+    G_IMPLEMENT_INTERFACE (GTK_TYPE_TREE_MODEL, gsltma_tree_model_interface_init)
+    G_IMPLEMENT_INTERFACE (GTK_TYPE_TREE_SORTABLE, gsltma_tree_sortable_interface_init))
 
 static void
 gnc_sx_list_tree_model_adapter_class_init (GncSxListTreeModelAdapterClass *klass)
 {
     GObjectClass *obj_class = G_OBJECT_CLASS(klass);
 
-    parent_class = g_type_class_peek_parent (klass);
-
     obj_class->dispose = gnc_sx_list_tree_model_adapter_dispose;
     obj_class->finalize = gnc_sx_list_tree_model_adapter_finalize;
 
@@ -248,9 +203,8 @@ gsltma_unref_node (GtkTreeModel *tree_model,
 }
 
 static void
-gsltma_tree_model_interface_init (gpointer g_iface, gpointer iface_data)
+gsltma_tree_model_interface_init (GtkTreeModelIface *tree_model)
 {
-    GtkTreeModelIface *tree_model = (GtkTreeModelIface*)g_iface;
     tree_model->get_flags = gsltma_get_flags;
     tree_model->get_n_columns = gsltma_get_n_columns;
     tree_model->get_column_type = gsltma_get_column_type;
@@ -320,9 +274,8 @@ gsltma_has_default_sort_func (GtkTreeSortable  *sortable)
 }
 
 static void
-gsltma_tree_sortable_interface_init (gpointer g_iface, gpointer iface_data)
+gsltma_tree_sortable_interface_init (GtkTreeSortableIface *tree_sortable)
 {
-    GtkTreeSortableIface *tree_sortable = (GtkTreeSortableIface*)g_iface;
     tree_sortable->get_sort_column_id = gsltma_get_sort_column_id;
     tree_sortable->set_sort_column_id = gsltma_set_sort_column_id;
     tree_sortable->set_sort_func = gsltma_set_sort_func;
@@ -485,9 +438,8 @@ _enabled_comparator (GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpoint
 }
 
 static void
-gnc_sx_list_tree_model_adapter_init (GTypeInstance *instance, gpointer klass)
+gnc_sx_list_tree_model_adapter_init (GncSxListTreeModelAdapter *adapter)
 {
-    GncSxListTreeModelAdapter *adapter = GNC_SX_LIST_TREE_MODEL_ADAPTER(instance);
     adapter->orig = gtk_tree_store_new (5, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
     adapter->real = GTK_TREE_MODEL_SORT(gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL(adapter->orig)));
 
@@ -642,12 +594,12 @@ gnc_sx_list_tree_model_adapter_dispose (GObject *obj)
     g_object_unref (G_OBJECT(adapter->orig));
     adapter->orig = NULL;
 
-    G_OBJECT_CLASS(parent_class)->dispose (obj);
+    G_OBJECT_CLASS(gnc_sx_list_tree_model_adapter_parent_class)->dispose (obj);
 }
 
 static void
 gnc_sx_list_tree_model_adapter_finalize (GObject *obj)
 {
     g_return_if_fail (obj != NULL);
-    G_OBJECT_CLASS(parent_class)->finalize (obj);
+    G_OBJECT_CLASS(gnc_sx_list_tree_model_adapter_parent_class)->finalize (obj);
 }

commit b621b5cd99ec1224ceb2bcde711f187124d147ea
Author: Richard Cohen <richard at daijobu.co.uk>
Date:   Mon May 22 10:37:36 2023 +0100

    Refactor: DEFINE_TYPE GncSxInstanceDenseCalAdapter < GObject

diff --git a/gnucash/gnome-utils/gnc-sx-instance-dense-cal-adapter.c b/gnucash/gnome-utils/gnc-sx-instance-dense-cal-adapter.c
index 3672f4fe84..e5ff0d602b 100644
--- a/gnucash/gnome-utils/gnc-sx-instance-dense-cal-adapter.c
+++ b/gnucash/gnome-utils/gnc-sx-instance-dense-cal-adapter.c
@@ -40,6 +40,7 @@
 #define G_LOG_DOMAIN "gnc.gui.sx.adapter.sx-dense-cal"
 static const QofLogModule log_module = G_LOG_DOMAIN;
 
+static void gnc_sx_instance_dense_cal_adapter_interface_init(GncDenseCalModelIface *iface);
 static void gnc_sx_instance_dense_cal_adapter_dispose(GObject *obj);
 static void gnc_sx_instance_dense_cal_adapter_finalize(GObject *obj);
 
@@ -49,8 +50,6 @@ static gchar* gsidca_get_info(GncDenseCalModel *model, guint tag);
 static gint gsidca_get_instance_count(GncDenseCalModel *model, guint tag);
 static void gsidca_get_instance(GncDenseCalModel *model, guint tag, gint instance_index, GDate *date);
 
-static GObjectClass *parent_class = NULL;
-
 struct _GncSxInstanceDenseCalAdapterClass
 {
     GObjectClass parent;
@@ -63,6 +62,9 @@ struct _GncSxInstanceDenseCalAdapter
     GncSxInstanceModel *instances;
 };
 
+G_DEFINE_TYPE_WITH_CODE (GncSxInstanceDenseCalAdapter, gnc_sx_instance_dense_cal_adapter, G_TYPE_OBJECT,
+    G_IMPLEMENT_INTERFACE (GNC_TYPE_DENSE_CAL_MODEL, gnc_sx_instance_dense_cal_adapter_interface_init))
+
 static void
 gnc_sx_instance_dense_cal_adapter_class_init(GncSxInstanceDenseCalAdapterClass *klass)
 {
@@ -70,21 +72,18 @@ gnc_sx_instance_dense_cal_adapter_class_init(GncSxInstanceDenseCalAdapterClass *
 
     obj_class->dispose = gnc_sx_instance_dense_cal_adapter_dispose;
     obj_class->finalize = gnc_sx_instance_dense_cal_adapter_finalize;
-
-    parent_class = g_type_class_peek_parent(klass);
 }
 
 static void
-gnc_sx_instance_dense_cal_adapter_init(GTypeInstance *instance, gpointer klass)
+gnc_sx_instance_dense_cal_adapter_init(GncSxInstanceDenseCalAdapter *instance)
 {
     /*GncSxInstanceDenseCalAdapter *adapter = GNC_SX_INSTANCE_DENSE_CAL_ADAPTER(instance);*/
     ; /* nop */
 }
 
 static void
-gnc_sx_instance_dense_cal_adapter_interface_init(gpointer g_iface, gpointer iface_data)
+gnc_sx_instance_dense_cal_adapter_interface_init(GncDenseCalModelIface *iface)
 {
-    GncDenseCalModelIface *iface = (GncDenseCalModelIface*)g_iface;
     iface->get_contained = gsidca_get_contained;
     iface->get_name = gsidca_get_name;
     iface->get_info = gsidca_get_info;
@@ -141,41 +140,6 @@ gnc_sx_instance_dense_cal_adapter_new(GncSxInstanceModel *instances)
     return adapter;
 }
 
-GType
-gnc_sx_instance_dense_cal_adapter_get_type(void)
-{
-    static GType type = 0;
-    if (type == 0)
-    {
-        static const GTypeInfo info =
-        {
-            sizeof (GncSxInstanceDenseCalAdapterClass),
-            NULL, /* base init */
-            NULL, /* base finalize */
-            (GClassInitFunc)gnc_sx_instance_dense_cal_adapter_class_init,
-            NULL, /* class finalize */
-            NULL, /* class data */
-            sizeof(GncSxInstanceDenseCalAdapter),
-            0, /* n_preallocs */
-            (GInstanceInitFunc)gnc_sx_instance_dense_cal_adapter_init
-        };
-        static const GInterfaceInfo iDenseCalModelInfo =
-        {
-            (GInterfaceInitFunc)gnc_sx_instance_dense_cal_adapter_interface_init,
-            NULL, /* interface finalize */
-            NULL, /* interface data */
-        };
-
-        type = g_type_register_static (G_TYPE_OBJECT,
-                                       "GncSxInstanceDenseCalAdapterType",
-                                       &info, 0);
-        g_type_add_interface_static(type,
-                                    GNC_TYPE_DENSE_CAL_MODEL,
-                                    &iDenseCalModelInfo);
-    }
-    return type;
-}
-
 static gint
 gsidca_find_sx_with_tag(gconstpointer list_data,
                         gconstpointer find_data)
@@ -267,12 +231,12 @@ gnc_sx_instance_dense_cal_adapter_dispose(GObject *obj)
     g_object_unref(G_OBJECT(adapter->instances));
     adapter->instances = NULL;
 
-    G_OBJECT_CLASS(parent_class)->dispose(obj);
+    G_OBJECT_CLASS(gnc_sx_instance_dense_cal_adapter_parent_class)->dispose(obj);
 }
 
 static void gnc_sx_instance_dense_cal_adapter_finalize(GObject *obj)
 {
     g_return_if_fail(obj != NULL);
     // nop
-    G_OBJECT_CLASS(parent_class)->finalize(obj);
+    G_OBJECT_CLASS(gnc_sx_instance_dense_cal_adapter_parent_class)->finalize(obj);
 }

commit d4649bc67f85e53f5519cd38565e89260010a2b4
Author: Richard Cohen <richard at daijobu.co.uk>
Date:   Wed May 24 10:30:32 2023 +0100

    Refactor: DEFINE_TYPE GncRecurrenceComp < GtkScrolledWindow

diff --git a/gnucash/gnome-utils/gnc-recurrence.c b/gnucash/gnome-utils/gnc-recurrence.c
index f455df3137..c6ab5db466 100644
--- a/gnucash/gnome-utils/gnc-recurrence.c
+++ b/gnucash/gnome-utils/gnc-recurrence.c
@@ -465,6 +465,7 @@ static void removeClicked(GtkButton *b, gpointer data)
         removeRecurrence(grc);
 }
 
+G_DEFINE_TYPE (GncRecurrenceComp, gnc_recurrence_comp, GTK_TYPE_SCROLLED_WINDOW)
 
 void
 gnc_recurrence_comp_set_list(GncRecurrenceComp *grc, const GList *rlist)
@@ -560,35 +561,9 @@ gnc_recurrence_comp_class_init( GncRecurrenceCompClass *klass )
 		  G_TYPE_NONE,
 		  0);
 
-    //parent_class = g_type_class_peek_parent (klass);
     //object_class->finalize = gnc_recurrence_finalize;
 }
 
-
-GType
-gnc_recurrence_comp_get_type()
-{
-    static GType type = 0;
-    if (type == 0)
-    {
-        static GTypeInfo typeinfo =
-        {
-            sizeof(GncRecurrenceCompClass),
-            NULL, NULL,
-            (GClassInitFunc)gnc_recurrence_comp_class_init,
-            NULL, NULL,
-            sizeof(GncRecurrenceComp),
-            0,
-            (GInstanceInitFunc)gnc_recurrence_comp_init
-        };
-
-        type = g_type_register_static (GTK_TYPE_SCROLLED_WINDOW,
-                                       "GncRecurrenceComp", &typeinfo, 0);
-    }
-    return type;
-}
-
-
 GtkWidget *
 gnc_recurrence_comp_new()
 {

commit fd56cb6b7867b2e7dcd67d054cfcd5d78ee381a6
Author: Richard Cohen <richard at daijobu.co.uk>
Date:   Mon May 22 10:33:01 2023 +0100

    Refactor: DEFINE_TYPE GncRecurrence < GtkBox

diff --git a/gnucash/gnome-utils/gnc-recurrence.c b/gnucash/gnome-utils/gnc-recurrence.c
index 7a9b3f4ba3..f455df3137 100644
--- a/gnucash/gnome-utils/gnc-recurrence.c
+++ b/gnucash/gnome-utils/gnc-recurrence.c
@@ -70,8 +70,7 @@ typedef enum
     GNCR_YEAR,
 } UIPeriodType;
 
-static GObjectClass *parent_class = NULL;
-
+G_DEFINE_TYPE (GncRecurrence, gnc_recurrence, GTK_TYPE_BOX)
 
 static UIPeriodType get_pt_ui(GncRecurrence *gr)
 {
@@ -341,7 +340,7 @@ gnc_recurrence_finalize(GObject *o)
     GncRecurrence *gr = GNC_RECURRENCE(o);
 
     if (gr)
-        G_OBJECT_CLASS (parent_class)->finalize (o);
+        G_OBJECT_CLASS (gnc_recurrence_parent_class)->finalize (o);
 }
 
 
@@ -361,35 +360,9 @@ gnc_recurrence_class_init( GncRecurrenceClass *klass )
 		  G_TYPE_NONE,
 		  0);
 
-    parent_class = g_type_class_peek_parent (klass);
     object_class->finalize = gnc_recurrence_finalize;
 }
 
-
-GType
-gnc_recurrence_get_type()
-{
-    static GType type = 0;
-    if (type == 0)
-    {
-        static GTypeInfo typeinfo =
-        {
-            sizeof(GncRecurrenceClass),
-            NULL, NULL,
-            (GClassInitFunc)gnc_recurrence_class_init,
-            NULL, NULL,
-            sizeof(GncRecurrence),
-            0,
-            (GInstanceInitFunc)gnc_recurrence_init
-        };
-
-        type = g_type_register_static (GTK_TYPE_BOX, "GncRecurrence",
-                                       &typeinfo, 0);
-    }
-    return type;
-}
-
-
 GtkWidget *
 gnc_recurrence_new()
 {

commit c632164d38f782be169eddeaaff41d2bc62ac1b3
Author: Richard Cohen <richard at daijobu.co.uk>
Date:   Thu May 4 17:31:37 2023 +0100

    Refactor: DEFINE_TYPE GNCGeneralSelect < GtkBox
    
    - don't need checks for parent dispose & finalize

diff --git a/gnucash/gnome-utils/gnc-general-select.c b/gnucash/gnome-utils/gnc-general-select.c
index 205c2cc3f1..adcda610de 100644
--- a/gnucash/gnome-utils/gnc-general-select.c
+++ b/gnucash/gnome-utils/gnc-general-select.c
@@ -47,48 +47,12 @@ enum
 };
 
 
-static void gnc_general_select_init         (GNCGeneralSelect      *gsl);
-static void gnc_general_select_class_init   (GNCGeneralSelectClass *klass);
 static void gnc_general_select_dispose      (GObject               *object);
 static void gnc_general_select_finalize     (GObject               *object);
 
-static GtkBoxClass *parent_class;
 static guint general_select_signals[LAST_SIGNAL];
 
-
-/**
- * gnc_general_select_get_type:
- *
- * Returns the GType for the GNCGeneralSelect widget
- */
-GType
-gnc_general_select_get_type (void)
-{
-    static GType general_select_type = 0;
-
-    if (general_select_type == 0)
-    {
-        static const GTypeInfo general_select_info =
-        {
-            sizeof (GNCGeneralSelectClass),
-            NULL,
-            NULL,
-            (GClassInitFunc) gnc_general_select_class_init,
-            NULL,
-            NULL,
-            sizeof (GNCGeneralSelect),
-            0,
-            (GInstanceInitFunc) gnc_general_select_init,
-            NULL,
-        };
-
-        general_select_type = g_type_register_static(GTK_TYPE_BOX,
-                              "GNCGeneralSelect",
-                              &general_select_info, 0);
-    }
-
-    return general_select_type;
-}
+G_DEFINE_TYPE (GNCGeneralSelect, gnc_general_select, GTK_TYPE_BOX)
 
 static void
 gnc_general_select_forall (GtkContainer *container, gboolean include_internals,
@@ -103,10 +67,10 @@ gnc_general_select_forall (GtkContainer *container, gboolean include_internals,
     if (!include_internals)
         return;
 
-    if (!GTK_CONTAINER_CLASS (parent_class)->forall)
+    if (!GTK_CONTAINER_CLASS (gnc_general_select_parent_class)->forall)
         return;
 
-    GTK_CONTAINER_CLASS (parent_class)->forall (container,
+    GTK_CONTAINER_CLASS (gnc_general_select_parent_class)->forall (container,
             include_internals,
             callback,
             callback_data);
@@ -120,8 +84,6 @@ gnc_general_select_class_init (GNCGeneralSelectClass *klass)
 
     object_class = (GObjectClass*) klass;
 
-    parent_class = g_type_class_ref(GTK_TYPE_BOX);
-
     general_select_signals[SELECTION_CHANGED] =
         g_signal_new("changed",
                      G_TYPE_FROM_CLASS(object_class),
@@ -158,8 +120,7 @@ gnc_general_select_finalize (GObject *object)
     g_return_if_fail (object != NULL);
     g_return_if_fail (GNC_IS_GENERAL_SELECT (object));
 
-    if (G_OBJECT_CLASS (parent_class)->finalize)
-        G_OBJECT_CLASS (parent_class)->finalize (object);
+    G_OBJECT_CLASS (gnc_general_select_parent_class)->finalize (object);
 }
 
 static void
@@ -184,9 +145,7 @@ gnc_general_select_dispose (GObject *object)
     gtk_widget_destroy(GTK_WIDGET(gsl->button));
     gsl->button = NULL;
 
-
-    if (G_OBJECT_CLASS (parent_class)->dispose)
-        G_OBJECT_CLASS (parent_class)->dispose (object);
+    G_OBJECT_CLASS (gnc_general_select_parent_class)->dispose (object);
 }
 
 static void

commit faba15a4c7fffa5f876f45b9ec338d2fb29ed106
Author: Richard Cohen <richard at daijobu.co.uk>
Date:   Mon May 22 10:35:42 2023 +0100

    Refactor: DEFINE_TYPE GncFrequency < GtkBox
    
    - also
     - make gnc_frequency_init() private
     - rename gnc_frequency_class_destroy() to gnc_frequency_destroy()

diff --git a/gnucash/gnome-utils/gnc-frequency.c b/gnucash/gnome-utils/gnc-frequency.c
index f427607c00..905440e898 100644
--- a/gnucash/gnome-utils/gnc-frequency.c
+++ b/gnucash/gnome-utils/gnc-frequency.c
@@ -57,8 +57,7 @@ static guint gnc_frequency_signals[LAST_SIGNAL] = { 0 };
 
 /** Private Prototypes ********************/
 
-static void gnc_frequency_class_init( GncFrequencyClass *klass );
-static void gnc_frequency_class_destroy( GtkWidget *widget );
+static void gnc_frequency_destroy( GtkWidget *widget );
 
 static void freq_combo_changed( GtkComboBox *b, gpointer d );
 static void start_date_changed( GNCDateEdit *gde, gpointer d );
@@ -71,8 +70,6 @@ static void semimonthly_sel_changed( GtkButton *b, gpointer d );
 
 /** Static Inits ********************/
 
-static GObjectClass *parent_class = NULL;
-
 enum
 {
     PAGE_NONE = 0,
@@ -97,33 +94,7 @@ static const char *CHECKBOX_NAMES[] =
 
 /** Implementations ********************/
 
-GType
-gnc_frequency_get_type()
-{
-    static GType gncfreq_type = 0;
-    if (gncfreq_type == 0)
-    {
-        static GTypeInfo gncfreq_info =
-        {
-            sizeof(GncFrequencyClass),
-            NULL,
-            NULL,
-            (GClassInitFunc)gnc_frequency_class_init,
-            NULL,
-            NULL,
-            sizeof(GncFrequency),
-            0,
-            (GInstanceInitFunc)gnc_frequency_init
-        };
-
-        gncfreq_type = g_type_register_static (GTK_TYPE_BOX,
-                                               "GncFrequency",
-                                               &gncfreq_info, 0);
-    }
-
-    return gncfreq_type;
-}
-
+G_DEFINE_TYPE (GncFrequency, gnc_frequency, GTK_TYPE_BOX)
 
 static void
 gnc_frequency_class_init( GncFrequencyClass *klass )
@@ -131,8 +102,6 @@ gnc_frequency_class_init( GncFrequencyClass *klass )
     GObjectClass *object_class;
     GtkWidgetClass *gtkwidget_class;
 
-    parent_class = g_type_class_peek_parent (klass);
-
     object_class = G_OBJECT_CLASS (klass);
     gtkwidget_class = GTK_WIDGET_CLASS (klass);
 
@@ -148,11 +117,11 @@ gnc_frequency_class_init( GncFrequencyClass *klass )
                       0);
 
     /* GtkWidget signals */
-    gtkwidget_class->destroy = gnc_frequency_class_destroy;
+    gtkwidget_class->destroy = gnc_frequency_destroy;
 }
 
 
-void
+static void
 gnc_frequency_init(GncFrequency *gf)
 {
     int i;
@@ -277,7 +246,7 @@ gnc_frequency_init(GncFrequency *gf)
  *  @internal
  */
 static void
-gnc_frequency_class_destroy (GtkWidget *widget)
+gnc_frequency_destroy (GtkWidget *widget)
 {
     GncFrequency *gf;
 
@@ -294,8 +263,7 @@ gnc_frequency_class_destroy (GtkWidget *widget)
         gf->builder = NULL;
     }
 
-    if (GTK_WIDGET_CLASS (parent_class)->destroy)
-        GTK_WIDGET_CLASS (parent_class)->destroy (widget);
+    GTK_WIDGET_CLASS (gnc_frequency_parent_class)->destroy (widget);
     LEAVE(" ");
 }
 
diff --git a/gnucash/gnome-utils/gnc-frequency.h b/gnucash/gnome-utils/gnc-frequency.h
index 8aba8fe910..e23d98942c 100644
--- a/gnucash/gnome-utils/gnc-frequency.h
+++ b/gnucash/gnome-utils/gnc-frequency.h
@@ -76,8 +76,6 @@ GType gnc_frequency_get_type(void);
 GtkWidget* gnc_frequency_new(GList *recurrences, const GDate *start_date);
 GtkWidget* gnc_frequency_new_from_recurrence(GList *recurrences, const GDate *start_date);
 
-void gnc_frequency_init(GncFrequency *gf);
-
 /**
  * Change the given GncFrequency with the given FreqSpec and GDate.
  * If the FreqSpec is NULL, then no change is made to the widget menus.

commit b669d2722bef061c2e617b6e1b548dd1de3f6de2
Author: Richard Cohen <richard at daijobu.co.uk>
Date:   Fri May 26 11:25:48 2023 +0100

    Refactor: DEFINE_TYPE GncDenseCalStore < GObject

diff --git a/gnucash/gnome-utils/gnc-dense-cal-store.c b/gnucash/gnome-utils/gnc-dense-cal-store.c
index db87640c3f..86a91c525c 100644
--- a/gnucash/gnome-utils/gnc-dense-cal-store.c
+++ b/gnucash/gnome-utils/gnc-dense-cal-store.c
@@ -59,10 +59,7 @@ struct _GncDenseCalStoreClass
     GObjectClass parent_class;
 };
 
-static GObjectClass *parent_class = NULL;
-
-static void gnc_dense_cal_store_class_init(GncDenseCalStoreClass *klass);
-
+static void gnc_dense_cal_store_iface_init(GncDenseCalModelIface *iface);
 static void gnc_dense_cal_store_finalize(GObject *obj);
 
 static GList* gdcs_get_contained(GncDenseCalModel *model);
@@ -71,19 +68,25 @@ static gchar* gdcs_get_info(GncDenseCalModel *model, guint tag);
 static gint gdcs_get_instance_count(GncDenseCalModel *model, guint tag);
 static void gdcs_get_instance(GncDenseCalModel *model, guint tag, gint instance_index, GDate *date);
 
+G_DEFINE_TYPE_WITH_CODE (GncDenseCalStore, gnc_dense_cal_store, G_TYPE_OBJECT,
+    G_IMPLEMENT_INTERFACE (GNC_TYPE_DENSE_CAL_MODEL, gnc_dense_cal_store_iface_init))
+
 static void
 gnc_dense_cal_store_class_init(GncDenseCalStoreClass *klass)
 {
     GObjectClass *object_class = G_OBJECT_CLASS(klass);
-    parent_class = g_type_class_peek_parent(klass);
 
     object_class->finalize = gnc_dense_cal_store_finalize;
 }
 
 static void
-gnc_dense_cal_store_iface_init(gpointer g_iface, gpointer iface_data)
+gnc_dense_cal_store_init(GncDenseCalStore *self)
+{
+}
+
+static void
+gnc_dense_cal_store_iface_init(GncDenseCalModelIface *iface)
 {
-    GncDenseCalModelIface *iface = (GncDenseCalModelIface*)g_iface;
     iface->get_contained = gdcs_get_contained;
     iface->get_name = gdcs_get_name;
     iface->get_info = gdcs_get_info;
@@ -91,38 +94,6 @@ gnc_dense_cal_store_iface_init(gpointer g_iface, gpointer iface_data)
     iface->get_instance = gdcs_get_instance;
 }
 
-GType
-gnc_dense_cal_store_get_type(void)
-{
-    static GType type = 0;
-    if (type == 0)
-    {
-        static const GTypeInfo info =
-        {
-            sizeof (GncDenseCalStoreClass),
-            NULL,   /* base_init */
-            NULL,   /* base_finalize */
-            (GClassInitFunc)gnc_dense_cal_store_class_init,   /* class_init */
-            NULL,   /* class_finalize */
-            NULL,   /* class_data */
-            sizeof(GncDenseCalStore),
-            0,      /* n_preallocs */
-            NULL    /* instance_init */
-        };
-        static const GInterfaceInfo iDenseCalModelInfo =
-        {
-            (GInterfaceInitFunc)gnc_dense_cal_store_iface_init,
-            NULL, /* interface finalize */
-            NULL, /* interface data */
-        };
-        type = g_type_register_static(G_TYPE_OBJECT, "GncDenseCalStore", &info, 0);
-        g_type_add_interface_static(type,
-                                    GNC_TYPE_DENSE_CAL_MODEL,
-                                    &iDenseCalModelInfo);
-    }
-    return type;
-}
-
 GncDenseCalStore*
 gnc_dense_cal_store_new(int num_marks)
 {
@@ -303,5 +274,5 @@ gnc_dense_cal_store_finalize(GObject *obj)
         store->cal_marks = NULL;
     }
 
-    G_OBJECT_CLASS(parent_class)->finalize(obj);
+    G_OBJECT_CLASS(gnc_dense_cal_store_parent_class)->finalize(obj);
 }

commit 9a8f54a2e14de4c5773d527ce0240d3daaab99d1
Author: Richard Cohen <richard at daijobu.co.uk>
Date:   Mon May 22 10:36:11 2023 +0100

    Refactor: DEFINE_TYPE GncDenseCal < GtkBox

diff --git a/gnucash/gnome-utils/gnc-dense-cal.c b/gnucash/gnome-utils/gnc-dense-cal.c
index f65d9aab40..8049fd9cb8 100644
--- a/gnucash/gnome-utils/gnc-dense-cal.c
+++ b/gnucash/gnome-utils/gnc-dense-cal.c
@@ -76,8 +76,6 @@ static const int COL_BORDER_SIZE = 3;
 #undef G_LOG_DOMAIN
 #define G_LOG_DOMAIN "gnc.gui.dense-cal"
 
-static void gnc_dense_cal_class_init(GncDenseCalClass *klass);
-static void gnc_dense_cal_init(GncDenseCal *dcal);
 static void gnc_dense_cal_finalize(GObject *object);
 static void gnc_dense_cal_dispose(GObject *object);
 static void gnc_dense_cal_realize(GtkWidget *widget, gpointer user_data);
@@ -147,7 +145,7 @@ static void gdc_add_tag_markings(GncDenseCal *cal, guint tag);
 static void gdc_add_markings(GncDenseCal *cal);
 static void gdc_remove_markings(GncDenseCal *cal);
 
-static GObject *parent_class = NULL;
+G_DEFINE_TYPE (GncDenseCal, gnc_dense_cal, GTK_TYPE_BOX)
 
 #define MONTH_NAME_BUFSIZE 10
 
@@ -187,35 +185,6 @@ day_label(gchar *buf, int buf_len, int dow)
     }
 }
 
-GType
-gnc_dense_cal_get_type()
-{
-    static GType dense_cal_type = 0;
-
-    if (dense_cal_type == 0)
-    {
-        static const GTypeInfo dense_cal_info =
-        {
-            sizeof (GncDenseCalClass),
-            NULL,
-            NULL,
-            (GClassInitFunc) gnc_dense_cal_class_init,
-            NULL,
-            NULL,
-            sizeof (GncDenseCal),
-            0,
-            (GInstanceInitFunc) gnc_dense_cal_init,
-            NULL
-        };
-
-        dense_cal_type = g_type_register_static(GTK_TYPE_BOX,
-                                                "GncDenseCal",
-                                                &dense_cal_info, 0);
-    }
-
-    return dense_cal_type;
-}
-
 static void
 gnc_dense_cal_class_init(GncDenseCalClass *klass)
 {
@@ -227,8 +196,6 @@ gnc_dense_cal_class_init(GncDenseCalClass *klass)
 
     gtk_widget_class_set_css_name (GTK_WIDGET_CLASS(klass), "calendar");
 
-    parent_class = g_type_class_peek_parent (klass);
-
     object_class->finalize = gnc_dense_cal_finalize;
     object_class->dispose = gnc_dense_cal_dispose;
 
@@ -684,8 +651,7 @@ gnc_dense_cal_dispose (GObject *object)
 
     g_object_unref(G_OBJECT(dcal->model));
 
-    if (G_OBJECT_CLASS (parent_class)->dispose)
-        G_OBJECT_CLASS(parent_class)->dispose(object);
+    G_OBJECT_CLASS(gnc_dense_cal_parent_class)->dispose(object);
 }
 
 static void
@@ -694,8 +660,7 @@ gnc_dense_cal_finalize (GObject *object)
     g_return_if_fail (object != NULL);
     g_return_if_fail (GNC_IS_DENSE_CAL (object));
 
-    if (G_OBJECT_CLASS (parent_class)->finalize)
-        G_OBJECT_CLASS(parent_class)->finalize(object);
+    G_OBJECT_CLASS(gnc_dense_cal_parent_class)->finalize(object);
 }
 
 static void

commit b3e13d46de0e4843006882a712618a12e8328b15
Author: Richard Cohen <richard at daijobu.co.uk>
Date:   Mon May 22 10:30:35 2023 +0100

    Refactor: DEFINE_TYPE GNCDateEdit < GtkBox

diff --git a/gnucash/gnome-utils/gnc-date-edit.c b/gnucash/gnome-utils/gnc-date-edit.c
index 3dc57fc2dd..ed716131f7 100644
--- a/gnucash/gnome-utils/gnc-date-edit.c
+++ b/gnucash/gnome-utils/gnc-date-edit.c
@@ -64,9 +64,6 @@ enum
 static QofLogModule log_module = GNC_MOD_GUI;
 static guint date_edit_signals [LAST_SIGNAL] = { 0 };
 
-
-static void gnc_date_edit_init         (GNCDateEdit      *gde);
-static void gnc_date_edit_class_init   (GNCDateEditClass *klass);
 static void gnc_date_edit_dispose      (GObject          *object);
 static void gnc_date_edit_finalize     (GObject          *object);
 static void gnc_date_edit_forall       (GtkContainer       *container,
@@ -78,43 +75,7 @@ static int date_accel_key_press(GtkWidget *widget,
                                 GdkEventKey *event,
                                 gpointer data);
 
-
-static GtkBoxClass *parent_class;
-
-/**
- * gnc_date_edit_get_type:
- *
- * Returns the GType for the GNCDateEdit widget
- */
-GType
-gnc_date_edit_get_type (void)
-{
-    static GType date_edit_type = 0;
-
-    if (date_edit_type == 0)
-    {
-        static const GTypeInfo date_edit_info =
-        {
-            sizeof (GNCDateEditClass),
-            NULL,
-            NULL,
-            (GClassInitFunc) gnc_date_edit_class_init,
-            NULL,
-            NULL,
-            sizeof (GNCDateEdit),
-            0, /* n_preallocs */
-            (GInstanceInitFunc) gnc_date_edit_init,
-            NULL,
-        };
-
-        date_edit_type = g_type_register_static (GTK_TYPE_BOX,
-                         "GNCDateEdit",
-                         &date_edit_info, 0);
-    }
-
-    return date_edit_type;
-}
-
+G_DEFINE_TYPE (GNCDateEdit, gnc_date_edit, GTK_TYPE_BOX)
 
 static char *
 gnc_strtok_r (char *s, const char *delim, char **save_ptr)
@@ -631,8 +592,6 @@ gnc_date_edit_class_init (GNCDateEditClass *klass)
     object_class->dispose = gnc_date_edit_dispose;
     object_class->finalize = gnc_date_edit_finalize;
 
-    parent_class = g_type_class_ref(GTK_TYPE_BOX);
-
     date_edit_signals [TIME_CHANGED] =
         g_signal_new ("time_changed",
                       G_TYPE_FROM_CLASS (object_class),
@@ -688,8 +647,7 @@ gnc_date_edit_finalize (GObject *object)
     g_return_if_fail (object != NULL);
     g_return_if_fail (GNC_IS_DATE_EDIT (object));
 
-    if (G_OBJECT_CLASS (parent_class)->finalize)
-        (* G_OBJECT_CLASS (parent_class)->finalize) (object);
+    G_OBJECT_CLASS (gnc_date_edit_parent_class)->finalize (object);
 }
 
 static void
@@ -721,8 +679,7 @@ gnc_date_edit_dispose (GObject *object)
     gtk_widget_destroy (GTK_WIDGET(gde->time_combo));
     gde->time_combo = NULL;
 
-    if (G_OBJECT_CLASS (parent_class)->dispose)
-        (* G_OBJECT_CLASS (parent_class)->dispose) (object);
+    G_OBJECT_CLASS (gnc_date_edit_parent_class)->dispose (object);
 }
 
 static void
@@ -738,10 +695,10 @@ gnc_date_edit_forall (GtkContainer *container, gboolean include_internals,
     if (!include_internals)
         return;
 
-    if (!GTK_CONTAINER_CLASS (parent_class)->forall)
+    if (!GTK_CONTAINER_CLASS (gnc_date_edit_parent_class)->forall)
         return;
 
-    GTK_CONTAINER_CLASS (parent_class)->forall (container,
+    GTK_CONTAINER_CLASS (gnc_date_edit_parent_class)->forall (container,
             include_internals,
             callback,
             callback_data);

commit 7c7ec317f8ebfab64afb5bb2f66d8d6aca17cbab
Author: Richard Cohen <richard at daijobu.co.uk>
Date:   Thu May 4 17:31:12 2023 +0100

    Refactor: DEFINE_TYPE GncPopupEntry < GtkEventBox

diff --git a/gnucash/gnome-utils/gnc-cell-renderer-popup-entry.c b/gnucash/gnome-utils/gnc-cell-renderer-popup-entry.c
index 7e6ecbff93..30723b13c4 100644
--- a/gnucash/gnome-utils/gnc-cell-renderer-popup-entry.c
+++ b/gnucash/gnome-utils/gnc-cell-renderer-popup-entry.c
@@ -37,8 +37,6 @@
 #include "dialog-utils.h"
 #include "gnc-date.h"
 
-static void     gnc_popup_entry_init       (GncPopupEntry        *entry);
-static void     gnc_popup_entry_class_init (GncPopupEntryClass   *klass);
 static void     gpw_cell_editable_init     (GtkCellEditableIface *iface);
 static gboolean gpw_key_press_event        (GtkWidget            *box,
                                             GdkEventKey          *key_event);
@@ -65,48 +63,10 @@ enum
     PROP_EDITING_CANCELED,
 };
 
-static GtkEventBoxClass *parent_class;
 static guint signals[LAST_SIGNAL];
 
-GType
-gnc_popup_entry_get_type (void)
-{
-    static GType widget_type = 0;
-
-    if (!widget_type)
-    {
-        static const GTypeInfo widget_info =
-        {
-            sizeof (GncPopupEntryClass),
-            NULL,           /* base_init */
-            NULL,           /* base_finalize */
-            (GClassInitFunc) gnc_popup_entry_class_init,
-            NULL,           /* class_finalize */
-            NULL,           /* class_data */
-            sizeof (GncPopupEntry),
-            0,              /* n_preallocs */
-            (GInstanceInitFunc) gnc_popup_entry_init,
-        };
-
-        static const GInterfaceInfo cell_editable_info =
-        {
-            (GInterfaceInitFunc) gpw_cell_editable_init,    /* interface_init */
-            NULL,                                           /* interface_finalize */
-            NULL                                            /* interface_data */
-        };
-
-        widget_type = g_type_register_static (GTK_TYPE_EVENT_BOX,
-                                              "GncPopupEntry",
-                                              &widget_info,
-                                              0);
-
-        g_type_add_interface_static (widget_type,
-                                     GTK_TYPE_CELL_EDITABLE,
-                                     &cell_editable_info);
-    }
-
-    return widget_type;
-}
+G_DEFINE_TYPE_WITH_CODE (GncPopupEntry, gnc_popup_entry, GTK_TYPE_EVENT_BOX,
+    G_IMPLEMENT_INTERFACE (GTK_TYPE_EDITABLE, gpw_cell_editable_init))
 
 static void
 gnc_popup_entry_init (GncPopupEntry *widget)
@@ -167,8 +127,6 @@ gnc_popup_entry_class_init (GncPopupEntryClass *klass)
     gobject_class->set_property = gpw_set_property;
     gobject_class->get_property = gpw_get_property;
 
-    parent_class = GTK_EVENT_BOX_CLASS (g_type_class_peek_parent (klass));
-
     g_object_class_override_property (gobject_class,
                                       PROP_EDITING_CANCELED,
                                       "editing-canceled");
@@ -317,7 +275,7 @@ gpw_key_press_event (GtkWidget   *box,
 
     gtk_widget_event (widget->entry, &tmp_event);
 
-    return GTK_WIDGET_CLASS (parent_class)->key_press_event (GTK_WIDGET(widget),
+    return GTK_WIDGET_CLASS (gnc_popup_entry_parent_class)->key_press_event (GTK_WIDGET(widget),
                                                              key_event);
 }
 

commit 23e4d0e1a1057351d2c26fcb19c2ab18ed87a87b
Author: Richard Cohen <richard at daijobu.co.uk>
Date:   Thu May 4 18:48:51 2023 +0100

    Refactor: DEFINE_TYPE GncCellRendererPopup < GtkCellRendererText

diff --git a/gnucash/gnome-utils/gnc-cell-renderer-popup.c b/gnucash/gnome-utils/gnc-cell-renderer-popup.c
index e8b921affd..78da8c1986 100644
--- a/gnucash/gnome-utils/gnc-cell-renderer-popup.c
+++ b/gnucash/gnome-utils/gnc-cell-renderer-popup.c
@@ -41,9 +41,6 @@ enum {
     LAST_SIGNAL
 };
 
-static void      gcrp_init               (GncCellRendererPopup      *popup);
-static void      gcrp_class_init         (GncCellRendererPopupClass *klass);
-
 static GtkCellEditable *gcrp_start_editing (GtkCellRenderer          *cell,
                                             GdkEvent                 *event,
                                             GtkWidget                *widget,
@@ -89,40 +86,14 @@ void gnc_marshal_VOID__STRING_INT_INT_INT_INT (GClosure              *closure,
                                                gpointer               marshal_data);
 
 
-static GtkCellRendererTextClass *parent_class;
 static guint signals[LAST_SIGNAL];
 
 #define GNC_CELL_RENDERER_POPUP_PATH "gnc-cell-renderer-popup-path"
 
-GType
-gnc_cell_renderer_popup_get_type (void)
-{
-    static GType cell_text_type = 0;
-
-    if (!cell_text_type) {
-        static const GTypeInfo cell_text_info = {
-            sizeof (GncCellRendererPopupClass),
-            NULL,           /* base_init */
-            NULL,           /* base_finalize */
-            (GClassInitFunc) gcrp_class_init,
-            NULL,           /* class_finalize */
-            NULL,           /* class_data */
-            sizeof (GncCellRendererPopup),
-            0,              /* n_preallocs */
-            (GInstanceInitFunc) gcrp_init,
-        };
-
-        cell_text_type = g_type_register_static (GTK_TYPE_CELL_RENDERER_TEXT,
-                                                 "GncCellRendererPopup",
-                                                 &cell_text_info,
-                                                 0);
-    }
-
-    return cell_text_type;
-}
+G_DEFINE_TYPE (GncCellRendererPopup, gnc_cell_renderer_popup, GTK_TYPE_CELL_RENDERER_TEXT);
 
 static void
-gcrp_init (GncCellRendererPopup *popup)
+gnc_cell_renderer_popup_init (GncCellRendererPopup *popup)
 {
     popup->popup_window = gtk_window_new (GTK_WINDOW_POPUP);
 
@@ -145,12 +116,10 @@ gcrp_init (GncCellRendererPopup *popup)
 }
 
 static void
-gcrp_class_init (GncCellRendererPopupClass *klass)
+gnc_cell_renderer_popup_class_init (GncCellRendererPopupClass *klass)
 {
     GtkCellRendererClass *cell_class = GTK_CELL_RENDERER_CLASS(klass);
 
-    parent_class = GTK_CELL_RENDERER_TEXT_CLASS(g_type_class_peek_parent (klass));
-
     cell_class->start_editing = gcrp_start_editing;
     cell_class->get_size      = gcrp_get_size;
 
@@ -454,8 +423,8 @@ gcrp_get_size (GtkCellRenderer    *cell,
 {
     GncCellRendererPopup *popup = GNC_CELL_RENDERER_POPUP (cell);
 
-    if (GTK_CELL_RENDERER_CLASS(parent_class)->get_size) {
-        (* GTK_CELL_RENDERER_CLASS(parent_class)->get_size) (cell,
+    if (GTK_CELL_RENDERER_CLASS(gnc_cell_renderer_popup_parent_class)->get_size) {
+        (* GTK_CELL_RENDERER_CLASS(gnc_cell_renderer_popup_parent_class)->get_size) (cell,
                                       widget,
                                       cell_area,
                                       x_offset,

commit 5d39d83a87b6619b274e9eb386b3dd6fab64b159
Author: Richard Cohen <richard at daijobu.co.uk>
Date:   Fri May 5 13:40:40 2023 +0100

    Refactor: DEFINE_TYPE GncCellRendererDate < GncCellRendererPopup

diff --git a/gnucash/gnome-utils/gnc-cell-renderer-date.c b/gnucash/gnome-utils/gnc-cell-renderer-date.c
index d83b5a38d2..b1cdc5f5a9 100644
--- a/gnucash/gnome-utils/gnc-cell-renderer-date.c
+++ b/gnucash/gnome-utils/gnc-cell-renderer-date.c
@@ -44,9 +44,7 @@ enum {
     PROP_USE_BUTTONS,
 };
 
-static void     gcrd_init                  (GncCellRendererDate      *date);
 
-static void     gcrd_class_init            (GncCellRendererDateClass *klass);
 
 static void     gcrd_set_property          (GObject                  *object,
                                             guint                     param_id,
@@ -99,38 +97,10 @@ static time64 gcrd_dmy2time (gint day, gint month, gint year);
 static gchar * gcrd_time2dmy_string (time64 raw_time);
 static time64 gcrd_string_dmy2time (const gchar *date_string);
 
-
-static GncCellRendererPopupClass *parent_class;
-
-GType
-gnc_cell_renderer_date_get_type (void)
-{
-    static GType cell_text_type = 0;
-
-    if (!cell_text_type) {
-        static const GTypeInfo cell_text_info = {
-            sizeof (GncCellRendererDateClass),
-            NULL,           /* base_init */
-            NULL,           /* base_finalize */
-            (GClassInitFunc) gcrd_class_init,
-            NULL,           /* class_finalize */
-            NULL,           /* class_data */
-            sizeof (GncCellRendererDate),
-            0,              /* n_preallocs */
-            (GInstanceInitFunc) gcrd_init,
-        };
-
-        cell_text_type = g_type_register_static (GNC_TYPE_CELL_RENDERER_POPUP,
-                                                 "GncCellRendererDate",
-                                                 &cell_text_info,
-                                                 0);
-    }
-
-    return cell_text_type;
-}
+G_DEFINE_TYPE (GncCellRendererDate, gnc_cell_renderer_date, GNC_TYPE_CELL_RENDERER_POPUP);
 
 static void
-gcrd_init (GncCellRendererDate *date)
+gnc_cell_renderer_date_init (GncCellRendererDate *date)
 {
     GncCellRendererPopup     *popup;
     GtkWidget                *frame;
@@ -189,7 +159,7 @@ gcrd_init (GncCellRendererDate *date)
 }
 
 static void
-gcrd_class_init (GncCellRendererDateClass *klass)
+gnc_cell_renderer_date_class_init (GncCellRendererDateClass *klass)
 {
     GncCellRendererPopupClass     *popup_class;
     GtkCellRendererClass          *cell_class;
@@ -197,7 +167,6 @@ gcrd_class_init (GncCellRendererDateClass *klass)
 
     popup_class = GNC_CELL_RENDERER_POPUP_CLASS(klass);
     cell_class = GTK_CELL_RENDERER_CLASS(klass);
-    parent_class = GNC_CELL_RENDERER_POPUP_CLASS(g_type_class_peek_parent (klass));
     gobject_class = G_OBJECT_CLASS(klass);
 
     gobject_class->set_property = gcrd_set_property;
@@ -274,8 +243,8 @@ gcrd_start_editing (GtkCellRenderer      *cell,
 {
     GNC_CELL_RENDERER_POPUP(cell)->editing_canceled = FALSE;
 
-    if (GTK_CELL_RENDERER_CLASS(parent_class)->start_editing) {
-        return GTK_CELL_RENDERER_CLASS(parent_class)->start_editing (
+    if (GTK_CELL_RENDERER_CLASS(gnc_cell_renderer_date_parent_class)->start_editing) {
+        return GTK_CELL_RENDERER_CLASS(gnc_cell_renderer_date_parent_class)->start_editing (
                             cell,
                             event,
                             widget,
@@ -292,8 +261,8 @@ gcrd_start_editing (GtkCellRenderer      *cell,
 static void
 gcrd_hide (GncCellRendererPopup *cell)
 {
-    if (parent_class->hide_popup) {
-        parent_class->hide_popup (cell);
+    if (GNC_CELL_RENDERER_POPUP_CLASS (gnc_cell_renderer_date_parent_class)->hide_popup) {
+        GNC_CELL_RENDERER_POPUP_CLASS (gnc_cell_renderer_date_parent_class)->hide_popup (cell);
     }
 }
 
@@ -311,8 +280,8 @@ gcrd_show (GncCellRendererPopup *cell,
     gint                     day = 0;
     const gchar             *text;
 
-    if (parent_class->show_popup) {
-        parent_class->show_popup (cell,
+    if (GNC_CELL_RENDERER_POPUP_CLASS (gnc_cell_renderer_date_parent_class)->show_popup) {
+        GNC_CELL_RENDERER_POPUP_CLASS (gnc_cell_renderer_date_parent_class)->show_popup (cell,
                       path,
                       x1, y1,
                       x2, y2);

commit 5d955654bc106e739d43c6a913a8ab499ee61bbc
Author: Richard Cohen <richard at daijobu.co.uk>
Date:   Mon May 22 10:40:01 2023 +0100

    Refactor: DEFINE_TYPE GncSxInstanceModel < GObject

diff --git a/libgnucash/app-utils/gnc-sx-instance-model.c b/libgnucash/app-utils/gnc-sx-instance-model.c
index 47c945cdec..d23659c538 100644
--- a/libgnucash/app-utils/gnc-sx-instance-model.c
+++ b/libgnucash/app-utils/gnc-sx-instance-model.c
@@ -65,8 +65,6 @@ static QofLogModule log_module = G_LOG_DOMAIN;
         *list = g_list_append(*list, g_strdup_printf(_(format), __VA_ARGS__)); \
 } while (0)
 
-static GObjectClass *parent_class = NULL;
-
 typedef struct _SxTxnCreationData
 {
     GncSxInstance *instance;
@@ -74,8 +72,6 @@ typedef struct _SxTxnCreationData
     GList **creation_errors;
 } SxTxnCreationData;
 
-static void gnc_sx_instance_model_class_init (GncSxInstanceModelClass *klass);
-static void gnc_sx_instance_model_init(GTypeInstance *instance, gpointer klass);
 static GncSxInstanceModel* gnc_sx_instance_model_new(void);
 
 static GncSxInstance* gnc_sx_instance_new(GncSxInstances *parent, GncSxInstanceState state, GDate *date, void *temporal_state, gint sequence_num);
@@ -584,37 +580,15 @@ gnc_sx_get_instances(const GDate *range_end, gboolean include_disabled)
 
     return instances;
 }
+
+G_DEFINE_TYPE (GncSxInstanceModel, gnc_sx_instance_model, G_TYPE_OBJECT)
+
 static GncSxInstanceModel*
 gnc_sx_instance_model_new(void)
 {
     return GNC_SX_INSTANCE_MODEL(g_object_new(GNC_TYPE_SX_INSTANCE_MODEL, NULL));
 }
 
-GType
-gnc_sx_instance_model_get_type(void)
-{
-    static GType type = 0;
-    if (type == 0)
-    {
-        static const GTypeInfo info =
-            {
-                sizeof (GncSxInstanceModelClass),
-                NULL,   /* base_init */
-                NULL,   /* base_finalize */
-                (GClassInitFunc)gnc_sx_instance_model_class_init,   /* class_init */
-                NULL,   /* class_finalize */
-                NULL,   /* class_data */
-                sizeof (GncSxInstanceModel),
-                0,      /* n_preallocs */
-                (GInstanceInitFunc)gnc_sx_instance_model_init    /* instance_init */
-            };
-        type = g_type_register_static (G_TYPE_OBJECT,
-                                       "GncSxInstanceModelType",
-                                       &info, 0);
-    }
-    return type;
-}
-
 static void
 gnc_sx_instance_model_dispose(GObject *object)
 {
@@ -627,7 +601,7 @@ gnc_sx_instance_model_dispose(GObject *object)
 
     qof_event_unregister_handler(model->qof_event_handler_id);
 
-    G_OBJECT_CLASS(parent_class)->dispose(object);
+    G_OBJECT_CLASS(gnc_sx_instance_model_parent_class)->dispose(object);
 }
 
 static void
@@ -685,7 +659,7 @@ gnc_sx_instance_model_finalize (GObject *object)
     g_list_free(model->sx_instance_list);
     model->sx_instance_list = NULL;
 
-    G_OBJECT_CLASS(parent_class)->finalize(object);
+    G_OBJECT_CLASS(gnc_sx_instance_model_parent_class)->finalize(object);
 }
 
 static void
@@ -693,8 +667,6 @@ gnc_sx_instance_model_class_init (GncSxInstanceModelClass *klass)
 {
     GObjectClass *object_class = G_OBJECT_CLASS(klass);
 
-    parent_class = g_type_class_peek_parent(klass);
-
     object_class->dispose = gnc_sx_instance_model_dispose;
     object_class->finalize = gnc_sx_instance_model_finalize;
 
@@ -736,10 +708,8 @@ gnc_sx_instance_model_class_init (GncSxInstanceModelClass *klass)
 }
 
 static void
-gnc_sx_instance_model_init(GTypeInstance *instance, gpointer klass)
+gnc_sx_instance_model_init(GncSxInstanceModel *inst)
 {
-    GncSxInstanceModel *inst = (GncSxInstanceModel*)instance;
-
     g_date_clear(&inst->range_end, 1);
     inst->sx_instance_list = NULL;
     inst->qof_event_handler_id = qof_event_register_handler(_gnc_sx_instance_event_handler, inst);

commit 167c55e5068839da9a46e791a45ed010acb331de
Author: Richard Cohen <richard at daijobu.co.uk>
Date:   Sat May 20 17:25:30 2023 +0100

    Refactor: DEFINE_TYPE GOOptionMenu < GtkButton

diff --git a/borrowed/goffice/go-optionmenu.c b/borrowed/goffice/go-optionmenu.c
index 670a92bc67..af65b1ab1e 100644
--- a/borrowed/goffice/go-optionmenu.c
+++ b/borrowed/goffice/go-optionmenu.c
@@ -48,9 +48,10 @@ enum
     PROP_MENU
 };
 
-static GtkButtonClass *parent_class = NULL;
 static guint signals[LAST_SIGNAL] = { 0 };
 
+G_DEFINE_TYPE (GOOptionMenu, go_option_menu, GTK_TYPE_BUTTON)
+
 GtkWidget*
 go_option_menu_new(void)
 {
@@ -315,7 +316,7 @@ static void go_option_menu_destroy(GtkWidget *widget)
     }
     option_menu->selected = NULL;
 
-    GTK_WIDGET_CLASS(parent_class)->destroy(widget);
+    GTK_WIDGET_CLASS(go_option_menu_parent_class)->destroy(widget);
 }
 
 static void go_option_menu_class_init(GOOptionMenuClass *class)
@@ -323,8 +324,6 @@ static void go_option_menu_class_init(GOOptionMenuClass *class)
     GObjectClass *gobject_class = (GObjectClass*) class;
     GtkWidgetClass *widget_class = (GtkWidgetClass*) class;
 
-    parent_class = g_type_class_peek_parent(class);
-
     signals[CHANGED] = g_signal_new("changed", G_OBJECT_CLASS_TYPE(class),
             G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(GOOptionMenuClass, changed),
             NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
@@ -367,24 +366,3 @@ static void go_option_menu_init(GOOptionMenu *option_menu)
 
     gtk_container_add(GTK_CONTAINER(option_menu), GTK_WIDGET(box));
 }
-
-GType go_option_menu_get_type(void)
-{
-    static GType option_menu_type = 0;
-
-    if (!option_menu_type)
-    {
-        static const GTypeInfo option_menu_info =
-        { sizeof(GOOptionMenuClass), NULL, /* base_init */
-        NULL, /* base_finalize */
-        (GClassInitFunc) go_option_menu_class_init, NULL, /* class_finalize */
-        NULL, /* class_data */
-        sizeof(GOOptionMenu), 0, /* n_preallocs */
-        (GInstanceInitFunc) go_option_menu_init, };
-
-        option_menu_type = g_type_register_static(GTK_TYPE_BUTTON,
-                "GOOptionMenu", &option_menu_info, 0);
-    }
-
-    return option_menu_type;
-}

commit 8e36a64506018f9b61cc3e7bf8836db26b435baa
Author: Richard Cohen <richard at daijobu.co.uk>
Date:   Wed May 3 14:21:14 2023 +0100

    Refactor: DEFINE_TYPE GOCharmapSel < GtkBox

diff --git a/borrowed/goffice/go-charmap-sel.c b/borrowed/goffice/go-charmap-sel.c
index bfb7f8fbdc..d94fc918cb 100644
--- a/borrowed/goffice/go-charmap-sel.c
+++ b/borrowed/goffice/go-charmap-sel.c
@@ -291,6 +291,8 @@ static void cs_set_property(GObject *object, guint prop_id, const GValue *value,
 static void cs_get_property(GObject *object, guint prop_id, GValue *value,
         GParamSpec *pspec);
 
+G_DEFINE_TYPE (GOCharmapSel, go_charmap_sel, GTK_TYPE_BOX)
+
 static gboolean iconv_supported(const char *to, const char *from)
 {
     GIConv ic = g_iconv_open(to, from);
@@ -359,7 +361,7 @@ static void cs_emphasize_label(GtkLabel *label)
     g_free(text);
 }
 
-static void cs_init(GOCharmapSel *cs)
+static void go_charmap_sel_init(GOCharmapSel *cs)
 {
     gtk_orientable_set_orientation (GTK_ORIENTABLE(cs), GTK_ORIENTATION_HORIZONTAL);
 
@@ -455,12 +457,13 @@ static void cs_build_menu(GOCharmapSel *cs)
     set_menu_to_default(cs, lg_cnt);
 }
 
-static void cs_class_init(GtkWidgetClass *widget_klass)
+static void go_charmap_sel_class_init(GOCharmapSelClass *klass)
 {
     CharsetInfo *ci;
     size_t i;
 
-    GObjectClass *gobject_class = G_OBJECT_CLASS(widget_klass);
+    GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
+    GtkWidgetClass *widget_klass = GTK_WIDGET_CLASS(klass);
     widget_klass->mnemonic_activate = cs_mnemonic_activate;
 
     gobject_class->set_property = cs_set_property;
@@ -586,34 +589,6 @@ static void cs_class_init(GtkWidgetClass *widget_klass)
     }
 }
 
-GType
-go_charmap_sel_get_type (void)
-{
-    static GType go_charmap_sel_type = 0;
-
-    if (go_charmap_sel_type == 0)
-    {
-        GTypeInfo go_charmap_sel_info =
-        {
-            sizeof (GOCharmapSelClass),
-            NULL,
-            NULL,
-            (GClassInitFunc) cs_class_init,
-            NULL,
-            NULL,
-            sizeof (GOCharmapSel),
-            0,
-            (GInstanceInitFunc) cs_init
-        };
-
-        go_charmap_sel_type = g_type_register_static (GTK_TYPE_BOX,
-                           "GOCharmapSel",
-                           &go_charmap_sel_info, 0);
-    }
-
-    return go_charmap_sel_type;
-}
-
 GtkWidget *
 go_charmap_sel_new(GOCharmapSelTestDirection test)
 {

commit cce0ccff7b8732feca9cef2750ca680614115409
Author: Richard Cohen <richard at daijobu.co.uk>
Date:   Mon May 22 10:45:55 2023 +0100

    BUGFIX: Actions > Online Actions > Show log Window does not open ...
    
    ... when it is first clicked

diff --git a/gnucash/import-export/aqb/gnc-gwen-gui.c b/gnucash/import-export/aqb/gnc-gwen-gui.c
index 44a492e82c..47055afef1 100644
--- a/gnucash/import-export/aqb/gnc-gwen-gui.c
+++ b/gnucash/import-export/aqb/gnc-gwen-gui.c
@@ -353,6 +353,7 @@ gnc_GWEN_Gui_show_dialog()
     if (!gui)
     {
         gnc_GWEN_Gui_get(NULL);
+        gui = full_gui;
     }
 
     if (gui)
@@ -365,6 +366,8 @@ gnc_GWEN_Gui_show_dialog()
             GTK_TOGGLE_BUTTON(gui->close_checkbutton),
             gnc_prefs_get_bool (GNC_PREFS_GROUP_AQBANKING, GNC_PREF_CLOSE_ON_FINISH));
 
+        gtk_widget_set_sensitive(gui->close_button, TRUE);
+
         show_dialog(gui, FALSE);
 
         return TRUE;
@@ -1665,7 +1668,7 @@ ggg_close_clicked_cb(GtkButton *button, gpointer user_data)
     GncGWENGui *gui = user_data;
 
     g_return_if_fail(gui);
-    g_return_if_fail(gui->state == FINISHED || gui->state == ABORTED);
+    g_return_if_fail(gui->state == INIT || gui->state == FINISHED || gui->state == ABORTED);
 
     ENTER("gui=%p", gui);
 



Summary of changes:
 borrowed/goffice/go-charmap-sel.c                  | 37 ++---------
 borrowed/goffice/go-optionmenu.c                   | 28 +--------
 gnucash/gnome-utils/gnc-cell-renderer-date.c       | 49 +++------------
 .../gnome-utils/gnc-cell-renderer-popup-entry.c    | 48 +--------------
 gnucash/gnome-utils/gnc-cell-renderer-popup.c      | 41 ++----------
 gnucash/gnome-utils/gnc-date-edit.c                | 53 ++--------------
 gnucash/gnome-utils/gnc-dense-cal-store.c          | 51 ++++-----------
 gnucash/gnome-utils/gnc-dense-cal.c                | 41 +-----------
 gnucash/gnome-utils/gnc-frequency.c                | 44 ++-----------
 gnucash/gnome-utils/gnc-frequency.h                |  2 -
 gnucash/gnome-utils/gnc-general-select.c           | 51 ++-------------
 gnucash/gnome-utils/gnc-recurrence.c               | 58 +----------------
 .../gnc-sx-instance-dense-cal-adapter.c            | 52 +++-------------
 .../gnome-utils/gnc-sx-list-tree-model-adapter.c   | 68 +++-----------------
 gnucash/gnome/dialog-sx-since-last-run.c           | 58 +++--------------
 gnucash/gnome/gnc-split-reg.c                      | 30 +--------
 gnucash/gnome/reconcile-view.c                     | 36 +----------
 gnucash/import-export/aqb/gnc-gwen-gui.c           |  5 +-
 gnucash/register/register-gnome/gnucash-cursor.c   | 43 +++----------
 .../register/register-gnome/gnucash-date-picker.c  | 35 +----------
 gnucash/register/register-gnome/gnucash-header.c   | 42 ++-----------
 .../register/register-gnome/gnucash-item-edit.c    | 72 ++--------------------
 .../register/register-gnome/gnucash-item-list.c    | 35 +----------
 gnucash/register/register-gnome/gnucash-register.c | 36 +----------
 gnucash/register/register-gnome/gnucash-sheet.c    | 51 +++------------
 .../report/reports/standard/advanced-portfolio.scm |  2 +-
 .../report/reports/standard/investment-lots.scm    |  2 +-
 gnucash/report/reports/standard/portfolio.scm      |  2 +-
 libgnucash/app-utils/gnc-sx-instance-model.c       | 42 ++-----------
 29 files changed, 133 insertions(+), 981 deletions(-)



More information about the gnucash-changes mailing list