From 7003d47b81109ecf7ac9477ab568ac17e970b329 Mon Sep 17 00:00:00 2001
From: Marko Lindqvist <cazfi74@gmail.com>
Date: Sun, 18 Jan 2026 12:20:19 +0200
Subject: [PATCH 55/55] gtk4(x) citydlg: Stop supported/present units icons
 shrinking

Make scrollbar to appear as soon as units do not fit by
their natural size, instead of shrinking them to fit in
without the scrollbar.

Reported by Andrea Maria Marconi

See RM #1875

Signed-off-by: Marko Lindqvist <cazfi74@gmail.com>
---
 client/gui-gtk-4.0/citydlg.c | 11 +++++++++--
 client/gui-gtk-5.0/citydlg.c | 12 +++++++++---
 2 files changed, 18 insertions(+), 5 deletions(-)

diff --git a/client/gui-gtk-4.0/citydlg.c b/client/gui-gtk-4.0/citydlg.c
index 7d868aeb8f..8a10df8f18 100644
--- a/client/gui-gtk-4.0/citydlg.c
+++ b/client/gui-gtk-4.0/citydlg.c
@@ -944,6 +944,7 @@ static void create_and_append_overview_page(struct city_dialog *pdialog)
   GtkWidget *page, *bottom;
   GtkWidget *right, *frame, *table;
   GtkWidget *label, *sw, *view, *bar, *production_combo;
+  GtkWidget *vp;
   GtkCellRenderer *rend;
   GtkListStore *production_store;
   /* TRANS: Overview tab in city dialog */
@@ -1083,7 +1084,10 @@ static void create_and_append_overview_page(struct city_dialog *pdialog)
 
   table = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 2);
   gtk_widget_set_size_request(table, -1, unit_height);
-  gtk_scrolled_window_set_child(GTK_SCROLLED_WINDOW(sw), table);
+  vp = gtk_viewport_new(NULL, NULL);
+  gtk_scrollable_set_hscroll_policy(GTK_SCROLLABLE(vp), GTK_SCROLL_NATURAL);
+  gtk_viewport_set_child(GTK_VIEWPORT(vp), table);
+  gtk_scrolled_window_set_child(GTK_SCROLLED_WINDOW(sw), vp);
 
   pdialog->overview.supported_unit_table = table;
   unit_node_vector_init(&pdialog->overview.supported_units);
@@ -1098,7 +1102,10 @@ static void create_and_append_overview_page(struct city_dialog *pdialog)
 
   table = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 2);
   gtk_widget_set_size_request(table, -1, unit_height);
-  gtk_scrolled_window_set_child(GTK_SCROLLED_WINDOW(sw), table);
+  vp = gtk_viewport_new(NULL, NULL);
+  gtk_scrollable_set_hscroll_policy(GTK_SCROLLABLE(vp), GTK_SCROLL_NATURAL);
+  gtk_viewport_set_child(GTK_VIEWPORT(vp), table);
+  gtk_scrolled_window_set_child(GTK_SCROLLED_WINDOW(sw), vp);
 
   pdialog->overview.present_unit_table = table;
   unit_node_vector_init(&pdialog->overview.present_units);
diff --git a/client/gui-gtk-5.0/citydlg.c b/client/gui-gtk-5.0/citydlg.c
index 85de8d60b7..0095e2bb17 100644
--- a/client/gui-gtk-5.0/citydlg.c
+++ b/client/gui-gtk-5.0/citydlg.c
@@ -1233,7 +1233,7 @@ static void create_and_append_overview_page(struct city_dialog *pdialog)
 {
   GtkWidget *page, *bottom;
   GtkWidget *right, *frame, *table;
-  GtkWidget *label, *sw, *view, *bar;
+  GtkWidget *label, *sw, *view, *bar, *vp;
   /* TRANS: Overview tab in city dialog */
   const char *tab_title = _("_Overview");
   int unit_height = tileset_unit_with_upkeep_height(tileset);
@@ -1370,7 +1370,10 @@ static void create_and_append_overview_page(struct city_dialog *pdialog)
 
   table = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 2);
   gtk_widget_set_size_request(table, -1, unit_height);
-  gtk_scrolled_window_set_child(GTK_SCROLLED_WINDOW(sw), table);
+  vp = gtk_viewport_new(NULL, NULL);
+  gtk_scrollable_set_hscroll_policy(GTK_SCROLLABLE(vp), GTK_SCROLL_NATURAL);
+  gtk_viewport_set_child(GTK_VIEWPORT(vp), table);
+  gtk_scrolled_window_set_child(GTK_SCROLLED_WINDOW(sw), vp);
 
   pdialog->overview.supported_unit_table = table;
   unit_node_vector_init(&pdialog->overview.supported_units);
@@ -1385,7 +1388,10 @@ static void create_and_append_overview_page(struct city_dialog *pdialog)
 
   table = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 2);
   gtk_widget_set_size_request(table, -1, unit_height);
-  gtk_scrolled_window_set_child(GTK_SCROLLED_WINDOW(sw), table);
+  vp = gtk_viewport_new(NULL, NULL);
+  gtk_scrollable_set_hscroll_policy(GTK_SCROLLABLE(vp), GTK_SCROLL_NATURAL);
+  gtk_viewport_set_child(GTK_VIEWPORT(vp), table);
+  gtk_scrolled_window_set_child(GTK_SCROLLED_WINDOW(sw), vp);
 
   pdialog->overview.present_unit_table = table;
   unit_node_vector_init(&pdialog->overview.present_units);
-- 
2.51.0

