# HG changeset patch # User Dave Love # Date 1054579723 0 # Node ID e518bae637848b20873b3c9fe3fea32f86092f94 # Parent d30115b64d58315d44a2e8f167a3904eb3098b18 (ENCODE_MENU_STRING): New. (list_of_panes, list_of_items, digest_single_submenu, xmenu_show): Use it. diff -r d30115b64d58 -r e518bae63784 src/xmenu.c --- a/src/xmenu.c Mon Jun 02 18:46:55 2003 +0000 +++ b/src/xmenu.c Mon Jun 02 18:48:43 2003 +0000 @@ -68,6 +68,8 @@ #include "dispextern.h" #ifdef HAVE_X_WINDOWS +/* Defining HAVE_MULTILINGUAL_MENU would mean that the toolkit menu + code accepts the Emacs internal encoding. */ #undef HAVE_MULTILINGUAL_MENU #ifdef USE_X_TOOLKIT #include "widget.h" @@ -127,6 +129,22 @@ static Lisp_Object xdialog_show (); #endif +/* This is how to deal with multibyte text if HAVE_MULTILINGUAL_MENU + isn't defined. The use of HAVE_MULTILINGUAL_MENU could probably be + confined to an extended version of this with sections of code below + using it unconditionally. */ +#ifdef USE_GTK +/* gtk just uses utf-8. */ +# define ENCODE_MENU_STRING(str) ENCODE_UTF_8 (str) +#else +/* I'm not convinced ENCODE_SYSTEM is defined correctly, or maybe + something else should be used here. Except under MS-Windows it + just converts to unibyte, but encoding with `locale-coding-system' + seems better -- X may actually display the result correctly, and + it's not necessarily equivalent to the unibyte text. -- fx */ +# define ENCODE_MENU_STRING(str) ENCODE_SYSTEM (str) +#endif + static void push_menu_item P_ ((Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object)); @@ -633,7 +651,7 @@ elt = Fcar (tail); pane_name = Fcar (elt); CHECK_STRING (pane_name); - push_menu_pane (pane_name, Qnil); + push_menu_pane (ENCODE_MENU_STRING (pane_name), Qnil); pane_data = Fcdr (elt); CHECK_CONS (pane_data); list_of_items (pane_data); @@ -654,7 +672,8 @@ { item = Fcar (tail); if (STRINGP (item)) - push_menu_item (item, Qnil, Qnil, Qt, Qnil, Qnil, Qnil, Qnil); + push_menu_item (ENCODE_MENU_STRING (item), Qnil, Qnil, Qt, + Qnil, Qnil, Qnil, Qnil); else if (NILP (item)) push_left_right_boundary (); else @@ -662,7 +681,8 @@ CHECK_CONS (item); item1 = Fcar (item); CHECK_STRING (item1); - push_menu_item (item1, Qt, Fcdr (item), Qt, Qnil, Qnil, Qnil, Qnil); + push_menu_item (ENCODE_MENU_STRING (item1), Qt, Fcdr (item), + Qt, Qnil, Qnil, Qnil, Qnil); } } } @@ -1697,13 +1717,13 @@ #ifndef HAVE_MULTILINGUAL_MENU if (STRING_MULTIBYTE (item_name)) { - item_name = ENCODE_SYSTEM (item_name); + item_name = ENCODE_MENU_STRING (item_name); AREF (menu_items, i + MENU_ITEMS_ITEM_NAME) = item_name; } if (STRINGP (descrip) && STRING_MULTIBYTE (descrip)) { - descrip = ENCODE_SYSTEM (descrip); + descrip = ENCODE_MENU_STRING (descrip); AREF (menu_items, i + MENU_ITEMS_ITEM_EQUIV_KEY) = descrip; } #endif /* not HAVE_MULTILINGUAL_MENU */ @@ -2377,7 +2397,6 @@ XButtonPressedEvent dummy; LWLIB_ID menu_id; Widget menu; - Window child; menu_id = widget_id_tick++; menu = lw_create_widget ("popup", first_wv->name, menu_id, first_wv, @@ -2561,13 +2580,13 @@ #ifndef HAVE_MULTILINGUAL_MENU if (STRINGP (item_name) && STRING_MULTIBYTE (item_name)) { - item_name = ENCODE_SYSTEM (item_name); + item_name = ENCODE_MENU_STRING (item_name); AREF (menu_items, i + MENU_ITEMS_ITEM_NAME) = item_name; } if (STRINGP (descrip) && STRING_MULTIBYTE (descrip)) { - descrip = ENCODE_SYSTEM (descrip); + descrip = ENCODE_MENU_STRING (descrip); AREF (menu_items, i + MENU_ITEMS_ITEM_EQUIV_KEY) = descrip; } #endif /* not HAVE_MULTILINGUAL_MENU */ @@ -2627,7 +2646,7 @@ #ifndef HAVE_MULTILINGUAL_MENU if (STRING_MULTIBYTE (title)) - title = ENCODE_SYSTEM (title); + title = ENCODE_MENU_STRING (title); #endif wv_title->name = (char *) SDATA (title);