1 Commits
Author SHA1 Message Date
Kaj SchittecatandClaude Opus 5.5 993856dd5d touch: avatars never go blank for names with emoji or accents (#674)
A name that opens with emoji, such as a flag and an island, drew an empty
avatar. The chat icon taken from the first emoji in a name (#640) took the
first code point with ANY row in the emoji table, and the table maps the
invisible joiners (U+200D, the U+FE0E/FE0F variation selectors) to an empty
2 x 2 image so text never shows them. The island's U+FE0F won, and the icon
was that empty image. A ZWJ sequence such as man + laptop did the same
through its U+200D.

- The emoji pick skips the empty joiner rows; the real emoji after them
  still becomes the icon. A picked chat icon that is a joiner, or a text
  symbol the font cannot draw, keeps the plain avatar instead of a blank.
- Initials take whole code points and only letters or digits: emoji,
  flags, symbols and combining accents are skipped, so the flag name shows
  "TR" instead of two flag halves, "ana" with a tilde shows its capital. A
  letter the font only has as the '*' stand-in becomes its plain letter, or
  the next letter; "?" when the name has none, never blank.
- The logic lives in src/ui-touch/AvatarText.h (pure) with a host test
  (test/test_avatar_text.cpp) that first reproduces the blank pick with the
  old rule. The section-label uppercase table moved there unchanged.
- web demo backend: WADA_DEMO_CONTACTS="a|b|..." adds contacts for a
  scripted headless run.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 13:32:33 +01:00