macmenu.c (ENCODE_MENU_STRING): Added to handle multibyte

strings in menu items.
(single_submenu): Use ENCODE_MENU_STRING
(mac_menu_show): Use ENCODE_MENU_STRING.  Reset grabbed because
button release isn't passed to event loop
(add_menu_item): Use SetMenuItemWithCFString
This commit is contained in:
Steven Tamm 2004-08-26 18:43:29 +00:00
parent 6eb3ee72e0
commit 383418e512
2 changed files with 34 additions and 5 deletions

View file

@ -1,3 +1,12 @@
2004-08-26 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
* macmenu.c (ENCODE_MENU_STRING): Added to handle multibyte
strings in menu items.
(single_submenu): Use ENCODE_MENU_STRING
(mac_menu_show): Use ENCODE_MENU_STRING. Reset grabbed because
button release isn't passed to event loop
(add_menu_item): Use SetMenuItemWithCFString
2004-08-26 Steven Tamm <steventamm@mac.com>
* fileio.c (Fread_file_name): Call x_file_dialog on carbon on

View file

@ -163,6 +163,12 @@ extern Lisp_Object Qoverriding_local_map, Qoverriding_terminal_local_map;
extern Lisp_Object Qmenu_bar_update_hook;
#if TARGET_API_MAC_CARBON
#define ENCODE_MENU_STRING(str) ENCODE_UTF_8 (str)
#else
#define ENCODE_MENU_STRING(str) ENCODE_SYSTEM (str)
#endif
void set_frame_menubar ();
static void push_menu_item P_ ((Lisp_Object, Lisp_Object, Lisp_Object,
@ -1246,13 +1252,13 @@ single_submenu (item_key, item_name, maps)
#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 */
@ -1705,12 +1711,12 @@ mac_menu_show (f, x, y, for_click, keymaps, title, error)
#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 */
@ -1764,7 +1770,7 @@ mac_menu_show (f, x, y, for_click, keymaps, title, error)
#ifndef HAVE_MULTILINGUAL_MENU
if (STRING_MULTIBYTE (title))
title = ENCODE_SYSTEM (title);
title = ENCODE_MENU_STRING (title);
#endif
wv_title->name = (char *) SDATA (title);
wv_title->enabled = TRUE;
@ -1813,6 +1819,10 @@ mac_menu_show (f, x, y, for_click, keymaps, title, error)
discard_mouse_events ();
#endif
/* Must reset this manually because the button release event is not
passed to Emacs event loop. */
FRAME_MAC_DISPLAY_INFO (f)->grabbed = 0;
/* Free the widget_value objects we used to specify the
contents. */
free_menubar_widget_value_tree (first_wv);
@ -2219,8 +2229,18 @@ add_menu_item (MenuHandle menu, widget_value *wv, int submenu,
strncat (item_name, wv->key, 255);
}
item_name[255] = 0;
#if TARGET_API_MAC_CARBON
{
CFStringRef string =
CFStringCreateWithCString (NULL, item_name, kCFStringEncodingUTF8);
SetMenuItemTextWithCFString (menu, pos, string);
CFRelease (string);
}
#else
c2pstr (item_name);
SetMenuItemText (menu, pos, item_name);
#endif
if (wv->enabled && !force_disable)
#if TARGET_API_MAC_CARBON