void initializeCB(AtkObject *aAtkObj, gpointer aData) { NS_ASSERTION((IS_MAI_OBJECT(aAtkObj)), "Invalid AtkObject"); NS_ASSERTION(aData, "Invalid Data to init AtkObject"); if (!aAtkObj || !aData) return; /* call parent init function */ /* AtkObjectClass has not a "initialize" function now, * maybe it has later */ if (ATK_OBJECT_CLASS(parent_class)->initialize) ATK_OBJECT_CLASS(parent_class)->initialize(aAtkObj, aData); /* initialize object */ MAI_ATK_OBJECT(aAtkObj)->accWrap = static_cast<nsAccessibleWrap*>(aData); #ifdef MAI_LOGGING ++sMaiAtkObjCreated; #endif MAI_LOG_DEBUG(("MaiAtkObj Create obj=%p for AccWrap=%p, all=%d, left=%d\n", (void*)aAtkObj, (void*)aData, sMaiAtkObjCreated, (sMaiAtkObjCreated-sMaiAtkObjDeleted))); }
void nsAccessibleWrap::ShutdownAtkObject() { if (mAtkObject) { if (IS_MAI_OBJECT(mAtkObject)) { MAI_ATK_OBJECT(mAtkObject)->accWrap = nsnull; } SetMaiHyperlink(nsnull); g_object_unref(mAtkObject); mAtkObject = nsnull; } }
void finalizeCB(GObject *aObj) { if (!IS_MAI_OBJECT(aObj)) return; NS_ASSERTION(MAI_ATK_OBJECT(aObj)->accWrap == nsnull, "AccWrap NOT null"); #ifdef MAI_LOGGING ++sMaiAtkObjDeleted; #endif MAI_LOG_DEBUG(("MaiAtkObj Delete obj=%p, all=%d, left=%d\n", (void*)aObj, sMaiAtkObjCreated, (sMaiAtkObjCreated-sMaiAtkObjDeleted))); // call parent finalize function // finalize of GObjectClass will unref the accessible parent if has if (G_OBJECT_CLASS (parent_class)->finalize) G_OBJECT_CLASS (parent_class)->finalize(aObj); }
nsAccessibleWrap::~nsAccessibleWrap() { #ifdef MAI_LOGGING ++mAccWrapDeleted; #endif MAI_LOG_DEBUG(("==nsAccessibleWrap deleting: this=%p,total=%d left=%d\n", (void*)this, mAccWrapDeleted, (mAccWrapCreated-mAccWrapDeleted))); if (mMaiAtkObject) { MAI_ATK_OBJECT(mMaiAtkObject)->accWrap = nsnull; g_object_unref(mMaiAtkObject); } if (mInterfaces) { for (int index = 0; index < MAI_INTERFACE_NUM; ++index) delete mInterfaces[index]; delete [] mInterfaces; } }
// Check if aAtkObj is a valid MaiAtkObject, and return the nsAccessibleWrap // for it. nsAccessibleWrap *GetAccessibleWrap(AtkObject *aAtkObj) { NS_ENSURE_TRUE(IS_MAI_OBJECT(aAtkObj), nsnull); nsAccessibleWrap *tmpAccWrap = MAI_ATK_OBJECT(aAtkObj)->accWrap; // Check if AccessibleWrap was deconstructed if (tmpAccWrap == nsnull) { return nsnull; } NS_ENSURE_TRUE(tmpAccWrap->GetAtkObject() == aAtkObj, nsnull); nsRefPtr<nsApplicationAccessibleWrap> appAccWrap = nsAccessNode::GetApplicationAccessible(); nsAccessibleWrap* tmpAppAccWrap = static_cast<nsAccessibleWrap*>(appAccWrap.get()); if (tmpAppAccWrap != tmpAccWrap && !tmpAccWrap->IsValidObject()) return nsnull; return tmpAccWrap; }