From e969ccaf3d461563acccb915e8b71b7313367753 Mon Sep 17 00:00:00 2001
From: Marko Lindqvist <cazfi74@gmail.com>
Date: Mon, 21 Oct 2024 16:19:07 +0300
Subject: [PATCH 56/56] gtk4x: Implement bind() / create() for wldlg meta list
 item factory

See RM #1002

Signed-off-by: Marko Lindqvist <cazfi74@gmail.com>
---
 client/gui-gtk-5.0/wldlg.c | 32 ++++++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)

diff --git a/client/gui-gtk-5.0/wldlg.c b/client/gui-gtk-5.0/wldlg.c
index 8e752df52a..b525ae1c7c 100644
--- a/client/gui-gtk-5.0/wldlg.c
+++ b/client/gui-gtk-5.0/wldlg.c
@@ -310,6 +310,31 @@ static void cell_edited(GtkCellRendererText *cell,
   refresh_all_city_worklists();
 }
 
+/**********************************************************************//**
+  Wlmeta table cell bind function
+**************************************************************************/
+static void wlmeta_factory_bind(GtkSignalListItemFactory *self,
+                              GtkListItem *list_item,
+                              gpointer user_data)
+{
+  FcWlmetaRow *row;
+  GtkWidget *child = gtk_list_item_get_child(list_item);
+
+  row = gtk_list_item_get_item(list_item);
+
+  gtk_label_set_text(GTK_LABEL(child), row->name);
+}
+
+/**********************************************************************//**
+  Wlmeta table cell setup function
+**************************************************************************/
+static void wlmeta_factory_setup(GtkSignalListItemFactory *self,
+                                 GtkListItem *list_item,
+                                 gpointer user_data)
+{
+  gtk_list_item_set_child(list_item, gtk_label_new(""));
+}
+
 /************************************************************************//**
   Bring up the global worklist report.
 ****************************************************************************/
@@ -318,6 +343,7 @@ static GtkWidget *create_worklists_report(void)
   GtkWidget *shell, *list;
   GtkWidget *vbox, *label, *sw;
   GtkCellRenderer *rend;
+  GtkListItemFactory *factory;
 
   shell = gtk_dialog_new_with_buttons(_("Edit worklists"),
                                       NULL,
@@ -344,6 +370,12 @@ static GtkWidget *create_worklists_report(void)
 
   worklists_store = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_INT);
 
+  factory = gtk_signal_list_item_factory_new();
+  g_signal_connect(factory, "bind", G_CALLBACK(wlmeta_factory_bind),
+                   nullptr);
+  g_signal_connect(factory, "setup", G_CALLBACK(wlmeta_factory_setup),
+                   nullptr);
+
   list = gtk_tree_view_new_with_model(GTK_TREE_MODEL(worklists_store));
   gtk_widget_set_hexpand(list, TRUE);
   gtk_widget_set_vexpand(list, TRUE);
-- 
2.45.2

