aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard M. Stallman1996-08-10 18:48:18 +0000
committerRichard M. Stallman1996-08-10 18:48:18 +0000
commit565157eefa62ad416c7aa841953fa2aee1be5345 (patch)
tree8228f6c4d2ad6dca139195538e02cbedfda0b601
parent1b97fc6eb4694cfdabb98bdf7b21c02b293bbd8a (diff)
downloademacs-565157eefa62ad416c7aa841953fa2aee1be5345.tar.gz
emacs-565157eefa62ad416c7aa841953fa2aee1be5345.zip
(update_one_menu_entry): When creating a pulldown
in an existing but empty menu item, in order to get a new functional pulldown, the menu item must be switched from an XmPushButtonGadget into a XmCascadeButtonGadget.
-rw-r--r--lwlib/lwlib-Xm.c39
1 files changed, 36 insertions, 3 deletions
diff --git a/lwlib/lwlib-Xm.c b/lwlib/lwlib-Xm.c
index c5da97f85ed..38713adb25f 100644
--- a/lwlib/lwlib-Xm.c
+++ b/lwlib/lwlib-Xm.c
@@ -509,11 +509,41 @@ update_one_menu_entry (instance, widget, val, deep_p)
509 { 509 {
510 if (contents) 510 if (contents)
511 { 511 {
512 menu = XmCreatePulldownMenu (XtParent (widget), XtName (widget), NULL, 0); 512 unsigned int old_num_children, i;
513 Widget button, parent;
514 Widget *widget_list;
515 int buttonchange;
516
517 parent = XtParent (widget);
518 widget_list = XtCompositeChildren (parent, &old_num_children);
519
520 /* Find the widget position within the parent's widget list. */
521 for (i = 0; i < old_num_children; i++)
522 if (strcmp (XtName (widget_list[i]), XtName (widget)) == 0)
523 break;
524 if (i == old_num_children)
525 abort ();
526 /* `buttonchange' indicates the parent button is being
527 exchanged with a CascadeButton. */
528 buttonchange = !XmIsCascadeButton (widget_list[i]);
529 if (buttonchange)
530 XtDestroyWidget (widget_list[i]);
531 menu = XmCreatePulldownMenu (parent, val->name, NULL, 0);
513 make_menu_in_widget (instance, menu, contents, 0); 532 make_menu_in_widget (instance, menu, contents, 0);
514 ac = 0; 533 ac = 0;
515 XtSetArg (al [ac], XmNsubMenuId, menu); ac++; 534 XtSetArg (al [ac], XmNsubMenuId, menu); ac++;
516 XtSetValues (widget, al, ac); 535 /* Non-zero values don't work reliably in
536 conjunction with Emacs' event loop */
537 XtSetArg (al [ac], XmNmappingDelay, 0); ac++;
538 /* Tell Motif to put it in the right place. */
539 XtSetArg (al [ac], XmNpositionIndex, i); ac++;
540 button = XmCreateCascadeButtonGadget (parent, val->name, al, ac);
541 xm_update_label (instance, button, val);
542
543 XtAddCallback (button, XmNcascadingCallback, xm_pull_down_callback,
544 (XtPointer)instance);
545 if (buttonchange)
546 XtManageChild (button);
517 } 547 }
518 } 548 }
519 else if (!contents) 549 else if (!contents)
@@ -575,7 +605,10 @@ xm_update_menu (instance, widget, val, deep_p)
575 for (i = 0, cur = val->contents; i < num_children_to_keep; i++) 605 for (i = 0, cur = val->contents; i < num_children_to_keep; i++)
576 { 606 {
577 if (!cur) 607 if (!cur)
578 abort (); 608 {
609 num_children_to_keep = i;
610 break;
611 }
579 if (children [i]->core.being_destroyed 612 if (children [i]->core.being_destroyed
580 || strcmp (XtName (children [i]), cur->name)) 613 || strcmp (XtName (children [i]), cur->name))
581 continue; 614 continue;