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