aboutsummaryrefslogtreecommitdiffstats
path: root/src/xmenu.c
diff options
context:
space:
mode:
authorRichard M. Stallman1993-03-11 08:09:52 +0000
committerRichard M. Stallman1993-03-11 08:09:52 +0000
commitd9dcaf49d9b457bd184ae3d37da9e99d25bfb528 (patch)
treecb448bfe7426191299e3020b4481b99e46c3980a /src/xmenu.c
parent06b98c510cb84d2b99392b861c3b2d6bb2e4da29 (diff)
downloademacs-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.c44
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
73Lisp_Object Qmenu_enable;
73Lisp_Object xmenu_show (); 74Lisp_Object xmenu_show ();
74extern int x_error_handler (); 75extern int x_error_handler ();
75 76
@@ -399,6 +400,9 @@ xmenu_show (parent, startx, starty, line_list, pane_list, line_cnt,
399 400
400syms_of_xmenu () 401syms_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. */