The UI would look nicer if the hotkey were at the beginning of the caption, i.e. "~!Äänet". However, if I make that change, then the hotkey doesn't work.

Firstly, gcn::Widget::setHotKey correctly notes that isascii(key) is false and tolower(key) is unlikely to return the correct value, so it saves the U+00C4 directly as mHotKey. This means I need to type in an upper-case Ä (using Shift or Caps Lock) to make the widget recognize the key-press event.

Secondly, the widget still doesn't recognize the key-release event, so the button remains depressed and does not actually trigger. When gcn::SDLInput::pushInput calls gcn::SDLInput::convertKeyCharacter for an SDL_KEYDOWN event, keysym.unicode is U+00C4 ('Ä'); however, on the subsequent SDL_KEYUP event, keysym.unicode is 0, and convertKeyCharacter then uses keysym.sym (SDLK_WORLD_68 = 0xE4). In gcn::FocusHandler::checkHotKey then, only one of these values matches what gcn::Widget::getHotKey returns. checkHotKey does not call tolower because those values are not ASCII.

This bug seems especially harmful for languages that don't use the Latin alphabet. Bulgarian appears to be one of those.