editado algumas vezes
Para sua informação, a partir do GLFW atual, usando o Microsoft IME para inserir, por exemplo, em japonês, a tecla pressionada durante as entradas do IME parece alcançar o aplicativo diretamente por meio de mensagens WM_KEYDOWN normais.
Eu nem sei o que está causando isso, em meu aplicativo de teste Win32 simples com um loop de mensagem trivial, o IME está interceptando essas chaves corretamente. Eu recebo WM_KEYDOWN com VK_PROCESSKEY (229) e WM_KEYUP não filtrado normal.
No GLFW, obtenho valores-chave não filtrados tanto para pressionados quanto para liberados.
Agora estou investigando o que está causando a diferença para ver se posso sugerir uma correção para o GLFW.
OK, então o que está acontecendo é que em meu aplicativo estou usando wParam, que contém o código-chave virtual e pode ser filtrado por IME. GLFW em translateKey () usa HIWORD (lParam) & 0x1FF que é scancode e nunca é filtrado.
Então, quando você pressiona e solta uma tecla de letra interceptada pelo IME, a sequência é algo como:
WM_KEYDOWN 229
13.36 Key 49 pressed
WM_KEYUP 78
13.43 Key 49 released
Portanto, para emular algo semelhante do ponto de vista do usuário GLFW, pode ser suficiente adicionar isto a translateKey ():
if (wParam == VK_PROCESSKEY)
return _GLFW_KEY_INVALID;
O que irá gerar eventos nem pressionados nem liberados.
Agora, o problema é que existem tantas maneiras possíveis de interpretar os dados de baixo nível, mas eu acredito, e apesar do fato de que há muito mais no IME e este não é o quadro completo, esse comportamento seria o padrão desejável e muito benéfico. A grande maioria dos aplicativos não quer reagir ao pressionamento de teclas quando a janela IME é exibida, o que pelo menos permitiria entradas de texto baseadas em IME no aplicativo.
Aplicativo que se esforça para ser 100% ciente de IME (até implementar sua própria exibição de IME), o que é extremamente raro, teria que lidar com muito mais mensagens em grandes detalhes, o que provavelmente nunca será o escopo do GLFW (mas pode-se imaginar que O GLFW pode, no futuro, fornecer ganchos WM_ * para permitir que os usuários interessados os manuseiem sozinhos e, novamente, não há sentido em fazer esse trabalho a menos que haja um bom motivo para isso).
Para sua informação, implementei suporte para IME via IBUS no X11 / wayland em meu garfo glfw.
Comentários muito úteis
Para sua informação, implementei suporte para IME via IBUS no X11 / wayland em meu garfo glfw.