Mercurial > emacs
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; |