325 return getCompositionString(himc, GCS_CURSORPOS, 0, 0); |
325 return getCompositionString(himc, GCS_CURSORPOS, 0, 0); |
326 } |
326 } |
327 |
327 |
328 static QString getString(HIMC himc, DWORD dwindex, int *selStart = 0, int *selLength = 0) |
328 static QString getString(HIMC himc, DWORD dwindex, int *selStart = 0, int *selLength = 0) |
329 { |
329 { |
330 static wchar_t *buffer = 0; |
330 const int bufferSize = 256; |
331 static int buflen = 0; |
331 wchar_t buffer[bufferSize]; |
332 |
332 int len = getCompositionString(himc, dwindex, buffer, bufferSize * sizeof(wchar_t)); |
333 int len = getCompositionString(himc, dwindex, 0, 0) + 1; |
|
334 if (!buffer || len > buflen) { |
|
335 delete [] buffer; |
|
336 buflen = qMin(len, 256); |
|
337 buffer = new wchar_t[buflen]; |
|
338 } |
|
339 |
|
340 len = getCompositionString(himc, dwindex, buffer, buflen * sizeof(wchar_t)); |
|
341 |
333 |
342 if (selStart) { |
334 if (selStart) { |
343 static wchar_t *attrbuffer = 0; |
335 char attrbuffer[bufferSize]; |
344 static int attrbuflen = 0; |
336 int attrlen = getCompositionString(himc, GCS_COMPATTR, attrbuffer, bufferSize); |
345 int attrlen = getCompositionString(himc, dwindex, 0, 0) + 1; |
|
346 if (!attrbuffer || attrlen> attrbuflen) { |
|
347 delete [] attrbuffer; |
|
348 attrbuflen = qMin(attrlen, 256); |
|
349 attrbuffer = new wchar_t[attrbuflen]; |
|
350 } |
|
351 attrlen = getCompositionString(himc, GCS_COMPATTR, attrbuffer, attrbuflen * sizeof(wchar_t)); |
|
352 *selStart = attrlen+1; |
337 *selStart = attrlen+1; |
353 *selLength = -1; |
338 *selLength = -1; |
354 for (int i = 0; i < attrlen; i++) { |
339 for (int i = 0; i < attrlen; i++) { |
355 if (attrbuffer[i] & ATTR_TARGET_CONVERTED) { |
340 if (attrbuffer[i] & ATTR_TARGET_CONVERTED) { |
356 *selStart = qMin(*selStart, i); |
341 *selStart = qMin(*selStart, i); |