diff options
| author | Richard M. Stallman | 1993-03-11 08:09:52 +0000 |
|---|---|---|
| committer | Richard M. Stallman | 1993-03-11 08:09:52 +0000 |
| commit | d9dcaf49d9b457bd184ae3d37da9e99d25bfb528 (patch) | |
| tree | cb448bfe7426191299e3020b4481b99e46c3980a /src/xmenu.c | |
| parent | 06b98c510cb84d2b99392b861c3b2d6bb2e4da29 (diff) | |
| download | emacs-d9dcaf49d9b457bd184ae3d37da9e99d25bfb528.tar.gz emacs-d9dcaf49d9b457bd184ae3d37da9e99d25bfb528.zip | |
(syms_of_xmenu): Set up Qmenu_enable.
(single_keymap_panes): Test menu-enable property of symbol
to decide whether to include it in the menu.
Diffstat (limited to 'src/xmenu.c')
| -rw-r--r-- | src/xmenu.c | 44 |
1 files changed, 37 insertions, 7 deletions
diff --git a/src/xmenu.c b/src/xmenu.c index 972c4333d38..bf0d4c497da 100644 --- a/src/xmenu.c +++ b/src/xmenu.c | |||
| @@ -70,6 +70,7 @@ extern Display *x_current_display; | |||
| 70 | #define ButtonReleaseMask ButtonReleased | 70 | #define ButtonReleaseMask ButtonReleased |
| 71 | #endif /* not HAVE_X11 */ | 71 | #endif /* not HAVE_X11 */ |
| 72 | 72 | ||
| 73 | Lisp_Object Qmenu_enable; | ||
| 73 | Lisp_Object xmenu_show (); | 74 | Lisp_Object xmenu_show (); |
| 74 | extern int x_error_handler (); | 75 | extern int x_error_handler (); |
| 75 | 76 | ||
| @@ -399,6 +400,9 @@ xmenu_show (parent, startx, starty, line_list, pane_list, line_cnt, | |||
| 399 | 400 | ||
| 400 | syms_of_xmenu () | 401 | syms_of_xmenu () |
| 401 | { | 402 | { |
| 403 | Qmenu_enable = intern ("menu-enable"); | ||
| 404 | |||
| 405 | staticpro (&Qmenu_enable); | ||
| 402 | defsubr (&Sx_popup_menu); | 406 | defsubr (&Sx_popup_menu); |
| 403 | } | 407 | } |
| 404 | 408 | ||
| @@ -516,12 +520,24 @@ single_keymap_panes (keymap, panes, vector, names, items, | |||
| 516 | item2 = XCONS (item1)->car; | 520 | item2 = XCONS (item1)->car; |
| 517 | if (XTYPE (item2) == Lisp_String) | 521 | if (XTYPE (item2) == Lisp_String) |
| 518 | { | 522 | { |
| 519 | Lisp_Object tem; | 523 | Lisp_Object def, tem; |
| 520 | tem = Fkeymapp (Fcdr (item1)); | 524 | Lisp_Object enabled; |
| 525 | |||
| 526 | def = Fcdr (item1); | ||
| 527 | enabled = Qt; | ||
| 528 | if (XTYPE (def) == Lisp_Symbol) | ||
| 529 | { | ||
| 530 | /* No property, or nil, means enable. | ||
| 531 | Otherwise, enable if value is not nil. */ | ||
| 532 | tem = Fget (def, Qmenu_enable); | ||
| 533 | if (!NILP (tem)) | ||
| 534 | enabled = Feval (tem); | ||
| 535 | } | ||
| 536 | tem = Fkeymapp (def); | ||
| 521 | if (XSTRING (item2)->data[0] == '@' && !NILP (tem)) | 537 | if (XSTRING (item2)->data[0] == '@' && !NILP (tem)) |
| 522 | pending_maps = Fcons (Fcons (Fcdr (item1), item2), | 538 | pending_maps = Fcons (Fcons (def, item2), |
| 523 | pending_maps); | 539 | pending_maps); |
| 524 | else | 540 | else if (!NILP (enabled)) |
| 525 | { | 541 | { |
| 526 | (*names)[*p_ptr][i] = (char *) XSTRING (item2)->data; | 542 | (*names)[*p_ptr][i] = (char *) XSTRING (item2)->data; |
| 527 | /* The menu item "value" is the key bound here. */ | 543 | /* The menu item "value" is the key bound here. */ |
| @@ -547,11 +563,25 @@ single_keymap_panes (keymap, panes, vector, names, items, | |||
| 547 | if (XTYPE (item2) == Lisp_String) | 563 | if (XTYPE (item2) == Lisp_String) |
| 548 | { | 564 | { |
| 549 | Lisp_Object tem; | 565 | Lisp_Object tem; |
| 550 | tem = Fkeymapp (Fcdr (item1)); | 566 | Lisp_Object def; |
| 567 | Lisp_Object enabled; | ||
| 568 | |||
| 569 | def = Fcdr (item1); | ||
| 570 | enabled = Qt; | ||
| 571 | if (XTYPE (def) == Lisp_Symbol) | ||
| 572 | { | ||
| 573 | tem = Fget (def, Qmenu_enable); | ||
| 574 | /* No property, or nil, means enable. | ||
| 575 | Otherwise, enable if value is not nil. */ | ||
| 576 | if (!NILP (tem)) | ||
| 577 | enabled = Feval (tem); | ||
| 578 | } | ||
| 579 | |||
| 580 | tem = Fkeymapp (def); | ||
| 551 | if (XSTRING (item2)->data[0] == '@' && !NILP (tem)) | 581 | if (XSTRING (item2)->data[0] == '@' && !NILP (tem)) |
| 552 | pending_maps = Fcons (Fcons (Fcdr (item1), item2), | 582 | pending_maps = Fcons (Fcons (def, item2), |
| 553 | pending_maps); | 583 | pending_maps); |
| 554 | else | 584 | else if (!NILP (enabled)) |
| 555 | { | 585 | { |
| 556 | (*names)[*p_ptr][i] = (char *) XSTRING (item2)->data; | 586 | (*names)[*p_ptr][i] = (char *) XSTRING (item2)->data; |
| 557 | /* The menu item "value" is the key bound here. */ | 587 | /* The menu item "value" is the key bound here. */ |