Ticket #288: qcp.diff

File qcp.diff, 1.8 KB (added by KO Myung-Hun, 11 years ago)

Path to implement WM_QUERYCONVERTPOS

  • src/gui/kernel/qapplication_pm.cpp

     
    10341034            }
    10351035
    10361036            case WM_QUERYCONVERTPOS: { // IME input box position request
    1037                 // @todo the proper detection of the caret position in the
    1038                 // current widget requires implementing QInputContext. For now,
    1039                 // just send the IME box to the lower left corner of the
    1040                 // top-level window
    10411037                PRECTL pcp = (PRECTL)mp1;
    10421038                memset(pcp, 0xFF, sizeof(RECTL));
    10431039                pcp->xLeft = 0;
    10441040                pcp->yBottom = 0;
     1041
     1042                QWidget *w = qApp->focusWidget();
     1043                if(w) {
     1044                    QRect r = w->inputMethodQuery(Qt::ImMicroFocus).toRect();
     1045
     1046                    // The ime window positions are based on the WinId with active focus.
     1047                    QWidget *imeWnd = QWidget::find(WinQueryFocus(HWND_DESKTOP));
     1048                    if (imeWnd) {
     1049                        QPoint pt (r.bottomLeft());
     1050                        pt = w->mapToGlobal(pt);
     1051                        pt = imeWnd->mapFromGlobal(pt);
     1052
     1053                        pcp->xLeft = pt.x();
     1054                        pcp->xRight = pt.x() + r.width();
     1055                        // invert Y
     1056                        // bottom is exclusive and top is inclusive on Qt
     1057                        // bottom is inclusive and top is exclusive on OS/2
     1058                        pcp->yBottom = imeWnd->height() - pt.y();
     1059                        pcp->yTop = pcp->yBottom + r.height();
     1060                    }
     1061                }
     1062
    10451063                return (MRESULT)QCP_CONVERT;
    10461064            }
    10471065