From mboxrd@z Thu Jan 1 00:00:00 1970 Path: main.gmane.org!not-for-mail From: YAMAMOTO Mitsuharu Newsgroups: gmane.emacs.devel Subject: Re: All platforms fail with Unicode in menus. Date: Thu, 26 Aug 2004 17:13:02 +0900 Organization: Faculty of Science, Chiba University Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Message-ID: References: NNTP-Posting-Host: deer.gmane.org Mime-Version: 1.0 (generated by SEMI 1.14.5 - "Awara-Onsen") Content-Type: text/plain; charset=US-ASCII X-Trace: sea.gmane.org 1093508063 17985 80.91.224.253 (26 Aug 2004 08:14:23 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Thu, 26 Aug 2004 08:14:23 +0000 (UTC) Cc: reiner.steib@gmx.de, emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Thu Aug 26 10:14:09 2004 Return-path: Original-Received: from lists.gnu.org ([199.232.76.165]) by deer.gmane.org with esmtp (Exim 3.35 #1 (Debian)) id 1C0FOb-0001Fz-00 for ; Thu, 26 Aug 2004 10:14:09 +0200 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.33) id 1C0FTB-00067D-Dm for ged-emacs-devel@m.gmane.org; Thu, 26 Aug 2004 04:18:54 -0400 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.33) id 1C0FSh-00060M-V3 for emacs-devel@gnu.org; Thu, 26 Aug 2004 04:18:24 -0400 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.33) id 1C0FSg-0005zj-DW for emacs-devel@gnu.org; Thu, 26 Aug 2004 04:18:23 -0400 Original-Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.33) id 1C0FSg-0005zd-6l for emacs-devel@gnu.org; Thu, 26 Aug 2004 04:18:22 -0400 Original-Received: from [133.82.132.2] (helo=mathmail.math.s.chiba-u.ac.jp) by monty-python.gnu.org with esmtp (Exim 4.34) id 1C0FNb-0001ye-SO; Thu, 26 Aug 2004 04:13:08 -0400 Original-Received: from church.math.s.chiba-u.ac.jp (church [133.82.132.36]) by mathmail.math.s.chiba-u.ac.jp (Postfix) with ESMTP id E83341A63B1; Thu, 26 Aug 2004 17:13:02 +0900 (JST) Original-To: David Kastrup In-Reply-To: User-Agent: Wanderlust/2.10.1 (Watching The Wheels) SEMI/1.14.5 (Awara-Onsen) FLIM/1.14.5 (Demachiyanagi) APEL/10.6 Emacs/21.3.50 (sparc-sun-solaris2.8) MULE/5.0 (SAKAKI) X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: main.gmane.org gmane.emacs.devel:26517 X-Report-Spam: http://spam.gmane.org/gmane.emacs.devel:26517 >>>>> On 25 Aug 2004 23:48:23 +0200, David Kastrup said: > Since those kind of menus make for quite a bit of attraction, I'd > kindly ask the various platform programmer to consider accessing > Unicode support of their operating system/toolkit, and I'd > appreciate it if the GTK support of Unicode was made robust against > garbage collection. Here's a patch for Mac OS X, Carbon. It also contains a fix for the bug that the menu bar cannot be activated just after a pop-up menu is used. YAMAMOTO Mitsuharu mituharu@math.s.chiba-u.ac.jp Index: src/macmenu.c =================================================================== RCS file: /cvsroot/emacs/emacs/src/macmenu.c,v retrieving revision 1.15 diff -c -r1.15 macmenu.c *** src/macmenu.c 30 May 2004 00:18:41 -0000 1.15 --- src/macmenu.c 26 Aug 2004 05:37:37 -0000 *************** *** 163,168 **** --- 163,174 ---- 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,1258 **** #ifndef HAVE_MULTILINGUAL_MENU if (STRING_MULTIBYTE (item_name)) { ! item_name = ENCODE_SYSTEM (item_name); AREF (menu_items, i + MENU_ITEMS_ITEM_NAME) = item_name; } if (STRINGP (descrip) && STRING_MULTIBYTE (descrip)) { ! descrip = ENCODE_SYSTEM (descrip); AREF (menu_items, i + MENU_ITEMS_ITEM_EQUIV_KEY) = descrip; } #endif /* not HAVE_MULTILINGUAL_MENU */ --- 1252,1264 ---- #ifndef HAVE_MULTILINGUAL_MENU if (STRING_MULTIBYTE (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_MENU_STRING (descrip); AREF (menu_items, i + MENU_ITEMS_ITEM_EQUIV_KEY) = descrip; } #endif /* not HAVE_MULTILINGUAL_MENU */ *************** *** 1705,1716 **** #ifndef HAVE_MULTILINGUAL_MENU if (STRINGP (item_name) && STRING_MULTIBYTE (item_name)) { ! item_name = ENCODE_SYSTEM (item_name); AREF (menu_items, i + MENU_ITEMS_ITEM_NAME) = item_name; } if (STRINGP (descrip) && STRING_MULTIBYTE (descrip)) { ! descrip = ENCODE_SYSTEM (descrip); AREF (menu_items, i + MENU_ITEMS_ITEM_EQUIV_KEY) = descrip; } #endif /* not HAVE_MULTILINGUAL_MENU */ --- 1711,1722 ---- #ifndef HAVE_MULTILINGUAL_MENU if (STRINGP (item_name) && STRING_MULTIBYTE (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_MENU_STRING (descrip); AREF (menu_items, i + MENU_ITEMS_ITEM_EQUIV_KEY) = descrip; } #endif /* not HAVE_MULTILINGUAL_MENU */ *************** *** 1764,1770 **** #ifndef HAVE_MULTILINGUAL_MENU if (STRING_MULTIBYTE (title)) ! title = ENCODE_SYSTEM (title); #endif wv_title->name = (char *) SDATA (title); wv_title->enabled = TRUE; --- 1770,1776 ---- #ifndef HAVE_MULTILINGUAL_MENU if (STRING_MULTIBYTE (title)) ! title = ENCODE_MENU_STRING (title); #endif wv_title->name = (char *) SDATA (title); wv_title->enabled = TRUE; *************** *** 1813,1818 **** --- 1819,1828 ---- 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,2226 **** --- 2229,2246 ---- 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