Problemas com DELETE no WINE

Publicado por Danilo em 29/04/2005

[ Hits: 7.377 ]

Blog: http://www.danilocesar.com

 


Problemas com DELETE no WINE



Toda vez que iniciamos algum aplicativo emulado pelo WINE com teclado ABNT2 e apertamos a tecla DEL com a intenção de deletar algum caractere, o aplicativo deleta o caractere e adiciona uma vírgula caso o Num-Lock esteja ligado.

Para revolver o problema, deve-se instalar um patch no código fonte do seu wine. Para não precisar recompilar o wine inteiro, iremos fazer apenas o necessário.

Digite o comando:

$ wine --version

Provavelmente irá retornar algo como:

Wine 20041201
Wine exited with a successful status

Sabemos que a minha versão do Wine é 20041201.

Agora entre em:
E faça o download da sua versão do wine[SUA_VERSAO].tar.gz

No meu caso, puxo o arquivo Wine-20041201.tar.gz.

Descompacto em um diretório qualquer com o comando:

$ tar -xvzf Wine-20041201.tar.gz

Edite o arquivo wine-XXXXXXX/dlls/x11drv/keyboard.c e procure pela linha que contem a seguinte string:

XLookupString(e, NULL, 0, &keysym, NULL);

Substitua as linhas:

XLookupString(e, NULL, 0, &keysym, NULL);

if ((keysym >= 0xFFAE) && (keysym <= 0xFFB9) && (keysym != 0xFFAF)
&& (e->state & NumLockMask))
/* Only the Keypad keys 0-9 and . send different keysyms
* depending on the NumLock state */
return nonchar_key_vkey[keysym & 0xFF];

TRACE_(key)("e->keycode = %x\n", e->keycode);

return keyc2vkey[e->keycode];
}

Pelas linhas:

XLookupString(e, NULL, 0, &keysym, NULL);

/* these fixmes allow you to see keysyms and keycodes
FIXME("keysym is %X\n",keysym);
FIXME("e->keycode is %X\n",e->keycode); */

/* about the numbers below:
0xFF9F: middle keyboard delete (keysym)
0x2C : keypad delete (keysym)
0x3B : comma (keycode)
*/


if ( ((keysym == 0xFF9F) || (keysym == 0x2C))
&& (e->state & NumLockMask))
{
if (keysym == 0xFF9F)
return nonchar_key_vkey[keysym & 0xFF];
if (keysym == 0x2C)
return keyc2vkey[0x3B];
}

if ((keysym >= 0xFFAE) && (keysym <= 0xFFB9) && (keysym != 0xFFAF)
&& (e->state & NumLockMask))
/* Only the Keypad keys 0-9 and . send different keysyms
* depending on the NumLock state */

return nonchar_key_vkey[keysym & 0xFF];

return keyc2vkey[e->keycode];
}

Salve o arquivo e vá ao diretório principal do código fonte do wine. Agora você irá à fase de compilação:

$ ./configure

Depois

$ make depend && make

Agora é esperar.. pode ir tomar um café, jogar um dominó... a compilação demora um pouco.

Após ter compilado corretamente, o programa gerará um arquivo x11drv.dll.so, que deve ser substituído pelo padrão do seu WINE.

Para localizá-lo, dê:

$ find / -name x11drv.dll.so

Que geralmente está em /usr/lib/wine/x11drv.dll.so.

E faça um backup dele caso precise:

$ mv /usr/lib/wine/x11drv.dll.so /usr/lib/wine/x11drv.dll.so2

Depois substitua o arquivo /usr/lib/wine/x11drv.dll.so padrão pelo seu novo arquivo com o comando:

$ sudo cp dlls/x11drv/x11drv.dll.so /usr/lib/wine/x11drv.dll.so

E pronto! Agora faça o teste, abra qualquer aplicação que rode sobre o wine e perceba que o problema do DELETE já não existe.

Essa dica funciona para teclado ABNT2. Pesquisando pela internet descobri que pode dar problemas com outros layouts de teclado, por isso é necessário que você faça backup dos seus arquivos de sistemas.

É isso, qualquer dúvida grite.

Abraços,
Danilo

Outras dicas deste autor

Listar arquivos de um diretório em C

Rodando o Quanta em uma única instância

Montando uma imagem de CD (iso)

Opções de optimização do VNC

Funções de data usando time.h

Leitura recomendada

Habilitando sons do sistema no GNOME 2 do Debian 6

Nagios + NRPE - solução clientless

Inicializando uma máquina virtual no VirtualBox via pendrive USB

Fazendo o HAL funcionar no Arch Linux

Problema com acentuação das pastas do usuário no XFCE sob Slackware e de quebra altere as pastas de usuário padrão

  

Comentários

Nenhum comentário foi encontrado.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts