The mouse move between two frame buffer sometimes will have error.



  • [on Qt libraries 4.7.1 for embedded Linux system]

    I use the QWS_DISPLAY="multi: LinuxFb:/dev/fb0:0 LinuxFb:/dev/fb1:offset=1919,0:1 :0" command
    to set two frame buffer.

    This two frame buffer's memory size are 8m and fixed size 1920*1080.

    The mouse can move between the two frame buffer, but somtimes will stop at the screen,
    and leave a few icon of mouse.

    In fact, the mouse still work, but just can't display regular.

    so what's worng with my mouse ?



  • [Remarks] in Dual Screen Display status



  • Hi,

    I have the same problem.
    Have you found the solution?
    Do you have any hints for me to investigate and solve this problem?

    BR,
    Pierre



  • sorry, i can't solve it.



  • Hi guys,

    I have the same problem with Qt 4.8.0 for Embedded Linux. My configuration contains 1024x600 LCD and 1920x1080 HD TV. If the mouse cursor moves from HD TV to LCD and the mouse position is outside of LCD, then the cursor suddenly disappears :(
    And some undetermined cursor snap shoots appears randomly. Unfortunately I could not find any solution for this. I am waiting for any good news. My display config is below;

    QWS_DISPLAY="Multi: LinuxFb:/dev/fb0:offset=0,0:0 LinuxFb:/dev/fb1:offset=1024,0:1 :2"



  • Hi,
    I think, I've got a solution for this situation. After a couple of hours inspection, I have recognized in "qscreenmulti_qws.cpp", QMultiScreenCursor::move function have an minor bug. So I have re-orginized the function with minor modification. It seems working well. You can check this with your configuration. I have tested this with Qt Embedded Linux 4.8.4.

    // XXX: this is a mess! --- I think not so much :)
    void QMultiScreenCursor::move(int x, int y)
    {
    // Get subscreen indexes
    const int oldIndex = qt_screen->subScreenIndexAt(pos);
    const int newIndex = qt_screen->subScreenIndexAt(QPoint(x, y));
    QScreenCursor *oldCursor, *newCursor;
    const QScreen *oldScreen, *newScreen;

    // Old screen operations
    if (oldIndex != -1)
    {
        // Get the old screen from the subscreens
        oldScreen = qt_screen->subScreens().at(oldIndex);
    
        // Get the old screen cursor
        oldCursor = cursors.at(oldIndex);
    
        // Set the current cursor
        if (!currentCursor)
            setCurrentCursor(oldCursor);
    
        // is new position valid ?
        if (oldScreen->region().contains(QPoint(x, y)))
        {
            // Update the mouse cursor position
            QScreenCursor::move(x, y);
    
            // Move the old cursor
            oldCursor->move(x, y);
            return;
        }//if
    }//if
    else
    {
        oldCursor = currentCursor;
    }//else
    
    // New screen operations
    if (newIndex != -1)
    {
        // Get the new screen from the subscreens
        newScreen = qt_screen->subScreens().at(newIndex);
    
        // Get the new screen cursor
        newCursor = cursors.at(newIndex);
    
        // Set the new cursor
        newCursor->set(cursor, hotspot.x(), hotspot.y());
    
        // Make sure the old cursor is invisible
        if (oldCursor) 
        {
            if (oldCursor->isVisible())
                newCursor->show();
            oldCursor->hide();
        }//if
    
        // is new position valid ?
        if (newScreen->region().contains(QPoint(x, y)))
        {
            // Update the mouse cursor position
            QScreenCursor::move(x, y);
    
            // Move the new cursor
            newCursor->move(x, y);
        }//if
    
        // Set the current cursor
        setCurrentCursor(newCursor);
    }//if
    

    }



  • sorry guys,

    I forget the code syntax oops :)

    @// XXX: this is a mess!
    void QMultiScreenCursor::move(int x, int y)
    {
    // Get subscreen indexes
    const int oldIndex = qt_screen->subScreenIndexAt(pos);
    const int newIndex = qt_screen->subScreenIndexAt(QPoint(x, y));
    QScreenCursor *oldCursor, *newCursor;
    const QScreen *oldScreen, *newScreen;

    // Old screen operations
    if (oldIndex != -1)
    {
        // Get the old screen from the subscreens
        oldScreen = qt_screen->subScreens().at(oldIndex);
    
        // Get the old screen cursor
        oldCursor = cursors.at(oldIndex);
    
        // Set the current cursor
        if (!currentCursor)
            setCurrentCursor(oldCursor);
    
        // is new position valid ?
        if (oldScreen->region().contains(QPoint(x, y)))
        {
            // Update the mouse cursor position
            QScreenCursor::move(x, y);
    
            // Move the old cursor
            oldCursor->move(x, y);
            return;
        }//if
    }//if
    else
    {
        oldCursor = currentCursor;
    }//else
    
    // New screen operations
    if (newIndex != -1)
    {
        // Get the new screen from the subscreens
        newScreen = qt_screen->subScreens().at(newIndex);
    
        // Get the new screen cursor
        newCursor = cursors.at(newIndex);
    
        // Set the new cursor
        newCursor->set(cursor, hotspot.x(), hotspot.y());
    
        // Make sure the old cursor is invisible
        if (oldCursor) 
        {
            if (oldCursor->isVisible())
                newCursor->show();
            oldCursor->hide();
        }//if
    
        // is new position valid ?
        if (newScreen->region().contains(QPoint(x, y)))
        {
            // Update the mouse cursor position
            QScreenCursor::move(x, y);
    
            // Move the new cursor
            newCursor->move(x, y);
        }//if
    
        // Set the current cursor
        setCurrentCursor(newCursor);
    }//if
    

    }
    @


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.