From 7d2ce461c871228a50dc4f6a04117ddeb73dd792 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B0=D0=BD=D0=B4=D1=8A?= =?UTF-8?q?=D1=80=20=D0=9A=D1=83=D1=80=D1=82=D0=B0=D0=BA=D0=BE=D0=B2?= Date: Fri, 15 May 2026 18:05:06 +0300 Subject: [PATCH] [Gtk] Fix Tree preferred size becoming invisible after style toggle When a Tree with no explicit columns is laid out with SWT.DEFAULT size hints (e.g. GridData(SWT.DEFAULT, SWT.DEFAULT)), the GTK preferred-size call on the not-yet-rendered GtkTreeView returns width 0. The resulting zero-width allocation triggers the ZERO_WIDTH hide path, making the widget invisible. --- .../gtk/org/eclipse/swt/widgets/Tree.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java index 86089db002..95dd3d13e8 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java @@ -660,6 +660,23 @@ Point computeSizeInPixels (int wHint, int hHint, boolean changed) { } } + /* + * Single column Trees may return a very small initial width if the tree has not + * yet been rendered. Walk all root items to compute the required width directly + * from their cell renderers. + */ + if (wHint == SWT.DEFAULT && size.x == 0 && columnCount == 0) { + long col = GTK.gtk_tree_view_get_column(handle, 0); + if (col != 0) { + long iter = OS.g_malloc(GTK.GtkTreeIter_sizeof()); + boolean valid = GTK.gtk_tree_model_iter_children(modelHandle, iter, 0); + while (valid) { + size.x = Math.max(size.x, calculateWidth(col, iter, true)); + valid = GTK.gtk_tree_model_iter_next(modelHandle, iter); + } + OS.g_free(iter); + } + } Rectangle trim = computeTrimInPixels (0, 0, size.x, size.y); size.x = trim.width; /*