changeset 14931:0706926a11cb

(destroy_all_children): When freeing a cascade button, free its submenu too. (make_menu_in_widget): Use a cascade button gadget, not a widget. Include Xm/CascadeBG.h.
author Richard M. Stallman <rms@gnu.org>
date Wed, 03 Apr 1996 17:22:57 +0000
parents 382c7659273e
children 1ef0f400ee8f
files lwlib/lwlib-Xm.c
diffstat 1 files changed, 16 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/lwlib/lwlib-Xm.c	Wed Apr 03 17:22:11 1996 +0000
+++ b/lwlib/lwlib-Xm.c	Wed Apr 03 17:22:57 1996 +0000
@@ -34,6 +34,7 @@
 
 #include <Xm/BulletinB.h>
 #include <Xm/CascadeB.h>
+#include <Xm/CascadeBG.h>
 #include <Xm/DrawingA.h>
 #include <Xm/FileSB.h>
 #include <Xm/Label.h>
@@ -168,7 +169,20 @@
       /* Unmanage all children and destroy them.  They will only be 
 	 really destroyed when we get out of DispatchEvent.  */
       for (i = first_child_to_destroy; i < number; i++)
-	XtDestroyWidget (children[i]);
+	{
+	  Arg al[2];
+	  Widget submenu = 0;
+	  /* Cascade buttons have submenus,and these submenus
+	     need to be freed.  But they are not included in
+	     XtCompositeChildren.  So get it out of the cascade button
+	     and free it.  If this child is not a cascade button,
+	     then submenu should remain unchanged.  */
+	  XtSetArg (al[0], XmNsubMenuId, &submenu); 
+  	  XtGetValues (children[i], al, 1);
+	  if (submenu)
+	    XtDestroyWidget (submenu);
+	  XtDestroyWidget (children[i]);
+	}
 
       XtFree ((char *) children);
     }
@@ -427,7 +441,7 @@
 	  menu = XmCreatePulldownMenu (widget, cur->name, NULL, 0);
 	  make_menu_in_widget (instance, menu, cur->contents, 0);
 	  XtSetArg (al [ac], XmNsubMenuId, menu); ac++;
-	  button = XmCreateCascadeButton (widget, cur->name, al, ac);
+	  button = XmCreateCascadeButtonGadget (widget, cur->name, al, ac);
 
 	  xm_update_label (instance, button, cur);