Esempio n. 1
0
void CalMenuWindowPosition(XlibMenu *menu, int x, int y, int dodgeHeight)
{
    FcitxXlibWindow* window = (FcitxXlibWindow*) menu;
    FcitxClassicUI *classicui = window->owner;
    FcitxRect rect = GetScreenGeometry(classicui, x, y);

    if (x < rect.x1)
        menu->iPosX = rect.x1;
    else
        menu->iPosX = x;

    if (y < rect.y1)
        menu->iPosY = rect.y1;
    else
        menu->iPosY = y + dodgeHeight;

    if ((menu->iPosX + window->width) > rect.x2)
        menu->iPosX =  rect.x2 - window->width;

    if ((menu->iPosY + window->height) >  rect.y2) {
        if (menu->iPosY >  rect.y2)
            menu->iPosY =  rect.y2 - window->height;
        else /* better position the window */
            menu->iPosY = menu->iPosY - window->height - dodgeHeight;
    }
}
Esempio n. 2
0
void InputWindowMoveWindow(FcitxXlibWindow* window)
{
    InputWindow* inputWindow = (InputWindow*) window;
    int x = 0, y = 0, w = 0, h = 0;

    FcitxInputContext* ic = FcitxInstanceGetCurrentIC(window->owner->owner);
    FcitxInstanceGetWindowRect(window->owner->owner, ic, &x, &y, &w, &h);
    FcitxRect rect = GetScreenGeometry(window->owner, x, y);

    int iTempInputWindowX, iTempInputWindowY;

    if (x < rect.x1)
        iTempInputWindowX = rect.x1;
    else
        iTempInputWindowX = x + inputWindow->iOffsetX;

    if (y < rect.y1)
        iTempInputWindowY = rect.y1;
    else
        iTempInputWindowY = y + h + inputWindow->iOffsetY;

    if ((iTempInputWindowX + window->width) > rect.x2)
        iTempInputWindowX =  rect.x2 - window->width;

    if ((iTempInputWindowY + window->height) >  rect.y2) {
        if (iTempInputWindowY >  rect.y2)
            iTempInputWindowY =  rect.y2 - window->height - 40;
        else /* better position the window */
            iTempInputWindowY = iTempInputWindowY - window->height - ((h == 0)?40:h) - 2 * inputWindow->iOffsetY;
    }
    XMoveWindow(window->owner->dpy, window->wId, iTempInputWindowX, iTempInputWindowY);
}