VirtualBox

Changeset 35907 in vbox


Ignore:
Timestamp:
Feb 9, 2011 11:20:31 AM (14 years ago)
Author:
vboxsync
Message:

Main/Frontends: Also use facilities for guest features (seamless, graphics), added facility-state-to-name to VBoxManage, some renaming.

Location:
trunk
Files:
17 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/VBoxGuestLib.h

    r35016 r35907  
    413413VBGLR3DECL(int)     VbglR3WaitEvent(uint32_t fMask, uint32_t cMillies, uint32_t *pfEvents);
    414414
    415 VBGLR3DECL(int)     VbglR3ReportAdditionsStatus(VBoxGuestStatusFacility Facility, VBoxGuestStatusCurrent StatusCurrent, uint32_t uFlags);
     415VBGLR3DECL(int)     VbglR3ReportAdditionsStatus(VBoxGuestFacilityType Facility, VBoxGuestFacilityStatus StatusCurrent, uint32_t uFlags);
    416416VBGLR3DECL(int)     VbglR3GetAdditionsVersion(char **ppszVer, char **ppszRev);
    417417VBGLR3DECL(int)     VbglR3GetAdditionsInstallationPath(char **ppszPath);
  • trunk/include/VBox/VMMDev.h

    r35887 r35907  
    669669
    670670/**
    671  * Guest status facility.
    672  * This needs to be kept in sync with AdditionsFacility of the Main API!
     671 * The guest facility.
     672 * This needs to be kept in sync with AdditionsFacilityType of the Main API!
    673673 */
    674674typedef enum
    675675{
    676     VBoxGuestStatusFacility_Unknown         = 0,
    677     VBoxGuestStatusFacility_VBoxGuestDriver = 20,
    678     VBoxGuestStatusFacility_VBoxService     = 100,
    679     VBoxGuestStatusFacility_VBoxTrayClient  = 101, /* VBoxTray (Windows), VBoxClient (Linux, Unix). */
    680     VBoxGuestStatusFacility_All             = 999,
    681     VBoxGuestStatusFacility_SizeHack        = 0x7fffffff
    682 } VBoxGuestStatusFacility;
    683 AssertCompileSize(VBoxGuestStatusFacility, 4);
     676    VBoxGuestFacilityType_Unknown         = 0,
     677    VBoxGuestFacilityType_VBoxGuestDriver = 20,
     678    VBoxGuestFacilityType_VBoxService     = 100,
     679    VBoxGuestFacilityType_VBoxTrayClient  = 101, /* VBoxTray (Windows), VBoxClient (Linux, Unix). */
     680    VBoxGuestFacilityType_Seamless        = 1000,
     681    VBoxGuestFacilityType_Graphics        = 1001,
     682    VBoxGuestFacilityType_All             = 0xfffffffe,
     683    VBoxGuestFacilityType_SizeHack        = 0x7fffffff
     684} VBoxGuestFacilityType;
     685AssertCompileSize(VBoxGuestFacilityType, 4);
    684686
    685687
    686688/**
    687689 * The current guest status of a facility.
     690 * This needs to be kept in sync with AdditionsFacilityStatus of the Main API!
    688691 */
    689692typedef enum
    690693{
    691     VBoxGuestStatusCurrent_Disabled    = 0,
    692     VBoxGuestStatusCurrent_Inactive    = 1,
    693     VBoxGuestStatusCurrent_Paused      = 2,
    694     VBoxGuestStatusCurrent_PreInit     = 20,
    695     VBoxGuestStatusCurrent_Init        = 30,
    696     VBoxGuestStatusCurrent_Active      = 50,
    697     VBoxGuestStatusCurrent_Terminating = 100,
    698     VBoxGuestStatusCurrent_Terminated  = 101,
    699     VBoxGuestStatusCurrent_Unknown     = 999,
    700     VBoxGuestStatusCurrent_SizeHack    = 0x7fffffff
    701 } VBoxGuestStatusCurrent;
    702 AssertCompileSize(VBoxGuestStatusCurrent, 4);
     694    VBoxGuestFacilityStatus_Inactive    = 0,
     695    VBoxGuestFacilityStatus_Paused      = 1,
     696    VBoxGuestFacilityStatus_PreInit     = 20,
     697    VBoxGuestFacilityStatus_Init        = 30,
     698    VBoxGuestFacilityStatus_Active      = 50,
     699    VBoxGuestFacilityStatus_Terminating = 100,
     700    VBoxGuestFacilityStatus_Terminated  = 101,
     701    VBoxGuestFacilityStatus_Failed  =     800,
     702    VBoxGuestFacilityStatus_Unknown     = 999,
     703    VBoxGuestFacilityStatus_SizeHack    = 0x7fffffff
     704} VBoxGuestFacilityStatus;
     705AssertCompileSize(VBoxGuestFacilityStatus, 4);
    703706
    704707/**
     
    710713{
    711714    /** Facility the status is indicated for. */
    712     VBoxGuestStatusFacility facility;
     715    VBoxGuestFacilityType facility;
    713716    /** Current guest status. */
    714     VBoxGuestStatusCurrent status;
     717    VBoxGuestFacilityStatus status;
    715718    /** Flags, not used at the moment. */
    716719    uint32_t flags;
  • trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxHelpers.cpp

    r35887 r35907  
    2828
    2929
    30 int hlpReportStatus(VBoxGuestStatusCurrent statusCurrent)
    31 {
    32     int rc = VbglR3ReportAdditionsStatus(VBoxGuestStatusFacility_VBoxTrayClient,
     30int hlpReportStatus(VBoxGuestFacilityStatus statusCurrent)
     31{
     32    int rc = VbglR3ReportAdditionsStatus(VBoxGuestFacilityType_VBoxTrayClient,
    3333                                         statusCurrent,
    3434                                         0 /* Flags */);
  • trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxHelpers.h

    r35863 r35907  
    2727#endif /* !DEBUG_DISPLAY_CHANGE */
    2828
    29 extern int hlpReportStatus(VBoxGuestStatusCurrent statusCurrent);
     29extern int hlpReportStatus(VBoxGuestFacilityStatus statusCurrent);
    3030extern void hlpReloadCursor(void);
    3131extern void hlpResizeRect(RECTL *paRects, unsigned nRects, unsigned uPrimary, unsigned uResized, int iNewWidth, int iNewHeight);
  • trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxTray.cpp

    r35863 r35907  
    583583                {
    584584                    /* Report the host that we're up and running! */
    585                     rc = hlpReportStatus(VBoxGuestStatusCurrent_Active);
     585                    hlpReportStatus(VBoxGuestFacilityStatus_Active);
    586586                }
    587587            }
     
    685685    }
    686686
    687     if (RT_FAILURE(rc))
    688     {
    689         CloseHandle (hMutexAppRunning);
    690         hMutexAppRunning = NULL;
    691         return 1;
    692     }
    693 
    694687    if (RT_SUCCESS(rc))
    695688    {
     
    697690        ghInstance = hInstance;
    698691
    699         rc = hlpReportStatus(VBoxGuestStatusCurrent_Init);
     692        hlpReportStatus(VBoxGuestFacilityStatus_Init);
     693        rc = vboxTrayCreateToolWindow();
    700694        if (RT_SUCCESS(rc))
    701695        {
    702             rc = vboxTrayCreateToolWindow();
     696            rc = vboxTraySetupSeamless();
    703697            if (RT_SUCCESS(rc))
    704698            {
    705                 rc = vboxTraySetupSeamless();
     699                Log(("VBoxTray: Init successful\n"));
     700                rc = vboxTrayServiceMain();
    706701                if (RT_SUCCESS(rc))
    707                 {
    708                     Log(("VBoxTray: Init successful\n"));
    709                     rc = vboxTrayServiceMain();
    710                     hlpReportStatus(VBoxGuestStatusCurrent_Terminating);
    711                     vboxTrayShutdownSeamless();
    712                 }
    713                 vboxTrayDestroyToolWindow();
    714             }
    715             rc = hlpReportStatus(VBoxGuestStatusCurrent_Inactive);
    716         }
    717     }
    718     else
    719         Log(("VBoxTray: Could not report VBoxTray status \"Init\", rc=%Rrc\n", rc));
     702                    hlpReportStatus(VBoxGuestFacilityStatus_Terminating);
     703                vboxTrayShutdownSeamless();
     704            }
     705            vboxTrayDestroyToolWindow();
     706        }
     707        if (RT_SUCCESS(rc))
     708            hlpReportStatus(VBoxGuestFacilityStatus_Terminated);
     709    }
     710
    720711        if (RT_FAILURE(rc))
    721         LogRel(("VBoxTray: Error while starting, rc=%Rrc\n", rc));
     712    {
     713        LogRel(("VBoxTray: Error while starting, rc=%Rrc\n", rc));
     714        hlpReportStatus(VBoxGuestFacilityStatus_Failed);
     715    }
    722716    LogRel(("VBoxTray: Ended\n"));
     717    vboxTrayCloseBaseDriver();
    723718
    724719    /* Release instance mutex. */
     
    730725
    731726    VbglR3Term();
    732     return 0;
     727    return RT_SUCCESS(rc) ? 0 : 1;
    733728}
    734729
  • trunk/src/VBox/Additions/common/VBoxGuest/VBoxGuest2.cpp

    r32435 r35907  
    55
    66/*
    7  * Copyright (C) 2010 Oracle Corporation
     7 * Copyright (C) 2011 Oracle Corporation
    88 *
    99 * This file is part of VirtualBox Open Source Edition (OSE), as
     
    116116    if (RT_SUCCESS(rc))
    117117    {
    118         pReq2->guestStatus.facility = VBoxGuestStatusFacility_VBoxGuestDriver;
     118        pReq2->guestStatus.facility = VBoxGuestFacilityType_VBoxGuestDriver;
    119119        pReq2->guestStatus.status = fActive ?
    120                                     VBoxGuestStatusCurrent_Active
    121                                   : VBoxGuestStatusCurrent_Inactive;
     120                                    VBoxGuestFacilityStatus_Active
     121                                  : VBoxGuestFacilityStatus_Inactive;
    122122        pReq2->guestStatus.flags = 0;
    123123        rc = VbglGRPerform(&pReq2->header);
  • trunk/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibAdditions.cpp

    r30959 r35907  
    147147 * @param   fReserved       Reserved for future use (what?).
    148148 */
    149 VBGLR3DECL(int) VbglR3ReportAdditionsStatus(VBoxGuestStatusFacility enmFacility,
    150                                             VBoxGuestStatusCurrent enmStatusCurrent,
     149VBGLR3DECL(int) VbglR3ReportAdditionsStatus(VBoxGuestFacilityType enmFacility,
     150                                            VBoxGuestFacilityStatus enmStatusCurrent,
    151151                                            uint32_t fReserved)
    152152{
  • trunk/src/VBox/Additions/common/VBoxService/VBoxService.cpp

    r35080 r35907  
    229229
    230230/**
     231 * Reports the current VBoxService status to the host.
     232 *
     233 * @return  IPRT status code.
     234 * @param   enmStatus               Status to report to the host.
     235 */
     236int VBoxServiceReportStatus(VBoxGuestFacilityStatus enmStatus)
     237{
     238    /* Report the host that we're up and running! */
     239    int rc = VbglR3ReportAdditionsStatus(VBoxGuestFacilityType_VBoxService,
     240                                         enmStatus, 0 /* Flags */);
     241    if (RT_FAILURE(rc))
     242        VBoxServiceError("Could not report VBoxService status (%u), rc=%Rrc\n", enmStatus, rc);
     243    return rc;
     244}
     245
     246
     247/**
    231248 * Gets a 32-bit value argument.
    232249 *
     
    310327{
    311328    int rc;
     329
     330    VBoxServiceReportStatus(VBoxGuestFacilityStatus_Init);
    312331
    313332    /*
     
    372391        VBoxServiceVerbose(1, "All services started.\n");
    373392    else
     393    {
    374394        VBoxServiceError("An error occcurred while the services!\n");
     395        VBoxServiceReportStatus(VBoxGuestFacilityStatus_Failed);
     396    }
    375397    return rc;
    376398}
     
    386408{
    387409    int rc = VINF_SUCCESS;
     410
     411    VBoxServiceReportStatus(VBoxGuestFacilityStatus_Terminating);
    388412
    389413    /*
     
    445469
    446470    VBoxServiceVerbose(2, "Stopping services returned: rc=%Rrc\n", rc);
     471    VBoxServiceReportStatus(RT_SUCCESS(rc)
     472                            ? VBoxGuestFacilityStatus_Paused : VBoxGuestFacilityStatus_Failed);
    447473    return rc;
    448474}
     
    456482    int rc;
    457483
    458     /* Report the host that we're up and running! */
    459     rc = VbglR3ReportAdditionsStatus(VBoxGuestStatusFacility_VBoxService,
    460                                      VBoxGuestStatusCurrent_Active,
    461                                      0 /* Flags */);
    462     if (RT_FAILURE(rc))
    463         VBoxServiceError("Could not report facility (%u) status %u, rc=%Rrc\n",
    464                          VBoxGuestStatusFacility_VBoxService, VBoxGuestStatusCurrent_Active, rc);
     484    VBoxServiceReportStatus(VBoxGuestFacilityStatus_Active);
    465485
    466486#ifdef RT_OS_WINDOWS
     
    557577#endif
    558578
     579    VBoxServiceReportStatus(VBoxGuestFacilityStatus_PreInit);
     580
    559581    /*
    560582     * Do pre-init of services.
     
    564586        rc = g_aServices[j].pDesc->pfnPreInit();
    565587        if (RT_FAILURE(rc))
     588        {
     589            VBoxServiceReportStatus(VBoxGuestFacilityStatus_Failed);
    566590            return VBoxServiceError("Service '%s' failed pre-init: %Rrc\n", g_aServices[j].pDesc->pszName, rc);
     591        }
    567592    }
    568593#ifdef RT_OS_WINDOWS
     
    768793
    769794    VBoxServiceVerbose(0, "Ended.\n");
     795    VBoxServiceReportStatus(VBoxGuestFacilityStatus_Terminated);
    770796    return rcExit;
    771797}
  • trunk/src/VBox/Frontends/VBoxManage/VBoxManage.h

    r35766 r35907  
    197197                   VMINFO_DETAILS details = VMINFO_NONE,
    198198                   ComPtr <IConsole> console = ComPtr<IConsole>());
    199 const char *stateToName(MachineState_T machineState, bool fShort);
     199const char *machineStateToName(MachineState_T machineState, bool fShort);
    200200
    201201/* VBoxManageList.cpp */
  • trunk/src/VBox/Frontends/VBoxManage/VBoxManageControlVM.cpp

    r35764 r35907  
    191191                    {
    192192                        RTMsgError("Machine in invalid state %d -- %s\n",
    193                                    machineState, stateToName(machineState, false));
     193                                   machineState, machineStateToName(machineState, false));
    194194                        break;
    195195                    }
  • trunk/src/VBox/Frontends/VBoxManage/VBoxManageGuestCtrl.cpp

    r35832 r35907  
    257257    {
    258258        RTMsgError("Machine \"%s\" is not running (currently %s)!\n",
    259                    pszNameOrId, stateToName(machineState, false));
     259                   pszNameOrId, machineStateToName(machineState, false));
    260260        return VERR_VM_INVALID_VM_STATE;
    261261    }
  • trunk/src/VBox/Frontends/VBoxManage/VBoxManageInfo.cpp

    r35892 r35907  
    55
    66/*
    7  * Copyright (C) 2006-2010 Oracle Corporation
     7 * Copyright (C) 2006-2011 Oracle Corporation
    88 *
    99 * This file is part of VirtualBox Open Source Edition (OSE), as
     
    111111}
    112112
    113 const char *stateToName(MachineState_T machineState, bool fShort)
     113const char *machineStateToName(MachineState_T machineState, bool fShort)
    114114{
    115115    switch (machineState)
     
    156156            return fShort ? "settingup"           : "setting up";
    157157        default:
    158             return "unknown";
    159     }
     158            break;
     159    }
     160    return "unknown";
     161}
     162
     163const char *facilityStateToName(AdditionsFacilityStatus_T faStatus, bool fShort)
     164{
     165    switch (faStatus)
     166    {
     167        case AdditionsFacilityStatus_Inactive:
     168            return fShort ? "inactive" : "not active";
     169        case AdditionsFacilityStatus_Paused:
     170            return "paused";
     171        case AdditionsFacilityStatus_PreInit:
     172            return fShort ? "preinit" : "pre-initializing";
     173        case AdditionsFacilityStatus_Init:
     174            return fShort ? "init"    : "initializing";
     175        case AdditionsFacilityStatus_Active:
     176            return fShort ? "active"  : "active/running";
     177        case AdditionsFacilityStatus_Terminating:
     178            return "terminating";
     179        case AdditionsFacilityStatus_Terminated:
     180            return "terminated";
     181        case AdditionsFacilityStatus_Failed:
     182            return "failed";
     183        case AdditionsFacilityStatus_Unknown:
     184        default:
     185            break;
     186    }
     187    return "unknown";
    160188}
    161189
     
    568596    MachineState_T machineState;
    569597    rc = machine->COMGETTER(State)(&machineState);
    570     const char *pszState = stateToName(machineState, details == VMINFO_MACHINEREADABLE /*=fShort*/);
     598    const char *pszState = machineStateToName(machineState, details == VMINFO_MACHINEREADABLE /*=fShort*/);
    571599
    572600    LONG64 stateSince;
     
    20702098                    else
    20712099                        RTPrintf("Guest driver:                        %u (last update: %s)\n",
    2072                                  faStatus, szLastUpdated);
     2100                                 facilityStateToName(faStatus, false /* No short naming */), szLastUpdated);
    20732101                }
    20742102
     
    20812109                                 faStatus, lLastUpdatedMS);
    20822110                    else
    2083                         RTPrintf("VBoxService:                         %u (last update: %s)\n",
    2084                                  faStatus, szLastUpdated);
     2111                        RTPrintf("VBoxService:                         %s (last update: %s)\n",
     2112                                 facilityStateToName(faStatus, false /* No short naming */), szLastUpdated);
    20852113                }
    20862114
     
    20912119                    if (details == VMINFO_MACHINEREADABLE)
    20922120                        RTPrintf("GuestAdditionsFacilityStatusVBoxTrayClient=%u,%ld\n",
    2093                                  faStatus, lLastUpdatedMS);
     2121                                 facilityStateToName(faStatus, false /* No short naming */), lLastUpdatedMS);
    20942122                    else
    20952123                        RTPrintf("VBoxTray / VBoxClient:               %u (last update: %s)\n",
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp

    r35761 r35907  
    77
    88/*
    9  * Copyright (C) 2010 Oracle Corporation
     9 * Copyright (C) 2011 Oracle Corporation
    1010 *
    1111 * This file is part of VirtualBox Open Source Edition (OSE), as
     
    610610    /* Variable flags: */
    611611    ULONG ulGuestAdditionsRunLevel = guest.GetAdditionsRunLevel();
    612     bool fIsGuestSupportsGraphics = guest.GetSupportsGraphics();
    613     bool fIsGuestSupportsSeamless = guest.GetSupportsSeamless();
    614 
     612    LONG64 lLastUpdatedIgnored;
     613    bool fIsGuestSupportsGraphics = guest.GetFacilityStatus(KAdditionsFacilityType_Graphics, lLastUpdatedIgnored)
     614                                    == AdditionsFacilityStatus_Active;
     615    bool fIsGuestSupportsSeamless = guest.GetFacilityStatus(KAdditionsFacilityType_Seamless, lLastUpdatedIgnored)
     616                                    == AdditionsFacilityStatus_Active;
    615617    /* Check if something had changed: */
    616618    if (m_ulGuestAdditionsRunLevel != ulGuestAdditionsRunLevel ||
  • trunk/src/VBox/Main/idl/VirtualBox.xidl

    r35903 r35907  
    78827882  <enum
    78837883    name="AdditionsFacilityType"
    7884     uuid="bcf4f5e7-86d6-4b8c-99cd-449a79114fb4"
     7884    uuid="98f7f957-89fb-49b6-a3b1-31e3285eb1d8"
    78857885    >
    78867886    <desc>
     
    79007900      <desc>VirtualBox desktop integration (VBoxTray on Windows, VBoxClient on non-Windows).</desc>
    79017901    </const>
    7902     <const name="All"                     value="999">
     7902    <const name="Seamless"                value="1000">
     7903      <desc>Seamless guest desktop integration.</desc>
     7904    </const>
     7905    <const name="Graphics"                value="1100">
     7906      <desc>Guest graphics mode. If not enabled, seamless rendering will not work, resize hints
     7907        are not immediately acted on and guest display resizes are probably not initiated by
     7908        the guest additions.
     7909      </desc>
     7910    </const>
     7911    <const name="All"                     value="2147483646">
    79037912      <desc>All facilities selected.</desc>
    79047913    </const>
     
    79077916  <enum
    79087917    name="AdditionsFacilityStatus"
    7909     uuid="730a42a1-dac6-4194-b394-744a5ea487f3"
     7918    uuid="ce06f9e1-394e-4fe9-9368-5a88c567dbde"
    79107919    >
    79117920    <desc>
     
    79137922    </desc>
    79147923
    7915     <const name="Disabled"                value="0">
    7916       <desc>Facility is disabled.</desc>
    7917     </const>
    7918     <const name="Inactive"                value="1">
    7919       <desc>Facility is enabled but inactive.</desc>
    7920     </const>
    7921     <const name="Paused"                  value="2">
     7924    <const name="Inactive"                value="0">
     7925      <desc>Facility is not active.</desc>
     7926    </const>
     7927    <const name="Paused"                  value="1">
    79227928      <desc>Facility has been paused.</desc>
    79237929    </const>
     
    80718077  <interface
    80728078    name="IGuest" extends="$unknown"
    8073     uuid="09c2e2e0-f6f9-45ec-91a1-aaab3fad9f1f"
     8079    uuid="4db4f806-0a20-4772-9419-14563b662f93"
    80748080    wsmap="managed"
    80758081    >
     
    81128118    </attribute>
    81138119
    8114     <attribute name="supportsSeamless" type="boolean" readonly="yes">
    8115       <desc>
    8116         Flag whether seamless guest display rendering (seamless desktop
    8117         integration) is supported.
    8118       </desc>
    8119     </attribute>
    8120 
    8121     <attribute name="supportsGraphics" type="boolean" readonly="yes">
    8122       <desc>
    8123         Flag whether the guest is in graphics mode.  If it is not, then
    8124         seamless rendering will not work, resize hints are not immediately
    8125         acted on and guest display resizes are probably not initiated by
    8126         the guest additions.
    8127       </desc>
    8128     </attribute>
    8129 
    81308120    <attribute name="memoryBalloonSize" type="unsigned long">
    81318121      <desc>Guest system memory balloon size in megabytes (transient property).</desc>
     
    81898179      </param>
    81908180      <param name="timestamp" type="long long" dir="out">
    8191         <desc>Timestamp (in ms) of last status update of this facility seen by the host.</desc>
     8181        <desc>Timestamp (in ms) of last status update seen by the host.</desc>
    81928182      </param>
    81938183      <param name="status" type="AdditionsFacilityStatus" dir="return">
  • trunk/src/VBox/Main/include/GuestImpl.h

    r35890 r35907  
    7676    STDMETHOD(COMGETTER(AdditionsRunLevel)) (AdditionsRunLevelType_T *aRunLevel);
    7777    STDMETHOD(COMGETTER(AdditionsVersion)) (BSTR *aAdditionsVersion);
    78     /** @todo Remove later by replacing it by AdditionsFeatureAvailable(). */
    79     STDMETHOD(COMGETTER(SupportsSeamless)) (BOOL *aSupportsSeamless);
    80     STDMETHOD(COMGETTER(SupportsGraphics)) (BOOL *aSupportsGraphics);
    81 #if 0
    82     /** @todo Will replace SupportsSeamless, SupportsGraphics, ... */
    83     STDMETHOD(COMGETTER(AdditionsFeatureAvailable)) (LONG64 aFeature, BOOL *aActive, BOOL *aAvailable);
    84 #endif
    8578    STDMETHOD(COMGETTER(MemoryBalloonSize)) (ULONG *aMemoryBalloonSize);
    8679    STDMETHOD(COMSETTER(MemoryBalloonSize)) (ULONG aMemoryBalloonSize);
     
    116109    void setAdditionsInfo(Bstr aInterfaceVersion, VBOXOSTYPE aOsType);
    117110    void setAdditionsInfo2(Bstr aAdditionsVersion, Bstr aVersionName, Bstr aRevision);
    118     void setAdditionsStatus(VBoxGuestStatusFacility enmFacility, VBoxGuestStatusCurrent enmStatus, ULONG aFlags);
     111    bool facilityIsActive(VBoxGuestFacilityType enmFacility);
     112    void updateFacility(VBoxGuestFacilityType enmFacility, VBoxGuestFacilityStatus enmStatus);
     113    void setAdditionsStatus(VBoxGuestFacilityType enmFacility, VBoxGuestFacilityStatus enmStatus, ULONG aFlags);
    119114    void setSupportedFeatures(uint32_t aCaps);
    120115    HRESULT setStatistic(ULONG aCpuId, GUESTSTATTYPE enmType, ULONG aVal);
     
    195190    struct Data
    196191    {
    197         Data() : mAdditionsRunLevel (AdditionsRunLevelType_None),
    198                  mSupportsSeamless (FALSE),
    199                  mSupportsGraphics (FALSE) {}
     192        Data() : mAdditionsRunLevel (AdditionsRunLevelType_None) {}
    200193
    201194        Bstr                    mOSTypeId;
    202 
    203195        FacilityMap             mFacilityMap;
    204196        AdditionsRunLevelType_T mAdditionsRunLevel;
    205197        Bstr                    mAdditionsVersion;
    206198        Bstr                    mInterfaceVersion;
    207         BOOL                    mSupportsSeamless;
    208         BOOL                    mSupportsGraphics;
    209199    };
    210200
  • trunk/src/VBox/Main/src-client/GuestImpl.cpp

    r35890 r35907  
    237237}
    238238
    239 STDMETHODIMP Guest::COMGETTER(SupportsSeamless) (BOOL *aSupportsSeamless)
    240 {
    241     CheckComArgOutPointerValid(aSupportsSeamless);
    242 
    243     AutoCaller autoCaller(this);
    244     if (FAILED(autoCaller.rc())) return autoCaller.rc();
    245 
    246     AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
    247 
    248     *aSupportsSeamless = mData.mSupportsSeamless;
    249 
    250     return S_OK;
    251 }
    252 
    253 STDMETHODIMP Guest::COMGETTER(SupportsGraphics) (BOOL *aSupportsGraphics)
    254 {
    255     CheckComArgOutPointerValid(aSupportsGraphics);
    256 
    257     AutoCaller autoCaller(this);
    258     if (FAILED(autoCaller.rc())) return autoCaller.rc();
    259 
    260     AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
    261 
    262     *aSupportsGraphics = mData.mSupportsGraphics;
    263 
    264     return S_OK;
    265 }
    266 
    267239BOOL Guest::isPageFusionEnabled()
    268240{
     
    585557    /*
    586558     * Older Additions didn't have this finer grained capability bit,
    587      * so enable it by default.  Newer Additions will not enable this here
     559     * so enable it by default. Newer Additions will not enable this here
    588560     * and use the setSupportedFeatures function instead.
    589561     */
    590     mData.mSupportsGraphics = mData.mAdditionsRunLevel > AdditionsRunLevelType_None;
     562    updateFacility(VBoxGuestFacilityType_Graphics, facilityIsActive(VBoxGuestFacilityType_VBoxGuestDriver) ?
     563                   VBoxGuestFacilityStatus_Active : VBoxGuestFacilityStatus_Inactive);
    591564
    592565    /*
     
    622595}
    623596
     597bool Guest::facilityIsActive(VBoxGuestFacilityType enmFacility)
     598{
     599    return mData.mFacilityMap[(AdditionsFacilityType_T)enmFacility].curStatus == AdditionsFacilityStatus_Active;
     600}
     601
     602void Guest::updateFacility(VBoxGuestFacilityType enmFacility, VBoxGuestFacilityStatus enmStatus)
     603{
     604    Assert(enmFacility < UINT32_MAX);
     605    FacilityData *pData = &mData.mFacilityMap[(AdditionsFacilityType_T)enmFacility];
     606    AssertPtr(pData);
     607
     608    RTTimeNow(&pData->tsLastUpdated);
     609    pData->curStatus = (AdditionsFacilityStatus_T)enmStatus;
     610
     611    LogFlowFunc(("Setting guest facility %u = %u (%u)\n",
     612                 enmFacility, pData->curStatus, pData->tsLastUpdated));
     613}
     614
    624615/**
    625616 * Sets the status of a certain Guest Additions facility.
    626617 * Gets called by vmmdevUpdateGuestStatus.
    627618 *
    628  * @param enmFacility
    629  * @param enmStatus
     619 * @param enmFacility   Facility to set the status for.
     620 * @param enmStatus     Actual status to set.
    630621 * @param aFlags
    631622 */
    632 void Guest::setAdditionsStatus(VBoxGuestStatusFacility enmFacility, VBoxGuestStatusCurrent enmStatus, ULONG aFlags)
     623void Guest::setAdditionsStatus(VBoxGuestFacilityType enmFacility, VBoxGuestFacilityStatus enmStatus, ULONG aFlags)
    633624{
    634625    AutoCaller autoCaller(this);
     
    642633
    643634    /* First check for disabled status. */
    644     uint32_t uCurFacility = enmFacility + (enmStatus == VBoxGuestStatusCurrent_Active ? 0 : -1);
    645     if (   enmFacility < VBoxGuestStatusFacility_VBoxGuestDriver
    646         || (   enmFacility == VBoxGuestStatusFacility_All
    647             && (   enmStatus   == VBoxGuestStatusCurrent_Inactive
    648                 || enmStatus   == VBoxGuestStatusCurrent_Disabled
    649                )
    650            )
     635    uint32_t uCurFacility = enmFacility + (enmStatus == VBoxGuestFacilityStatus_Active ? 0 : -1);
     636    if (   enmFacility < VBoxGuestFacilityType_VBoxGuestDriver
     637        || (   enmFacility == VBoxGuestFacilityType_All
     638            && enmStatus   == VBoxGuestFacilityStatus_Inactive)
    651639       )
    652640    {
    653641        mData.mAdditionsRunLevel = AdditionsRunLevelType_None;
    654642    }
    655     else if (uCurFacility >= VBoxGuestStatusFacility_VBoxTrayClient)
     643    else if (uCurFacility >= VBoxGuestFacilityType_VBoxTrayClient)
    656644    {
    657645        mData.mAdditionsRunLevel = AdditionsRunLevelType_Desktop;
    658646    }
    659     else if (uCurFacility >= VBoxGuestStatusFacility_VBoxService)
     647    else if (uCurFacility >= VBoxGuestFacilityType_VBoxService)
    660648    {
    661649        mData.mAdditionsRunLevel = AdditionsRunLevelType_Userland;
    662650    }
    663     else if (uCurFacility >= VBoxGuestStatusFacility_VBoxGuestDriver)
     651    else if (uCurFacility >= VBoxGuestFacilityType_VBoxGuestDriver)
    664652    {
    665653        mData.mAdditionsRunLevel = AdditionsRunLevelType_System;
     
    673661    if (enmFacility)
    674662    {
    675         Assert(enmFacility < UINT32_MAX);
    676         FacilityData *pData = &mData.mFacilityMap[(AdditionsFacilityType_T)enmFacility];
    677         AssertPtr(pData);
    678 
    679         RTTimeNow(&pData->tsLastUpdated);
    680         pData->curStatus = (AdditionsFacilityStatus_T)enmStatus;
    681 
    682         LogFlowFunc(("Setting guest facility %u = %u (%u)\n",
    683                      enmFacility, pData->curStatus, pData->tsLastUpdated));
     663        if (enmFacility == VBoxGuestFacilityType_All)
     664        {
     665            FacilityMapIter it = mData.mFacilityMap.begin();
     666            while (it != mData.mFacilityMap.end())
     667            {
     668                updateFacility((VBoxGuestFacilityType)it->first, enmStatus);
     669                it++;
     670            }
     671        }
     672        else /* Update one facility only. */
     673            updateFacility(enmFacility, enmStatus);
    684674    }
    685675}
     
    697687    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
    698688
    699     mData.mSupportsSeamless = (aCaps & VMMDEV_GUEST_SUPPORTS_SEAMLESS);
     689    updateFacility(VBoxGuestFacilityType_Seamless, aCaps & VMMDEV_GUEST_SUPPORTS_SEAMLESS ?
     690                   VBoxGuestFacilityStatus_Active : VBoxGuestFacilityStatus_Inactive);
    700691    /** @todo Add VMMDEV_GUEST_SUPPORTS_GUEST_HOST_WINDOW_MAPPING */
    701     mData.mSupportsGraphics = (aCaps & VMMDEV_GUEST_SUPPORTS_GRAPHICS);
     692    updateFacility(VBoxGuestFacilityType_Graphics, aCaps & VMMDEV_GUEST_SUPPORTS_GRAPHICS ?
     693                   VBoxGuestFacilityStatus_Active : VBoxGuestFacilityStatus_Inactive);
    702694}
    703695/* vi: set tabstop=4 shiftwidth=4 expandtab: */
  • trunk/src/VBox/Main/src-client/VMMDevInterface.cpp

    r35888 r35907  
    233233        guest->setAdditionsInfo(Bstr(), guestInfo->osType); /* Clear interface version + OS type. */
    234234        guest->setAdditionsInfo2(Bstr(), Bstr(), Bstr()); /* Clear Guest Additions version. */
    235         guest->setAdditionsStatus(VBoxGuestStatusFacility_All,
    236                                   VBoxGuestStatusCurrent_Inactive,
     235        guest->setAdditionsStatus(VBoxGuestFacilityType_All,
     236                                  VBoxGuestFacilityStatus_Inactive,
    237237                                  0); /* Flags; not used. */
    238238        pConsole->onAdditionsStateChange();
Note: See TracChangeset for help on using the changeset viewer.

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