comparison lwlib/lwlib-Xm.c @ 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 1ca5c3c9853a
children d4e514328333
comparison
equal deleted inserted replaced
15858:946a4fb104ef 15859:2cb422e2d16c
508 if (!menu) 508 if (!menu)
509 { 509 {
510 if (contents) 510 if (contents)
511 { 511 {
512 unsigned int old_num_children, i; 512 unsigned int old_num_children, i;
513 Widget button, parent; 513 Widget parent;
514 Widget *widget_list; 514 Widget *widget_list;
515 int buttonchange;
516 515
517 parent = XtParent (widget); 516 parent = XtParent (widget);
518 widget_list = XtCompositeChildren (parent, &old_num_children); 517 widget_list = XtCompositeChildren (parent, &old_num_children);
519 518
520 /* Find the widget position within the parent's widget list. */ 519 /* Find the widget position within the parent's widget list. */
521 for (i = 0; i < old_num_children; i++) 520 for (i = 0; i < old_num_children; i++)
522 if (strcmp (XtName (widget_list[i]), XtName (widget)) == 0) 521 if (strcmp (XtName (widget_list[i]), XtName (widget)) == 0)
523 break; 522 break;
524 if (i == old_num_children) 523 if (i == old_num_children)
525 abort (); 524 abort ();
526 /* `buttonchange' indicates the parent button is being 525 if (XmIsCascadeButton (widget_list[i]))
527 exchanged with a CascadeButton. */ 526 {
528 buttonchange = !XmIsCascadeButton (widget_list[i]); 527 menu = XmCreatePulldownMenu (parent, XtName(widget), NULL, 0);
529 if (buttonchange) 528 make_menu_in_widget (instance, menu, contents, 0);
530 XtDestroyWidget (widget_list[i]); 529 ac = 0;
531 menu = XmCreatePulldownMenu (parent, val->name, NULL, 0); 530 XtSetArg (al [ac], XmNsubMenuId, menu); ac++;
532 make_menu_in_widget (instance, menu, contents, 0); 531 XtSetValues (widget, al, ac);
533 ac = 0; 532 }
534 XtSetArg (al [ac], XmNsubMenuId, menu); ac++; 533 else
535 /* Non-zero values don't work reliably in 534 {
536 conjunction with Emacs' event loop */ 535 Widget button;
537 XtSetArg (al [ac], XmNmappingDelay, 0); ac++; 536
538 /* Tell Motif to put it in the right place. */ 537 /* The current menuitem is a XmPushButtonGadget, it
539 XtSetArg (al [ac], XmNpositionIndex, i); ac++; 538 needs to be replaced by a CascadeButtonGadget */
540 button = XmCreateCascadeButtonGadget (parent, val->name, al, ac); 539 XtDestroyWidget (widget_list[i]);
541 xm_update_label (instance, button, val); 540 menu = XmCreatePulldownMenu (parent, val->name, NULL, 0);
542 541 make_menu_in_widget (instance, menu, contents, 0);
543 XtAddCallback (button, XmNcascadingCallback, xm_pull_down_callback, 542 ac = 0;
544 (XtPointer)instance); 543 XtSetArg (al [ac], XmNsubMenuId, menu); ac++;
545 if (buttonchange) 544 /* Non-zero values don't work reliably in
546 XtManageChild (button); 545 conjunction with Emacs' event loop */
546 XtSetArg (al [ac], XmNmappingDelay, 0); ac++;
547 /* Tell Motif to put it in the right place */
548 XtSetArg (al [ac], XmNpositionIndex, i); ac++;
549 button = XmCreateCascadeButtonGadget (parent, val->name, al, ac);
550 xm_update_label (instance, button, val);
551
552 XtAddCallback (button, XmNcascadingCallback, xm_pull_down_callback,
553 (XtPointer)instance);
554 XtManageChild (button);
555 }
547 } 556 }
548 } 557 }
549 else if (!contents) 558 else if (!contents)
550 { 559 {
551 ac = 0; 560 ac = 0;