VirtualBox

Ignore:
Timestamp:
Jan 29, 2015 7:25:48 PM (10 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
97957
Message:

Devices/Graphics, Main: optionally send cursor integration toggle and guest cursor position information through the graphics device. X11/Linux Additions support, actually make the cursor visible after toggling.

Location:
trunk/src/VBox/Additions/x11/vboxvideo
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/x11/vboxvideo/getmode.c

    r53966 r54040  
    341341        pVBox->fLastCursorCapabilitiesFromProperty = *pfCursorCapabilities;
    342342    }
    343     pVBox->fForceModeSet = (pVBox->fUseHardwareCursor != fOldUseHardwareCursor);
     343    if (pVBox->fUseHardwareCursor != fOldUseHardwareCursor)
     344        vbvxReprobeCursor(pScrn);
    344345}
    345346
     
    369370    pScrn = xf86Screens[pWin->drawable.pScreen->myNum];
    370371    pVBox = VBOXGetRec(pScrn);
    371     TRACE_LOG("pVBox->fForceModeSet=%u, pVBox->fUseHardwareCursor=%u\n", (unsigned)pVBox->fForceModeSet,
    372               pVBox->fUseHardwareCursor);
     372    TRACE_LOG("pVBox->fUseHardwareCursor=%u\n", pVBox->fUseHardwareCursor);
    373373    VBoxUpdateSizeHints(pScrn);
    374374    pMode = pScrn->modes;
    375375    if (pScrn->currentMode == pMode)
    376     {
    377         if (pVBox->fForceModeSet)  /* Swap modes so that the new mode is before the current one. */
    378         {
    379             pScrn->currentMode = pMode->next;
    380             pMode->next->HDisplay = pMode->HDisplay;
    381             pMode->next->VDisplay = pMode->VDisplay;
    382         }
    383         else
    384             pMode = pMode->next;
    385     }
     376        pMode = pMode->next;
    386377    pMode->HDisplay = pVBox->pScreens[0].aPreferredSize.cx;
    387378    pMode->VDisplay = pVBox->pScreens[0].aPreferredSize.cy;
    388     pVBox->fForceModeSet = false;
    389379}
    390380
  • trunk/src/VBox/Additions/x11/vboxvideo/helpers.c

    r53777 r54040  
    2525#include <propertyst.h>
    2626#include <windowstr.h>
     27#include <xf86.h>
    2728#include <X11/Xatom.h>
    2829#ifdef XORG_7X
     
    7677    return VINF_SUCCESS;
    7778}
     79
     80void vbvxReprobeCursor(ScrnInfoPtr pScrn)
     81{
     82    if (ROOT_WINDOW(pScrn) == NULL)
     83        return;
     84#ifdef XF86_SCRN_INTERFACE
     85    pScrn->EnableDisableFBAccess(pScrn, FALSE);
     86    pScrn->EnableDisableFBAccess(pScrn, TRUE);
     87#else
     88    pScrn->EnableDisableFBAccess(pScrn->scrnIndex, FALSE);
     89    pScrn->EnableDisableFBAccess(pScrn->scrnIndex, TRUE);
     90#endif
     91}
  • trunk/src/VBox/Additions/x11/vboxvideo/vboxvideo.c

    r53966 r54040  
    456456
    457457static DisplayModePtr vbox_output_add_mode(VBOXPtr pVBox, DisplayModePtr *pModes, const char *pszName, int x, int y,
    458                                            Bool isPreferred, Bool fDifferentRefresh, Bool isUserDef)
     458                                           Bool isPreferred, Bool isUserDef)
    459459{
    460460    TRACE_LOG("pszName=%s, x=%d, y=%d\n", pszName ? pszName : "(null)", x, y);
    461461    DisplayModePtr pMode = xnfcalloc(1, sizeof(DisplayModeRec));
    462     int cRefresh = fDifferentRefresh ? 70 : 60;
     462    int cRefresh = 60;
    463463
    464464    pMode->status        = MODE_OK;
     
    504504    VBoxUpdateSizeHints(pScrn);
    505505    pMode = vbox_output_add_mode(pVBox, &pModes, NULL, pVBox->pScreens[iScreen].aPreferredSize.cx,
    506                                  pVBox->pScreens[iScreen].aPreferredSize.cy, TRUE, pVBox->fUseHardwareCursor, FALSE);
     506                                 pVBox->pScreens[iScreen].aPreferredSize.cy, TRUE, FALSE);
    507507    VBOXEDIDSet(output, pMode);
    508508    /* Add standard modes supported by the host */
     
    512512        if (cIndex == 0)
    513513            break;
    514         vbox_output_add_mode(pVBox, &pModes, NULL, x, y, FALSE, FALSE, FALSE);
     514        vbox_output_add_mode(pVBox, &pModes, NULL, x, y, FALSE, FALSE);
    515515    }
    516516
     
    520520    {
    521521        if (2 == sscanf(pScrn->display->modes[i], "%ux%u", &x, &y))
    522             vbox_output_add_mode(pVBox, &pModes, pScrn->display->modes[i], x, y, FALSE, FALSE, TRUE);
     522            vbox_output_add_mode(pVBox, &pModes, pScrn->display->modes[i], x, y, FALSE, TRUE);
    523523    }
    524524    TRACE_EXIT();
  • trunk/src/VBox/Additions/x11/vboxvideo/vboxvideo.h

    r53968 r54040  
    198198    /** Do we currently want to use the host cursor? */
    199199    Bool fUseHardwareCursor;
    200     /** Do we want to force a reset of the current mode because the host cursor support changed?  Only used by old servers. */
    201     Bool fForceModeSet;
    202200    /** The last cursor capabilities data read from the X11 property. */
    203201    int32_t fLastCursorCapabilitiesFromProperty;
     
    246244#define VBOXGetRec vbvxGetRec  /* Temporary */
    247245extern int vbvxGetIntegerPropery(ScrnInfoPtr pScrn, char *pszName, size_t *pcData, int32_t **ppaData);
     246extern void vbvxReprobeCursor(ScrnInfoPtr pScrn);
    248247
    249248/* setmode.c */
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette