From 17866714ff8ae0bec39e8bc9e3f0ffe4e051ab28 Mon Sep 17 00:00:00 2001 From: Jonah Graham Date: Fri, 7 Nov 2025 11:33:40 -0500 Subject: [PATCH] [GTK4] release OS resources for Shell during destroyWidget Fixes https://github.com/eclipse-platform/eclipse.platform.swt/issues/2741 --- .../gtk/org/eclipse/swt/widgets/Control.java | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java index a1820dc550..83b8bb6564 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java @@ -4825,18 +4825,19 @@ void releaseWidget () { @Override void destroyWidget() { if (GTK.GTK4) { - // Remove widget from hierarchy by removing it from parent container - if (parent != null) { - long currHandle = topHandle(); - - if (GTK.GTK_IS_WINDOW(currHandle)) { - GTK4.gtk_window_destroy(currHandle); - } else { - if (fixedHandle != 0) { - OS.swt_fixed_remove(parent.parentingHandle(), fixedHandle); - } + long currHandle = topHandle(); + if (GTK.GTK_IS_WINDOW(currHandle)) { + // GTK windows don't have a parent, so destroy it now + GTK4.gtk_window_destroy(currHandle); + } else if (parent != null) { + if (fixedHandle != 0) { + // Remove widget from hierarchy by removing it from parent container + OS.swt_fixed_remove(parent.parentingHandle(), fixedHandle); } + } else { + assert false : "widgets must have a parent or be a GtkWindow"; } + releaseHandle(); } else { super.destroyWidget();