VirtualBox

Changeset 30702 in vbox


Ignore:
Timestamp:
Jul 7, 2010 11:49:42 AM (15 years ago)
Author:
vboxsync
Message:

Main: event source change events

Location:
trunk/src/VBox/Main
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/EventImpl.cpp

    r30698 r30702  
    700700    if (FAILED(autoCaller.rc())) return autoCaller.rc();
    701701
    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);
    712718
    713719    return S_OK;
     
    721727    if (FAILED(autoCaller.rc())) return autoCaller.rc();
    722728
    723     AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
    724 
    725     Listeners::iterator it = m->mListeners.find(aListener);
    726729    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);
    738753    }
    739754
  • trunk/src/VBox/Main/idl/VirtualBox.xidl

    r30699 r30702  
    1476814768      </desc>
    1476914769    </const>
     14770    <const name="OnEventSourceChange" value="62">
     14771      <desc>
     14772        <see>IEventSourceChangeEvent</see>
     14773      </desc>
     14774    </const>
    1477014775    <!-- Last event marker -->
    14771     <const name="Last" value="62">
     14776    <const name="Last" value="63">
    1477214777      <desc>
    1477314778        Must be last event, used for iterations and structures relying on numerical event values.
     
    1554215547  </interface>
    1554315548
     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
    1554415573  <interface
    1554515574      name="IExtraDataChangeEvent" extends="IEvent"
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