From b3fd0bdef2b1b9a34b8946ecced51c8245a61d50 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: Wed, 8 Jul 2026 11:14:36 +0300 Subject: [PATCH] [Gtk4] Fix lazily populated menus being empty MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The first attempt to wire submenu  SHOW/HIDE  listeners happens too early, at bar map time. On GTK4 those nested  GtkPopoverMenu  children may not be fully reachable yet, so Eclipse never receives  SWT.Show  for the cascade submenu and never runs  menuAboutToShow() . The retry in  gtk_show()  runs after the parent dropdown is actually shown, when GTK has built the widget tree, so the nested submenu popovers can be found and connected --- .../Eclipse SWT/gtk/org/eclipse/swt/widgets/Menu.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Menu.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Menu.java index 8f5c2159541..3dc45318bb9 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Menu.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Menu.java @@ -983,6 +983,10 @@ long gtk_show (long widget) { return 0; } sendEvent (SWT.Show); + /* Retry cascade submenu signal hookup once the DROP_DOWN popover is shown. */ + if (GTK.GTK4 && (style & SWT.DROP_DOWN) != 0 && popoverHandle != 0) { + connectCascadeSubMenuSignals(this, popoverHandle); + } if (OS.ubuntu_menu_proxy_get() != 0) { MenuItem[] items = getItems(); for (int i=0; i