src/gui/inputmethod/qwininputcontext_win.cpp
changeset 3 41300fa6a67c
parent 0 1918ee327afb
child 4 3b1da2848fc7
equal deleted inserted replaced
2:56cd8111b7f7 3:41300fa6a67c
   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);