diff options
author | marc_culler <marc.culler@gmail.com> | 2021-01-27 20:38:50 (GMT) |
---|---|---|
committer | marc_culler <marc.culler@gmail.com> | 2021-01-27 20:38:50 (GMT) |
commit | 4924d7ef707ae1f08e43f05195a9d9454fc9966a (patch) | |
tree | e65b7653b023d99a6e11dd89e6fedbf12321a68b | |
parent | 0d82ed4dd499eafdf6d5af7fa6836610ba307d15 (diff) | |
download | tk-4924d7ef707ae1f08e43f05195a9d9454fc9966a.zip tk-4924d7ef707ae1f08e43f05195a9d9454fc9966a.tar.gz tk-4924d7ef707ae1f08e43f05195a9d9454fc9966a.tar.bz2 |
Fix [bdcab85b9c]: Aqua crash when non-BMP characters are used in a menu label
-rw-r--r-- | library/demos/menu.tcl | 2 | ||||
-rw-r--r-- | macosx/tkMacOSXMenu.c | 11 |
2 files changed, 10 insertions, 3 deletions
diff --git a/library/demos/menu.tcl b/library/demos/menu.tcl index 62991f3..244361d 100644 --- a/library/demos/menu.tcl +++ b/library/demos/menu.tcl @@ -134,6 +134,8 @@ menu $m -tearoff 0 foreach i {{An entry} {Another entry} {Does nothing} {Does almost nothing} {Make life meaningful}} { $m add command -label $i -command [list puts "You invoked \"$i\""] } +set emojiLabel [encoding convertfrom utf-8 "\xF0\x9F\x98\x8D Make friends"] +$m add command -label $emojiLabel -command [list puts "Menu labels can include non-BMP characters."] $m entryconfigure "Does almost nothing" -bitmap questhead -compound left \ -command [list \ tk_dialog $w.compound {Compound Menu Entry} \ diff --git a/macosx/tkMacOSXMenu.c b/macosx/tkMacOSXMenu.c index 0604708..8c7ef52 100644 --- a/macosx/tkMacOSXMenu.c +++ b/macosx/tkMacOSXMenu.c @@ -708,9 +708,14 @@ TkpConfigureMenuEntry( [menuItem setImage:image]; if ((!image || mePtr->compound != COMPOUND_NONE) && mePtr->labelPtr && mePtr->labelLength) { - title = [[[NSString alloc] initWithBytes:Tcl_GetString(mePtr->labelPtr) - length:mePtr->labelLength encoding:NSUTF8StringEncoding] - autorelease]; + Tcl_DString ds; + Tcl_DStringInit(&ds); + Tcl_UtfToUniCharDString(Tcl_GetString(mePtr->labelPtr), + mePtr->labelLength, &ds); + title = [[NSString alloc] + initWithCharacters:(unichar *)Tcl_DStringValue(&ds) + length:Tcl_DStringLength(&ds)>>1]; + Tcl_DStringFree(&ds); if ([title hasSuffix:@"..."]) { title = [NSString stringWithFormat:@"%@%C", [title substringToIndex:[title length] - 3], 0x2026]; |