//--------------------------------------------------------------------------- // NPP_SetWindow: //--------------------------------------------------------------------------- NPError NP_LOADDS NPP_SetWindow(NPP pInstance, NPWindow * pNPWindow) { if(pInstance == NULL) { dbgOut1("NPP_SetWindow returns NPERR_INVALID_INSTANCE_ERROR"); return NPERR_INVALID_INSTANCE_ERROR; } if(pNPWindow == NULL) { dbgOut1("NPP_SetWindow returns NPERR_GENERIC_ERROR"); return NPERR_GENERIC_ERROR; } HWND hWnd = (HWND)(DWORD)pNPWindow->window; CPlugin * pPlugin = (CPlugin *)pInstance->pdata; assert(pPlugin != NULL); if(pPlugin == NULL) { dbgOut1("NPP_SetWindow returns NPERR_GENERIC_ERROR"); return NPERR_GENERIC_ERROR; } if((hWnd == NULL) && (pPlugin->getWindow() == NULL)) // spurious entry { dbgOut1("NPP_SetWindow just returns with NPERR_NO_ERROR"); return NPERR_NO_ERROR; } if((hWnd == NULL) && (pPlugin->getWindow() != NULL)) { // window went away dbgOut1("NPP_SetWindow, going away..."); pPlugin->shut(); return NPERR_NO_ERROR; } if((pPlugin->getWindow() == NULL) && (hWnd != NULL)) { // First time in -- no window created by plugin yet dbgOut1("NPP_SetWindow, first time"); if(!pPlugin->init(hWnd)) { delete pPlugin; pPlugin = NULL; return NPERR_MODULE_LOAD_FAILED_ERROR; } } if((pPlugin->getWindow() != NULL) && (hWnd != NULL)) { // Netscape window has been resized dbgOut1("NPP_SetWindow, resizing"); pPlugin->resize(); } return NPERR_NO_ERROR; }
// here is the place to clean up and destroy the CPlugin object NPError NPP_Destroy (NPP instance, NPSavedData** save) { if(instance == NULL) return NPERR_INVALID_INSTANCE_ERROR; NPError rv = NPERR_NO_ERROR; CPlugin * pPlugin = (CPlugin *)instance->pdata; if(pPlugin != NULL) { pPlugin->shut(); delete pPlugin; } return rv; }
//--------------------------------------------------------------------------- // NPP_Destroy: //--------------------------------------------------------------------------- NPError NP_LOADDS NPP_Destroy(NPP pInstance, NPSavedData** save) { dbgOut1("NPP_Destroy"); if(pInstance == NULL) return NPERR_INVALID_INSTANCE_ERROR; CPlugin * pPlugin = (CPlugin *)pInstance->pdata; if(pPlugin != NULL) { pPlugin->shut(); delete pPlugin; } return NPERR_NO_ERROR; }