Changeset 30702 in vbox
- Timestamp:
- Jul 7, 2010 11:49:42 AM (15 years ago)
- Location:
- trunk/src/VBox/Main
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Main/EventImpl.cpp
r30698 r30702 700 700 if (FAILED(autoCaller.rc())) return autoCaller.rc(); 701 701 702 AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS); 703 704 Listeners::const_iterator it = m->mListeners.find(aListener); 705 if (it != m->mListeners.end()) 706 return setError(E_INVALIDARG, 707 tr("This listener already registered")); 708 709 com::SafeArray<VBoxEventType_T> interested(ComSafeArrayInArg (aInterested)); 710 ListenerRecordHolder lrh(new ListenerRecord(aListener, interested, aActive, this)); 711 m->mListeners.insert(Listeners::value_type(aListener, lrh)); 702 { 703 AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS); 704 705 Listeners::const_iterator it = m->mListeners.find(aListener); 706 if (it != m->mListeners.end()) 707 return setError(E_INVALIDARG, 708 tr("This listener already registered")); 709 710 com::SafeArray<VBoxEventType_T> interested(ComSafeArrayInArg (aInterested)); 711 ListenerRecordHolder lrh(new ListenerRecord(aListener, interested, aActive, this)); 712 m->mListeners.insert(Listeners::value_type(aListener, lrh)); 713 } 714 715 VBoxEventDesc evDesc; 716 evDesc.init(this, VBoxEventType_OnEventSourceChange, aListener, TRUE); 717 evDesc.fire(0); 712 718 713 719 return S_OK; … … 721 727 if (FAILED(autoCaller.rc())) return autoCaller.rc(); 722 728 723 AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);724 725 Listeners::iterator it = m->mListeners.find(aListener);726 729 HRESULT rc; 727 728 if (it != m->mListeners.end()) 729 { 730 m->mListeners.erase(it); 731 // destructor removes refs from the event map 732 rc = S_OK; 733 } 734 else 735 { 736 rc = setError(VBOX_E_OBJECT_NOT_FOUND, 737 tr("Listener was never registered")); 730 { 731 AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS); 732 733 Listeners::iterator it = m->mListeners.find(aListener); 734 735 if (it != m->mListeners.end()) 736 { 737 m->mListeners.erase(it); 738 // destructor removes refs from the event map 739 rc = S_OK; 740 } 741 else 742 { 743 rc = setError(VBOX_E_OBJECT_NOT_FOUND, 744 tr("Listener was never registered")); 745 } 746 } 747 748 if (SUCCEEDED(rc)) 749 { 750 VBoxEventDesc evDesc; 751 evDesc.init(this, VBoxEventType_OnEventSourceChange, aListener, FALSE); 752 evDesc.fire(0); 738 753 } 739 754 -
trunk/src/VBox/Main/idl/VirtualBox.xidl
r30699 r30702 14768 14768 </desc> 14769 14769 </const> 14770 <const name="OnEventSourceChange" value="62"> 14771 <desc> 14772 <see>IEventSourceChangeEvent</see> 14773 </desc> 14774 </const> 14770 14775 <!-- Last event marker --> 14771 <const name="Last" value="6 2">14776 <const name="Last" value="63"> 14772 14777 <desc> 14773 14778 Must be last event, used for iterations and structures relying on numerical event values. … … 15542 15547 </interface> 15543 15548 15549 15550 <interface 15551 name="IEventSourceChangeEvent" extends="IEvent" 15552 uuid="e7932cb8-f6d4-4ab6-9cbf-558eb8959a6a" 15553 waitable="yes" 15554 wsmap="managed" autogen="VBoxEvent" id="OnEventSourceChange" 15555 > 15556 <desc> 15557 Notification when an event source state changes (listener added or removed). 15558 </desc> 15559 15560 <attribute name="listener" type="IEventListener" readonly="yes"> 15561 <desc> 15562 Event listener which has changed. 15563 </desc> 15564 </attribute> 15565 15566 <attribute name="add" type="boolean" readonly="yes"> 15567 <desc> 15568 Flag whether listener was added or removed. 15569 </desc> 15570 </attribute> 15571 </interface> 15572 15544 15573 <interface 15545 15574 name="IExtraDataChangeEvent" extends="IEvent"
Note:
See TracChangeset
for help on using the changeset viewer.