STDMETHODIMP CSVGSwatchesDlg::handleDeactivateObjectEvent(IUnknown* object, long cookie, BOOL* bAllow) { ASSERT(IsUnknownEqualUnknown(m_viewGroup, object)); // IDispEventImpl<2, CSVGFiltersDlg, &DIID__IWebXMLDocumentEvents, &LIBID_WEBEDITORLib, 1, 0>::DispEventUnadvise(m_document); CComQIPtr<ILDOMEventTarget> eventTarget = m_listView.m_xmlDocument; eventTarget->removeEventListener(L"DOMNodeInserted", (ILDOMEventListener*)this, VARIANT_TRUE); RemoveEventListeners(); m_listView.RemoveItems(); m_listView.m_xmlDocument.Release(); m_viewGroup.Release(); return S_OK; }
LRESULT CSVGSwatchesDlg::OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { CComQIPtr<ILDOMEventTarget> eventTarget = m_listView.m_xmlDocument; eventTarget->removeEventListener(L"DOMNodeInserted", (ILDOMEventListener*)this, VARIANT_TRUE); RemoveEventListeners(); m_listView.RemoveItems(); m_listView.m_xmlDocument.Release(); // CComQIPtr<IUIActiveManager> uiActiveManager = m_app; // uiActiveManager->RemoveEventHandler(this); ::RevokeDragDrop(m_hWnd); CSVGDefinitionsDlgT<CSVGSwatchesDlg>::OnDestroy(uMsg, wParam, lParam, bHandled); return 0; }
// ILDOMEventListener STDMETHODIMP CSVGMasksDlg::handleEvent(ILDOMEvent* evt) { CComBSTR type; evt->get_type(&type); // BOOL bUpdate = FALSE; if (!wcscmp(type, L"DOMNodeInserted")) { RemoveEventListeners(); BuildItems(); AddEventListeners(); } else if (!wcscmp(type, L"DOMNodeRemovedFromDocument")) { CComQIPtr<ILDOMMutationEvent> mut = evt; CComPtr<ILDOMEventTarget> target; mut->get_target(&target); CComQIPtr<ILDOMNode> node = target; for (int i = 0; i < m_listView.m_items.GetSize(); i++) { if ((ILDOMElement*)m_listView.m_items[i]->m_element == node) { CComQIPtr<ILDOMEventTarget> eventTarget = (ILDOMElement*)m_listView.m_items[i]->m_element; eventTarget->removeEventListener(L"DOMNodeRemovedFromDocument", (ILDOMEventListener*)this, VARIANT_FALSE); m_listView.DeleteItem(i); break; } } } return S_OK; }
// ILDOMEventListener STDMETHODIMP CSVGSwatchesDlg::handleEvent(ILDOMEvent* evt) { BSTR btype; evt->get_type(&btype); _bstr_t type = _bstr_t(btype, false); // BOOL bUpdate = FALSE; if (!wcscmp(type, L"DOMNodeInserted")) { RemoveEventListeners(); BuildItems(); AddEventListeners(); } else if (!wcscmp(type, L"DOMNodeRemovedFromDocument")) { CComQIPtr<ILDOMMutationEvent> mut = evt; CComPtr<ILDOMEventTarget> target; mut->get_target(&target); CComQIPtr<ILDOMNode> node = target; for (int i = 0; i < m_listView.m_items.GetSize(); i++) { if ((ILDOMElement*)m_listView.m_items[i]->m_element == node) { CComQIPtr<ILDOMEventTarget> eventTarget = (ILDOMElement*)m_listView.m_items[i]->m_element; eventTarget->removeEventListener(L"DOMNodeRemovedFromDocument", (ILDOMEventListener*)this, VARIANT_FALSE); m_listView.DeleteItem(i); break; } } } else// if (!wcscmp(type, L"DOMAttrModified") || // !wcscmp(type, L"DOMCharacterDataModified")) { CComQIPtr<ILDOMMutationEvent> mut = evt; CComPtr<ILDOMEventTarget> target; mut->get_target(&target); CComQIPtr<ILDOMNode> node = target; for (int i = 0; i < m_listView.m_items.GetSize(); i++) { if ((ILDOMElement*)m_listView.m_items[i]->m_element == node) { if (m_listView.m_items[i]->m_thumbnailBitmap) { DeleteObject(m_listView.m_items[i]->m_thumbnailBitmap); m_listView.m_items[i]->m_thumbnailBitmap = NULL; m_listView.m_items[i]->m_thumbnailBits = NULL; } if (m_listView.m_hWnd) { m_listView.Invalidate(); } break; } } } return S_OK; }