This is a multi-part message in MIME format.
------=_NextPart_000_0046_01C65CB5.27860B90
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Hi All,
There is a big problem with dead keys handling in the Layout Manager of =
CE 5.0.
The problem comes from the logic in the GetCharacters function =
(laymgr.cpp), wich forgets previously entered dead keys.
if (wch =3D=3D WCH_NONE) {
.=20
.
}
else if (wch =3D=3D WCH_DEAD) {
.=20
.
}
else if (wch =3D=3D WCH_LGTR) {
.
.
}
else {
//+FIX
if ( (pili->il.pDeadKey !=3D NULL) &&
(pili->wchDeadChar !=3D 0) ) {
cchValid =3D ProcessDeadKeys(&pili->wchDeadChar, =
pili->il.pDeadKey,=20
wch, pChars, cChars, ShiftFlags);
}
else
//-FIX
WriteToCharBuffer(wch, cChars, pChars, &cchValid);
}
}
I fixed the bug by duplicating a code that reside in the "if (wch =
=3D=3D WCH_DEAD)" branch. I suspect one can do a better fix but this one =
works, at least for my French Keyboard.
Remi
------=_NextPart_000_0046_01C65CB5.27860B90
Content-Type: text/html;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Diso-8859-1">
<META content=3D"MSHTML 6.00.2900.2802" name=3DGENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY>
<DIV><FONT size=3D2>Hi All,</FONT></DIV>
<DIV><FONT size=3D2></FONT> </DIV>
<DIV><FONT size=3D2>There is a big problem with dead keys handling in =
the Layout=20
Manager of CE 5.0.</FONT></DIV>
<DIV><FONT size=3D2>The problem comes from the logic=20
in the GetCharacters function (laymgr.cpp), wich forgets =
previously=20
entered dead keys.</FONT></DIV>
<DIV><FONT size=3D2></FONT> </DIV>
<DIV><FONT face=3D"Courier New" size=3D2>if (wch =3D=3D WCH_NONE) =
{</FONT></DIV>
<DIV><FONT face=3D"Courier New" size=3D2>
<DIV><FONT face=3D"Courier New" size=3D2> .=20
<DIV><FONT face=3D"Courier New" size=3D2> =20
.</FONT></DIV></FONT></DIV></FONT><FONT face=3D"Courier New" =
size=3D2>}</FONT></DIV>
<DIV><FONT face=3D"Courier New" size=3D2>else if (wch =3D=3D WCH_DEAD) =
{</FONT></DIV>
<DIV><FONT face=3D"Courier New" size=3D2>
<DIV><FONT face=3D"Courier New" size=3D2> .=20
<DIV><FONT face=3D"Courier New" size=3D2> =20
.</FONT></DIV></FONT></DIV>}</FONT></DIV>
<DIV><FONT face=3D"Courier New" size=3D2>else if (wch =3D=3D WCH_LGTR) =
{</FONT></DIV>
<DIV><FONT face=3D"Courier New" size=3D2>
<DIV><FONT face=3D"Courier New" size=3D2> .
<DIV><FONT face=3D"Courier New" size=3D2> =20
.</FONT></DIV></FONT></DIV></FONT><FONT face=3D"Courier New" =
size=3D2>}</FONT></DIV>
<DIV><FONT face=3D"Courier New" size=3D2>else {</FONT></DIV>
<DIV><FONT face=3D"Courier New" size=3D2>//+FIX</FONT></DIV>
<DIV><FONT face=3D"Courier New" size=3D2> if (=20
(pili->il.pDeadKey !=3D NULL) &&</FONT></DIV>
<DIV><FONT face=3D"Courier New" size=3D2> =
=20
(pili->wchDeadChar !=3D 0) ) {</FONT></DIV>
<DIV><FONT face=3D"Courier New" =
size=3D2> =20
cchValid =3D ProcessDeadKeys(&pili->wchDeadChar, =
pili->il.pDeadKey,=20
</FONT></DIV>
<DIV><FONT face=3D"Courier New"=20
size=3D2> &nbs=
p; wch,=20
pChars, cChars, ShiftFlags);</FONT></DIV>
<DIV><FONT face=3D"Courier New" =
size=3D2> }</FONT></DIV>
<DIV><FONT face=3D"Courier New" =
size=3D2> else</FONT></DIV>
<DIV><FONT face=3D"Courier New" size=3D2>//-FIX</FONT></DIV>
<DIV><FONT face=3D"Courier New" size=3D2> =
WriteToCharBuffer(wch,=20
cChars, pChars, &cchValid);</FONT></DIV>
<DIV><FONT face=3D"Courier New" size=3D2>}</FONT></DIV>
<DIV><FONT face=3D"Courier New" size=3D2>}</FONT></DIV>
<DIV><FONT face=3D"Courier New" size=3D2></FONT> </DIV>
<DIV><FONT size=3D2> I fixed the bug by duplicating a code that =
reside in the=20
"if (wch =3D=3D WCH_DEAD)" branch. I suspect one can do a better fix but =
this one=20
works, at least for my French Keyboard.</FONT></DIV>
<DIV><FONT size=3D2></FONT> </DIV>
<DIV><FONT size=3D2>Remi<BR></FONT></DIV></BODY></HTML>
------=_NextPart_000_0046_01C65CB5.27860B90--