Problemas com DELETE no WINE

Publicado por Danilo em 29/04/2005

[ Hits: 7.374 ]

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

HTTP headers, HTTP por força bruta

Opções de optimização do VNC

Listar arquivos de um diretório em C

Anjuta 1.2.4 e Ubuntu Edgy: Sim, é possível

Sockets em shell script

Leitura recomendada

Slackware com o GRUB

Corrigindo problemas no Debian Multiarquitetura

Redundância na VPN com Mikrotik

Resolvendo bug do Pidgin sem som ao ouvir música no XMMS

Windows 7 bootável pelo pendrive

  

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