VirtualBox

Changeset 22433 in vbox for trunk/src


Ignore:
Timestamp:
Aug 25, 2009 12:20:53 PM (16 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
51425
Message:

VMMDev: fixed handling guests which did not request a display change request with the eventAck field set (yet) -- xtracker 4227

Location:
trunk/src/VBox/Devices/VMMDev
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/VMMDev/VMMDev.cpp

    r22423 r22433  
    887887                if (displayChangeRequest->eventAck == VMMDEV_EVENT_DISPLAY_CHANGE_REQUEST)
    888888                {
    889                     /* Remember which resolution the client has queried, subsequent reads will return the same values. */
     889                    /* Remember which resolution the client has queried, subsequent reads
     890                     * will return the same values. */
    890891                    pThis->lastReadDisplayChangeRequest = pThis->displayChangeRequest;
    891                 }
    892 
    893                 /* just pass on the information */
    894                 displayChangeRequest->xres = pThis->lastReadDisplayChangeRequest.xres;
    895                 displayChangeRequest->yres = pThis->lastReadDisplayChangeRequest.yres;
    896                 displayChangeRequest->bpp  = pThis->lastReadDisplayChangeRequest.bpp;
     892                    pThis->fGuestSentChangeEventAck = true;
     893                }
     894
     895                if (pThis->fGuestSentChangeEventAck)
     896                {
     897                    displayChangeRequest->xres = pThis->lastReadDisplayChangeRequest.xres;
     898                    displayChangeRequest->yres = pThis->lastReadDisplayChangeRequest.yres;
     899                    displayChangeRequest->bpp  = pThis->lastReadDisplayChangeRequest.bpp;
     900                }
     901                else
     902                {
     903                    /* This is not a response to a VMMDEV_EVENT_DISPLAY_CHANGE_REQUEST, just
     904                     * read the last valid video mode hint. This happens when the guest X server
     905                     * determines the initial mode. */
     906                    displayChangeRequest->xres = pThis->displayChangeRequest.xres;
     907                    displayChangeRequest->yres = pThis->displayChangeRequest.yres;
     908                    displayChangeRequest->bpp = pThis->displayChangeRequest.bpp;
     909                }
    897910                Log(("VMMDev: returning display change request xres = %d, yres = %d, bpp = %d\n",
    898911                     displayChangeRequest->xres, displayChangeRequest->yres, displayChangeRequest->bpp));
     
    915928                if (displayChangeRequest->eventAck == VMMDEV_EVENT_DISPLAY_CHANGE_REQUEST)
    916929                {
    917                     /* Remember which resolution the client has queried, subsequent reads will return the same values. */
     930                    /* Remember which resolution the client has queried, subsequent reads
     931                     * will return the same values. */
    918932                    pThis->lastReadDisplayChangeRequest = pThis->displayChangeRequest;
    919                 }
    920 
    921                 /* just pass on the information */
    922                 displayChangeRequest->xres    = pThis->lastReadDisplayChangeRequest.xres;
    923                 displayChangeRequest->yres    = pThis->lastReadDisplayChangeRequest.yres;
    924                 displayChangeRequest->bpp     = pThis->lastReadDisplayChangeRequest.bpp;
    925                 displayChangeRequest->display = pThis->lastReadDisplayChangeRequest.display;
     933                    pThis->fGuestSentChangeEventAck = true;
     934                }
     935
     936                if (pThis->fGuestSentChangeEventAck)
     937                {
     938                    displayChangeRequest->xres    = pThis->lastReadDisplayChangeRequest.xres;
     939                    displayChangeRequest->yres    = pThis->lastReadDisplayChangeRequest.yres;
     940                    displayChangeRequest->bpp     = pThis->lastReadDisplayChangeRequest.bpp;
     941                    displayChangeRequest->display = pThis->lastReadDisplayChangeRequest.display;
     942                }
     943                else
     944                {
     945                    /* This is not a response to a VMMDEV_EVENT_DISPLAY_CHANGE_REQUEST, just
     946                     * read the last valid video mode hint. This happens when the guest X server
     947                     * determines the initial video mode. */
     948                    displayChangeRequest->xres    = pThis->displayChangeRequest.xres;
     949                    displayChangeRequest->yres    = pThis->displayChangeRequest.yres;
     950                    displayChangeRequest->bpp     = pThis->displayChangeRequest.bpp;
     951                    displayChangeRequest->display = pThis->displayChangeRequest.display;
     952                }
    926953                Log(("VMMDev: returning display change request xres = %d, yres = %d, bpp = %d at %d\n",
    927954                     displayChangeRequest->xres, displayChangeRequest->yres, displayChangeRequest->bpp, displayChangeRequest->display));
     
    20862113
    20872114
    2088 #define VMMDEV_SSM_VERSION  10
     2115#define VMMDEV_SSM_VERSION  11
    20892116
    20902117/**
     
    21142141    SSMR3PutU32(pSSMHandle, pThis->fu32AdditionsOk);
    21152142    SSMR3PutU32(pSSMHandle, pThis->u32VideoAccelEnabled);
     2143    SSMR3PutBool(pSSMHandle, pThis->fGuestSentChangeEventAck);
    21162144
    21172145    SSMR3PutU32(pSSMHandle, pThis->guestCaps);
     
    21582186    SSMR3GetU32(pSSMHandle, &pThis->fu32AdditionsOk);
    21592187    SSMR3GetU32(pSSMHandle, &pThis->u32VideoAccelEnabled);
     2188    if (u32Version > 10)
     2189        SSMR3GetBool(pSSMHandle, &pThis->fGuestSentChangeEventAck);
    21602190
    21612191    SSMR3GetU32(pSSMHandle, &pThis->guestCaps);
     
    25232553    /* clear pending display change request. */
    25242554    memset (&pThis->lastReadDisplayChangeRequest, 0, sizeof (pThis->lastReadDisplayChangeRequest));
     2555    pThis->fGuestSentChangeEventAck = false;
    25252556
    25262557    /* disable seamless mode */
  • trunk/src/VBox/Devices/VMMDev/VMMDevState.h

    r22272 r22433  
    114114    uint32_t u32VideoAccelEnabled;
    115115
     116    /** true if the guest responded to VMMDEV_EVENT_DISPLAY_CHANGE_REQUEST at least once */
     117    bool fGuestSentChangeEventAck;
     118
    116119    /** resolution change request */
    117120    struct
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