aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJason Rumney2001-10-21 10:54:17 +0000
committerJason Rumney2001-10-21 10:54:17 +0000
commit292508513c425257dadc19e72a8c13d433134a5e (patch)
treeab5a3848de35cb1e75e4c14d5ef0c0444c948ee5 /src
parent386ca3619cb7f2fbce7ecdf709137eb881e5efd5 (diff)
downloademacs-292508513c425257dadc19e72a8c13d433134a5e.tar.gz
emacs-292508513c425257dadc19e72a8c13d433134a5e.zip
(single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Protect unibyte stings created by replacing their multibyte equivalents in menu_items. (w32_menu_show): Don't overwrite an item's name with its key description in case the description is a multibyte string. (single_submenu): Some cleanup.
Diffstat (limited to 'src')
-rw-r--r--src/w32menu.c80
1 files changed, 48 insertions, 32 deletions
diff --git a/src/w32menu.c b/src/w32menu.c
index a30328e7ea9..74d4f2754b4 100644
--- a/src/w32menu.c
+++ b/src/w32menu.c
@@ -1168,11 +1168,16 @@ single_submenu (item_key, item_name, maps)
1168 /* Create a new pane. */ 1168 /* Create a new pane. */
1169 Lisp_Object pane_name, prefix; 1169 Lisp_Object pane_name, prefix;
1170 char *pane_string; 1170 char *pane_string;
1171
1171 pane_name = XVECTOR (menu_items)->contents[i + MENU_ITEMS_PANE_NAME]; 1172 pane_name = XVECTOR (menu_items)->contents[i + MENU_ITEMS_PANE_NAME];
1172 prefix = XVECTOR (menu_items)->contents[i + MENU_ITEMS_PANE_PREFIX]; 1173 prefix = XVECTOR (menu_items)->contents[i + MENU_ITEMS_PANE_PREFIX];
1174
1173#ifndef HAVE_MULTILINGUAL_MENU 1175#ifndef HAVE_MULTILINGUAL_MENU
1174 if (STRINGP (pane_name) && STRING_MULTIBYTE (pane_name)) 1176 if (STRINGP (pane_name) && STRING_MULTIBYTE (pane_name))
1175 pane_name = ENCODE_SYSTEM (pane_name); 1177 {
1178 pane_name = ENCODE_SYSTEM (pane_name);
1179 AREF (menu_items, i + MENU_ITEMS_PANE_NAME) = pane_name;
1180 }
1176#endif 1181#endif
1177 pane_string = (NILP (pane_name) 1182 pane_string = (NILP (pane_name)
1178 ? "" : (char *) XSTRING (pane_name)->data); 1183 ? "" : (char *) XSTRING (pane_name)->data);
@@ -1210,21 +1215,27 @@ single_submenu (item_key, item_name, maps)
1210 Lisp_Object item_name, enable, descrip, def, type, selected; 1215 Lisp_Object item_name, enable, descrip, def, type, selected;
1211 Lisp_Object help; 1216 Lisp_Object help;
1212 1217
1213 item_name = XVECTOR (menu_items)->contents[i + MENU_ITEMS_ITEM_NAME]; 1218 item_name = AREF (menu_items, i + MENU_ITEMS_ITEM_NAME);
1214 enable = XVECTOR (menu_items)->contents[i + MENU_ITEMS_ITEM_ENABLE]; 1219 enable = AREF (menu_items, i + MENU_ITEMS_ITEM_ENABLE);
1215 descrip 1220 descrip = AREF (menu_items, i + MENU_ITEMS_ITEM_EQUIV_KEY);
1216 = XVECTOR (menu_items)->contents[i + MENU_ITEMS_ITEM_EQUIV_KEY]; 1221 def = AREF (menu_items, i + MENU_ITEMS_ITEM_DEFINITION);
1217 def = XVECTOR (menu_items)->contents[i + MENU_ITEMS_ITEM_DEFINITION]; 1222 type = AREF (menu_items, i + MENU_ITEMS_ITEM_TYPE);
1218 type = XVECTOR (menu_items)->contents[i + MENU_ITEMS_ITEM_TYPE]; 1223 selected = AREF (menu_items, i + MENU_ITEMS_ITEM_SELECTED);
1219 selected = XVECTOR (menu_items)->contents[i + MENU_ITEMS_ITEM_SELECTED]; 1224 help = AREF (menu_items, i + MENU_ITEMS_ITEM_HELP);
1220 help = XVECTOR (menu_items)->contents[i + MENU_ITEMS_ITEM_HELP];
1221 1225
1222#ifndef HAVE_MULTILINGUAL_MENU 1226#ifndef HAVE_MULTILINGUAL_MENU
1223 if (STRING_MULTIBYTE (item_name)) 1227 if (STRING_MULTIBYTE (item_name))
1224 item_name = ENCODE_SYSTEM (item_name); 1228 {
1229 item_name = ENCODE_SYSTEM (item_name);
1230 AREF (menu_items, i + MENU_ITEMS_ITEM_NAME) = item_name;
1231 }
1232
1225 if (STRINGP (descrip) && STRING_MULTIBYTE (descrip)) 1233 if (STRINGP (descrip) && STRING_MULTIBYTE (descrip))
1226 descrip = ENCODE_SYSTEM (descrip); 1234 {
1227#endif 1235 descrip = ENCODE_SYSTEM (descrip);
1236 AREF (menu_items, i + MENU_ITEMS_ITEM_EQUIV_KEY) = descrip;
1237 }
1238#endif /* not HAVE_MULTILINGUAL_MENU */
1228 1239
1229 wv = xmalloc_widget_value (); 1240 wv = xmalloc_widget_value ();
1230 if (prev_wv) 1241 if (prev_wv)
@@ -1522,7 +1533,7 @@ free_frame_menubar (f)
1522 f->output_data.w32->menubar_widget = NULL; 1533 f->output_data.w32->menubar_widget = NULL;
1523 DestroyMenu (old); 1534 DestroyMenu (old);
1524 } 1535 }
1525 1536
1526 UNBLOCK_INPUT; 1537 UNBLOCK_INPUT;
1527} 1538}
1528 1539
@@ -1613,11 +1624,14 @@ w32_menu_show (f, x, y, for_click, keymaps, title, error)
1613 /* Create a new pane. */ 1624 /* Create a new pane. */
1614 Lisp_Object pane_name, prefix; 1625 Lisp_Object pane_name, prefix;
1615 char *pane_string; 1626 char *pane_string;
1616 pane_name = XVECTOR (menu_items)->contents[i + MENU_ITEMS_PANE_NAME]; 1627 pane_name = AREF (menu_items, i + MENU_ITEMS_PANE_NAME);
1617 prefix = XVECTOR (menu_items)->contents[i + MENU_ITEMS_PANE_PREFIX]; 1628 prefix = AREF (menu_items, i + MENU_ITEMS_PANE_PREFIX);
1618#ifndef HAVE_MULTILINGUAL_MENU 1629#ifndef HAVE_MULTILINGUAL_MENU
1619 if (!NILP (pane_name) && STRING_MULTIBYTE (pane_name)) 1630 if (STRINGP (pane_name) && STRING_MULTIBYTE (pane_name))
1620 pane_name = ENCODE_SYSTEM (pane_name); 1631 {
1632 pane_name = ENCODE_SYSTEM (pane_name);
1633 AREF (menu_items, i + MENU_ITEMS_PANE_NAME) = pane_name;
1634 }
1621#endif 1635#endif
1622 pane_string = (NILP (pane_name) 1636 pane_string = (NILP (pane_name)
1623 ? "" : (char *) XSTRING (pane_name)->data); 1637 ? "" : (char *) XSTRING (pane_name)->data);
@@ -1658,21 +1672,26 @@ w32_menu_show (f, x, y, for_click, keymaps, title, error)
1658 /* Create a new item within current pane. */ 1672 /* Create a new item within current pane. */
1659 Lisp_Object item_name, enable, descrip, def, type, selected, help; 1673 Lisp_Object item_name, enable, descrip, def, type, selected, help;
1660 1674
1661 item_name = XVECTOR (menu_items)->contents[i + MENU_ITEMS_ITEM_NAME]; 1675 item_name = AREF (menu_items, i + MENU_ITEMS_ITEM_NAME);
1662 enable = XVECTOR (menu_items)->contents[i + MENU_ITEMS_ITEM_ENABLE]; 1676 enable = AREF (menu_items, i + MENU_ITEMS_ITEM_ENABLE);
1663 descrip 1677 descrip = AREF (menu_items, i + MENU_ITEMS_ITEM_EQUIV_KEY);
1664 = XVECTOR (menu_items)->contents[i + MENU_ITEMS_ITEM_EQUIV_KEY]; 1678 def = AREF (menu_items, i + MENU_ITEMS_ITEM_DEFINITION);
1665 def = XVECTOR (menu_items)->contents[i + MENU_ITEMS_ITEM_DEFINITION]; 1679 type = AREF (menu_items, i + MENU_ITEMS_ITEM_TYPE);
1666 type = XVECTOR (menu_items)->contents[i + MENU_ITEMS_ITEM_TYPE]; 1680 selected = AREF (menu_items, i + MENU_ITEMS_ITEM_SELECTED);
1667 selected = XVECTOR (menu_items)->contents[i + MENU_ITEMS_ITEM_SELECTED]; 1681 help = AREF (menu_items, i + MENU_ITEMS_ITEM_HELP);
1668 help = XVECTOR (menu_items)->contents[i + MENU_ITEMS_ITEM_HELP];
1669 1682
1670#ifndef HAVE_MULTILINGUAL_MENU 1683#ifndef HAVE_MULTILINGUAL_MENU
1671 if (STRINGP (item_name) && STRING_MULTIBYTE (item_name)) 1684 if (STRINGP (item_name) && STRING_MULTIBYTE (item_name))
1672 item_name = ENCODE_SYSTEM (item_name); 1685 {
1686 item_name = ENCODE_SYSTEM (item_name);
1687 AREF (menu_items, i + MENU_ITEMS_ITEM_NAME) = item_name;
1688 }
1673 if (STRINGP (descrip) && STRING_MULTIBYTE (descrip)) 1689 if (STRINGP (descrip) && STRING_MULTIBYTE (descrip))
1674 descrip = ENCODE_SYSTEM (descrip); 1690 {
1675#endif 1691 descrip = ENCODE_SYSTEM (descrip);
1692 AREF (menu_items, i + MENU_ITEMS_ITEM_EQUIV_KEY) = descrip;
1693 }
1694#endif /* not HAVE_MULTILINGUAL_MENU */
1676 1695
1677 wv = xmalloc_widget_value (); 1696 wv = xmalloc_widget_value ();
1678 if (prev_wv) 1697 if (prev_wv)
@@ -1698,11 +1717,8 @@ w32_menu_show (f, x, y, for_click, keymaps, title, error)
1698 abort (); 1717 abort ();
1699 1718
1700 wv->selected = !NILP (selected); 1719 wv->selected = !NILP (selected);
1701
1702 if (STRINGP (help)) 1720 if (STRINGP (help))
1703 wv->help = (char *) XSTRING (help)->data; 1721 wv->help = XSTRING (help)->data;
1704 else
1705 wv->help = NULL;
1706 1722
1707 prev_wv = wv; 1723 prev_wv = wv;
1708 1724