Mercurial > emacs
comparison src/xmenu.c @ 48946:2c4a754e02b6
(parse_single_submenu): Use individual keymap's prompt
string as pane name, if there is one.
(set_frame_menubar): Save menu_items_n_panes from each call to
parse_single_submenu and use it when calling digest_single_submenu.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Mon, 23 Dec 2002 18:06:42 +0000 |
parents | b0b74923fe41 |
children | 8c37b25a7f02 |
comparison
equal
deleted
inserted
replaced
48945:a96801f68a82 | 48946:2c4a754e02b6 |
---|---|
1432 push_menu_pane (Qnil, Qnil); | 1432 push_menu_pane (Qnil, Qnil); |
1433 push_menu_item (item_name, Qt, item_key, mapvec[i], | 1433 push_menu_item (item_name, Qt, item_key, mapvec[i], |
1434 Qnil, Qnil, Qnil, Qnil); | 1434 Qnil, Qnil, Qnil, Qnil); |
1435 } | 1435 } |
1436 else | 1436 else |
1437 single_keymap_panes (mapvec[i], item_name, item_key, 0, 10); | 1437 { |
1438 Lisp_Object prompt; | |
1439 prompt = Fkeymap_prompt (mapvec[i]); | |
1440 single_keymap_panes (mapvec[i], | |
1441 !NILP (prompt) ? prompt : item_name, | |
1442 item_key, 0, 10); | |
1443 } | |
1438 } | 1444 } |
1439 | 1445 |
1440 return top_level_items; | 1446 return top_level_items; |
1441 } | 1447 } |
1442 | 1448 |
1463 wv->help = Qnil; | 1469 wv->help = Qnil; |
1464 first_wv = wv; | 1470 first_wv = wv; |
1465 save_wv = 0; | 1471 save_wv = 0; |
1466 prev_wv = 0; | 1472 prev_wv = 0; |
1467 | 1473 |
1468 /* Loop over all panes and items made during this call | 1474 /* Loop over all panes and items made by the preceding call |
1469 and construct a tree of widget_value objects. | 1475 to parse_single_submenu and construct a tree of widget_value objects. |
1470 Ignore the panes and items made by previous calls to | 1476 Ignore the panes and items used by previous calls to |
1471 single_submenu, even though those are also in menu_items. */ | 1477 digest_single_submenu, even though those are also in menu_items. */ |
1472 i = start; | 1478 i = start; |
1473 while (i < end) | 1479 while (i < end) |
1474 { | 1480 { |
1475 if (EQ (XVECTOR (menu_items)->contents[i], Qnil)) | 1481 if (EQ (XVECTOR (menu_items)->contents[i], Qnil)) |
1476 { | 1482 { |
1672 Widget menubar_widget = f->output_data.x->menubar_widget; | 1678 Widget menubar_widget = f->output_data.x->menubar_widget; |
1673 Lisp_Object items; | 1679 Lisp_Object items; |
1674 widget_value *wv, *first_wv, *prev_wv = 0; | 1680 widget_value *wv, *first_wv, *prev_wv = 0; |
1675 int i, last_i; | 1681 int i, last_i; |
1676 int *submenu_start, *submenu_end; | 1682 int *submenu_start, *submenu_end; |
1677 int *submenu_top_level_items; | 1683 int *submenu_top_level_items, *submenu_n_panes; |
1678 | 1684 |
1679 LWLIB_ID id; | 1685 LWLIB_ID id; |
1680 | 1686 |
1681 XSETFRAME (Vmenu_updating_frame, f); | 1687 XSETFRAME (Vmenu_updating_frame, f); |
1682 | 1688 |
1750 This can evaluate Lisp code. */ | 1756 This can evaluate Lisp code. */ |
1751 menu_items = f->menu_bar_vector; | 1757 menu_items = f->menu_bar_vector; |
1752 menu_items_allocated = VECTORP (menu_items) ? ASIZE (menu_items) : 0; | 1758 menu_items_allocated = VECTORP (menu_items) ? ASIZE (menu_items) : 0; |
1753 submenu_start = (int *) alloca (XVECTOR (items)->size * sizeof (int *)); | 1759 submenu_start = (int *) alloca (XVECTOR (items)->size * sizeof (int *)); |
1754 submenu_end = (int *) alloca (XVECTOR (items)->size * sizeof (int *)); | 1760 submenu_end = (int *) alloca (XVECTOR (items)->size * sizeof (int *)); |
1761 submenu_n_panes = (int *) alloca (XVECTOR (items)->size * sizeof (int)); | |
1755 submenu_top_level_items | 1762 submenu_top_level_items |
1756 = (int *) alloca (XVECTOR (items)->size * sizeof (int *)); | 1763 = (int *) alloca (XVECTOR (items)->size * sizeof (int *)); |
1757 init_menu_items (); | 1764 init_menu_items (); |
1758 for (i = 0; i < XVECTOR (items)->size; i += 4) | 1765 for (i = 0; i < XVECTOR (items)->size; i += 4) |
1759 { | 1766 { |
1770 submenu_start[i] = menu_items_used; | 1777 submenu_start[i] = menu_items_used; |
1771 | 1778 |
1772 menu_items_n_panes = 0; | 1779 menu_items_n_panes = 0; |
1773 submenu_top_level_items[i] | 1780 submenu_top_level_items[i] |
1774 = parse_single_submenu (key, string, maps); | 1781 = parse_single_submenu (key, string, maps); |
1782 submenu_n_panes[i] = menu_items_n_panes; | |
1775 | 1783 |
1776 submenu_end[i] = menu_items_used; | 1784 submenu_end[i] = menu_items_used; |
1777 } | 1785 } |
1778 | 1786 |
1779 finish_menu_items (); | 1787 finish_menu_items (); |
1789 wv->help = Qnil; | 1797 wv->help = Qnil; |
1790 first_wv = wv; | 1798 first_wv = wv; |
1791 | 1799 |
1792 for (i = 0; i < last_i; i += 4) | 1800 for (i = 0; i < last_i; i += 4) |
1793 { | 1801 { |
1802 menu_items_n_panes = submenu_n_panes[i]; | |
1794 wv = digest_single_submenu (submenu_start[i], submenu_end[i], | 1803 wv = digest_single_submenu (submenu_start[i], submenu_end[i], |
1795 submenu_top_level_items[i]); | 1804 submenu_top_level_items[i]); |
1796 if (prev_wv) | 1805 if (prev_wv) |
1797 prev_wv->next = wv; | 1806 prev_wv->next = wv; |
1798 else | 1807 else |