static void getMinimumIncrementCB(AtkValue *obj, GValue *minimumIncrement) { ProxyAccessible* proxy = nullptr; AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(obj)); if (!accWrap) { proxy = GetProxy(ATK_OBJECT(obj)); if (!proxy) { return; } } memset(minimumIncrement, 0, sizeof (GValue)); double accValue = accWrap ? accWrap->Step() : proxy->Step(); if (IsNaN(accValue)) accValue = 0; // zero if the minimum increment is undefined g_value_init(minimumIncrement, G_TYPE_DOUBLE); g_value_set_double(minimumIncrement, accValue); }
void DocAccessibleWrap::CacheFocusPath(AccessibleWrap* aAccessible) { mFocusPath.Clear(); if (IPCAccessibilityActive()) { DocAccessibleChild* ipcDoc = IPCDoc(); nsTArray<BatchData> cacheData; for (AccessibleWrap* acc = aAccessible; acc && acc != this->Parent(); acc = static_cast<AccessibleWrap*>(acc->Parent())) { auto uid = acc->IsDoc() && acc->AsDoc()->IPCDoc() ? 0 : reinterpret_cast<uint64_t>(acc->UniqueID()); nsAutoString name; acc->Name(name); nsAutoString textValue; acc->Value(textValue); nsAutoString nodeID; acc->WrapperDOMNodeID(nodeID); nsCOMPtr<nsIPersistentProperties> props = acc->Attributes(); nsTArray<Attribute> attributes; nsAccUtils::PersistentPropertiesToArray(props, &attributes); cacheData.AppendElement(BatchData( acc->Document()->IPCDoc(), uid, acc->State(), acc->Bounds(), acc->ActionCount(), name, textValue, nodeID, acc->CurValue(), acc->MinValue(), acc->MaxValue(), acc->Step(), attributes)); mFocusPath.Put(acc->UniqueID(), acc); } ipcDoc->SendBatch(eBatch_FocusPath, cacheData); } else if (SessionAccessibility* sessionAcc = SessionAccessibility::GetInstanceFor(this)) { nsTArray<AccessibleWrap*> accessibles; for (AccessibleWrap* acc = aAccessible; acc && acc != this->Parent(); acc = static_cast<AccessibleWrap*>(acc->Parent())) { accessibles.AppendElement(acc); } sessionAcc->ReplaceFocusPathCache(accessibles); } }