Changeset 79050 in vbox for trunk/src/VBox/Main
- Timestamp:
- Jun 8, 2019 3:05:03 AM (6 years ago)
- Location:
- trunk/src/VBox/Main
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Main/idl/VirtualBox.xidl
r79047 r79050 23657 23657 </desc> 23658 23658 </const> 23659 <const name="OnGuestMonitorInfoChanged" value="101"> 23659 <const name="OnGuestAdditionsStatusChanged" value="101"> 23660 <desc> 23661 See <link to="IGuestAdditionsStatusChangedEvent">IGuestAdditionsStatusChangedEvent</link>. 23662 </desc> 23663 </const> 23664 <const name="OnGuestMonitorInfoChanged" value="102"> 23660 23665 <desc> 23661 23666 See <link to="IGuestMonitorInfoChangedEvent">IGuestMonitorInfoChangedEvent</link>. 23662 23667 </desc> 23663 23668 </const> 23664 <!-- Last event marker --> 23665 <const name="Last" value="102"> 23669 <!-- End event marker --> 23670 <!-- @todo rename to 'End' as it is exclusive (we use 'last' to be inclusive). --> 23671 <const name="Last" value="103"> 23666 23672 <desc> 23667 23673 Must be last event, used for iterations and structures relying on numerical event values. … … 25760 25766 25761 25767 <interface 25768 name="IGuestAdditionsStatusChangedEvent" extends="IEvent" 25769 uuid="fd1a34ad-0b74-4e2b-ed0f-46222de8a883" 25770 wsmap="managed" autogen="VBoxEvent" id="OnGuestAdditionsStatusChanged"> 25771 <desc>The guest addition status changed.</desc> 25772 25773 <attribute name="facility" type="AdditionsFacilityType" dir="in"> 25774 <desc>Facility this event relates to.</desc> 25775 </attribute> 25776 <attribute name="status" type="AdditionsFacilityStatus" readonly="yes"> 25777 <desc>The new facility status.</desc> 25778 </attribute> 25779 <attribute name="runLevel" type="AdditionsRunLevelType" readonly="yes"> 25780 <desc>The new run level.</desc> 25781 </attribute> 25782 <attribute name="timestamp" type="long long" readonly="yes"> 25783 <desc>The millisecond timestamp associated with the event.</desc> 25784 </attribute> 25785 </interface> 25786 25787 <interface 25762 25788 name="IGuestMonitorInfoChangedEvent" extends="IEvent" 25763 25789 uuid="0b3cdeb2-808e-11e9-b773-133d9330f849" … … 25769 25795 </attribute> 25770 25796 </interface> 25771 25772 25797 25773 25798 <!-- -
trunk/src/VBox/Main/include/AdditionsFacilityImpl.h
r76562 r79050 65 65 AdditionsFacilityStatus_T i_getStatus() const; 66 66 AdditionsFacilityType_T i_getType() const; 67 voidi_update(AdditionsFacilityStatus_T a_enmStatus, uint32_t a_fFlags, PCRTTIMESPEC a_pTimeSpecTS);67 bool i_update(AdditionsFacilityStatus_T a_enmStatus, uint32_t a_fFlags, PCRTTIMESPEC a_pTimeSpecTS); 68 68 69 69 private: -
trunk/src/VBox/Main/include/GuestImpl.h
r76562 r79050 90 90 void i_setAdditionsInfo2(uint32_t a_uFullVersion, const char *a_pszName, uint32_t a_uRevision, uint32_t a_fFeatures); 91 91 bool i_facilityIsActive(VBoxGuestFacilityType enmFacility); 92 voidi_facilityUpdate(VBoxGuestFacilityType a_enmFacility, VBoxGuestFacilityStatus a_enmStatus,92 bool i_facilityUpdate(VBoxGuestFacilityType a_enmFacility, VBoxGuestFacilityStatus a_enmStatus, 93 93 uint32_t a_fFlags, PCRTTIMESPEC a_pTimeSpecTS); 94 94 ComObjPtr<Console> i_getConsole(void) { return mParent; } -
trunk/src/VBox/Main/src-client/AdditionsFacilityImpl.cpp
r76553 r79050 205 205 /** 206 206 * Method used by IGuest::facilityUpdate to make updates. 207 */ 208 void AdditionsFacility::i_update(AdditionsFacilityStatus_T a_enmStatus, uint32_t a_fFlags, PCRTTIMESPEC a_pTimeSpecTS) 209 { 207 * 208 * @returns change indicator. 209 */ 210 bool AdditionsFacility::i_update(AdditionsFacilityStatus_T a_enmStatus, uint32_t a_fFlags, PCRTTIMESPEC a_pTimeSpecTS) 211 { 212 bool const fChanged = mData.mStates.size() == 0 213 || mData.mStates.back().mStatus != a_enmStatus; 214 210 215 FacilityState state; 211 216 state.mStatus = a_enmStatus; … … 216 221 if (mData.mStates.size() > 10) /* Only keep the last 10 states. */ 217 222 mData.mStates.erase(mData.mStates.begin()); 218 } 219 223 224 return fChanged; 225 } 226 -
trunk/src/VBox/Main/src-client/GuestImpl.cpp
r78234 r79050 864 864 AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS); 865 865 866 867 866 /* 868 867 * Note: The Guest Additions API (interface) version is deprecated … … 899 898 * interface version. 900 899 */ 901 i_facilityUpdate(VBoxGuestFacilityType_Graphics, VBoxGuestFacilityStatus_Active, 900 i_facilityUpdate(VBoxGuestFacilityType_Graphics, VBoxGuestFacilityStatus_Active, 0 /*fFlags*/, &TimeSpecTS); 902 901 } 903 902 } … … 931 930 mData.mOSType = aOsType; 932 931 mData.mOSTypeId = Global::OSTypeId(aOsType); 932 933 /* 934 * Always fire an event here. 935 */ 936 AdditionsRunLevelType_T const enmRunLevel = mData.mAdditionsRunLevel; 937 alock.release(); 938 fireGuestAdditionsStatusChangedEvent(mEventSource, AdditionsFacilityType_None, AdditionsFacilityStatus_Active, 939 enmRunLevel, RTTimeSpecGetMilli(&TimeSpecTS)); 933 940 } 934 941 … … 989 996 } 990 997 991 voidGuest::i_facilityUpdate(VBoxGuestFacilityType a_enmFacility, VBoxGuestFacilityStatus a_enmStatus,998 bool Guest::i_facilityUpdate(VBoxGuestFacilityType a_enmFacility, VBoxGuestFacilityStatus a_enmStatus, 992 999 uint32_t a_fFlags, PCRTTIMESPEC a_pTimeSpecTS) 993 1000 { 994 AssertReturnVoid( a_enmFacility < VBoxGuestFacilityType_All 995 && a_enmFacility > VBoxGuestFacilityType_Unknown); 996 1001 AssertReturn( a_enmFacility < VBoxGuestFacilityType_All 1002 && a_enmFacility > VBoxGuestFacilityType_Unknown, false); 1003 1004 bool fChanged; 997 1005 FacilityMapIter it = mData.mFacilityMap.find((AdditionsFacilityType_T)a_enmFacility); 998 1006 if (it != mData.mFacilityMap.end()) 999 1007 { 1000 1008 AdditionsFacility *pFac = it->second; 1001 pFac->i_update((AdditionsFacilityStatus_T)a_enmStatus, a_fFlags, a_pTimeSpecTS);1009 fChanged = pFac->i_update((AdditionsFacilityStatus_T)a_enmStatus, a_fFlags, a_pTimeSpecTS); 1002 1010 } 1003 1011 else … … 1007 1015 /* The easy way out for now. We could automatically destroy 1008 1016 inactive facilities like VMMDev does if we like... */ 1009 AssertFailedReturn Void();1017 AssertFailedReturn(false); 1010 1018 } 1011 1019 1012 1020 ComObjPtr<AdditionsFacility> ptrFac; 1013 1021 ptrFac.createObject(); 1014 AssertReturn Void(!ptrFac.isNull());1022 AssertReturn(!ptrFac.isNull(), false); 1015 1023 1016 1024 HRESULT hrc = ptrFac->init(this, (AdditionsFacilityType_T)a_enmFacility, (AdditionsFacilityStatus_T)a_enmStatus, 1017 1025 a_fFlags, a_pTimeSpecTS); 1018 if (SUCCEEDED(hrc)) 1019 mData.mFacilityMap.insert(std::make_pair((AdditionsFacilityType_T)a_enmFacility, ptrFac)); 1020 } 1026 AssertComRCReturn(hrc, false); 1027 mData.mFacilityMap.insert(std::make_pair((AdditionsFacilityType_T)a_enmFacility, ptrFac)); 1028 fChanged = true; 1029 } 1030 return fChanged; 1021 1031 } 1022 1032 … … 1074 1084 * Set a specific facility status. 1075 1085 */ 1086 bool fFireEvent = false; 1076 1087 if (a_enmFacility == VBoxGuestFacilityType_All) 1077 1088 for (FacilityMapIter it = mData.mFacilityMap.begin(); it != mData.mFacilityMap.end(); ++it) 1078 i_facilityUpdate((VBoxGuestFacilityType)it->first, a_enmStatus, a_fFlags, a_pTimeSpecTS);1089 fFireEvent |= i_facilityUpdate((VBoxGuestFacilityType)it->first, a_enmStatus, a_fFlags, a_pTimeSpecTS); 1079 1090 else /* Update one facility only. */ 1080 i_facilityUpdate(a_enmFacility, a_enmStatus, a_fFlags, a_pTimeSpecTS);1091 fFireEvent = i_facilityUpdate(a_enmFacility, a_enmStatus, a_fFlags, a_pTimeSpecTS); 1081 1092 1082 1093 /* 1083 1094 * Recalc the runlevel. 1084 1095 */ 1096 AdditionsRunLevelType_T const enmOldRunLevel = mData.mAdditionsRunLevel; 1085 1097 if (i_facilityIsActive(VBoxGuestFacilityType_VBoxTrayClient)) 1086 1098 mData.mAdditionsRunLevel = AdditionsRunLevelType_Desktop; … … 1091 1103 else 1092 1104 mData.mAdditionsRunLevel = AdditionsRunLevelType_None; 1105 1106 /* 1107 * Fire event if something actually changed. 1108 */ 1109 AdditionsRunLevelType_T const enmNewRunLevel = mData.mAdditionsRunLevel; 1110 if (fFireEvent || enmNewRunLevel != enmOldRunLevel) 1111 { 1112 alock.release(); 1113 fireGuestAdditionsStatusChangedEvent(mEventSource, (AdditionsFacilityType_T)a_enmFacility, 1114 (AdditionsFacilityStatus_T)a_enmStatus, enmNewRunLevel, 1115 RTTimeSpecGetMilli(a_pTimeSpecTS)); 1116 } 1093 1117 } 1094 1118
Note:
See TracChangeset
for help on using the changeset viewer.