changeset 15859:2cb422e2d16c

(update_one_menu_entry): Fix previous change: When XmIsCascadeButton, don't call XmCreateCascadeButtonGadget, just modify the existing one.
author Richard M. Stallman <rms@gnu.org>
date Mon, 12 Aug 1996 18:57:08 +0000
parents 946a4fb104ef
children bad765e6a8d9
files lwlib/lwlib-Xm.c
diffstat 1 files changed, 32 insertions(+), 23 deletions(-) [+]
line wrap: on
line diff
--- a/lwlib/lwlib-Xm.c	Sun Aug 11 00:19:31 1996 +0000
+++ b/lwlib/lwlib-Xm.c	Mon Aug 12 18:57:08 1996 +0000
@@ -510,9 +510,8 @@
       if (contents)
 	{
 	  unsigned int old_num_children, i;
-	  Widget button, parent;
+	  Widget parent;
 	  Widget *widget_list;
-	  int buttonchange;
 
 	  parent = XtParent (widget);
 	  widget_list = XtCompositeChildren (parent, &old_num_children);
@@ -523,27 +522,37 @@
 	      break;
 	  if (i == old_num_children)
 	    abort ();
-	  /* `buttonchange' indicates the parent button is being
-	     exchanged with a CascadeButton.  */
-	  buttonchange = !XmIsCascadeButton (widget_list[i]);
-	  if (buttonchange)
-	    XtDestroyWidget (widget_list[i]);
-	  menu = XmCreatePulldownMenu (parent, val->name, NULL, 0);
-	  make_menu_in_widget (instance, menu, contents, 0);
-	  ac = 0;
-	  XtSetArg (al [ac], XmNsubMenuId, menu); ac++;
-          /* Non-zero values don't work reliably in
-             conjunction with Emacs' event loop */
-          XtSetArg (al [ac], XmNmappingDelay, 0); ac++;
-	  /* Tell Motif to put it in the right place.  */
-	  XtSetArg (al [ac], XmNpositionIndex, i); ac++;
-	  button = XmCreateCascadeButtonGadget (parent, val->name, al, ac);
-	  xm_update_label (instance, button, val);
-	  
-	  XtAddCallback (button, XmNcascadingCallback, xm_pull_down_callback,
-			 (XtPointer)instance);
-	  if (buttonchange)
-	    XtManageChild (button);
+	  if (XmIsCascadeButton (widget_list[i]))
+	    {
+	      menu = XmCreatePulldownMenu (parent, XtName(widget), NULL, 0);
+	      make_menu_in_widget (instance, menu, contents, 0);
+	      ac = 0;
+	      XtSetArg (al [ac], XmNsubMenuId, menu); ac++;
+	      XtSetValues (widget, al, ac);
+	    }
+	  else
+	    {
+	      Widget button;
+	      
+	      /* The current menuitem is a XmPushButtonGadget, it 
+		 needs to be replaced by a CascadeButtonGadget */
+	      XtDestroyWidget (widget_list[i]);
+	      menu = XmCreatePulldownMenu (parent, val->name, NULL, 0);
+	      make_menu_in_widget (instance, menu, contents, 0);
+	      ac = 0;
+	      XtSetArg (al [ac], XmNsubMenuId, menu); ac++;
+	      /* Non-zero values don't work reliably in
+		 conjunction with Emacs' event loop */
+	      XtSetArg (al [ac], XmNmappingDelay, 0); ac++;
+	      /* Tell Motif to put it in the right place */
+	      XtSetArg (al [ac], XmNpositionIndex, i); ac++;
+	      button = XmCreateCascadeButtonGadget (parent, val->name, al, ac);
+	      xm_update_label (instance, button, val);
+	      
+	      XtAddCallback (button, XmNcascadingCallback, xm_pull_down_callback,
+			     (XtPointer)instance);
+	      XtManageChild (button);
+	    }
 	}
     }
   else if (!contents)