Commit b2d9edd8 authored by Aric Stewart's avatar Aric Stewart Committed by Alexandre Julliard

imm32: Correct CopyCompAttrIMEtoClient to handle A->W and W->A conversions.

parent 0739200c
...@@ -1010,10 +1010,69 @@ static INT CopyCompStringIMEtoClient(InputContextData *data, LPBYTE source, INT ...@@ -1010,10 +1010,69 @@ static INT CopyCompStringIMEtoClient(InputContextData *data, LPBYTE source, INT
static INT CopyCompAttrIMEtoClient(InputContextData *data, LPBYTE source, INT slen, LPBYTE ssource, INT sslen, static INT CopyCompAttrIMEtoClient(InputContextData *data, LPBYTE source, INT slen, LPBYTE ssource, INT sslen,
LPBYTE target, INT tlen, BOOL unicode ) LPBYTE target, INT tlen, BOOL unicode )
{ {
if ( target && source && tlen >= slen) INT rc;
memcpy( target , source , slen);
return slen; if (is_himc_ime_unicode(data) && !unicode)
{
rc = WideCharToMultiByte(CP_ACP, 0, (LPWSTR)ssource, sslen, NULL, 0, NULL, NULL);
if (tlen)
{
const BYTE *src = source;
LPBYTE dst = target;
int i, j = 0, k = 0;
if (rc < tlen)
tlen = rc;
for (i = 0; i < sslen; ++i)
{
int len;
len = WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)ssource + i, 1,
NULL, 0, NULL, NULL);
for (; len > 0; --len)
{
dst[j++] = src[k];
if (j >= tlen)
goto end;
}
++k;
}
end:
rc = j;
}
}
else if (!is_himc_ime_unicode(data) && unicode)
{
rc = MultiByteToWideChar(CP_ACP, 0, (LPSTR)ssource, sslen, NULL, 0);
if (tlen)
{
const BYTE *src = source;
LPBYTE dst = target;
int i, j = 0;
if (rc < tlen)
tlen = rc;
for (i = 0; i < sslen; ++i)
{
if (IsDBCSLeadByte(((LPSTR)ssource)[i]))
continue;
dst[j++] = src[i];
if (j >= tlen)
break;
}
rc = j;
}
}
else
{
memcpy( target, source, min(slen,tlen));
rc = slen;
}
return rc;
} }
static INT CopyCompClauseIMEtoClient(InputContextData *data, LPBYTE source, INT slen, LPBYTE ssource, INT sslen, static INT CopyCompClauseIMEtoClient(InputContextData *data, LPBYTE source, INT slen, LPBYTE ssource, INT sslen,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment