void AXObjectCache::postPlatformNotification(AccessibilityObject* coreObject, AXNotification notification) { AtkObject* axObject = coreObject->wrapper(); if (!axObject) return; switch (notification) { case AXCheckedStateChanged: if (!coreObject->isCheckboxOrRadio() && !coreObject->isSwitch()) return; atk_object_notify_state_change(axObject, ATK_STATE_CHECKED, coreObject->isChecked()); break; case AXSelectedChildrenChanged: case AXMenuListValueChanged: // Accessible focus claims should not be made if the associated widget is not focused. if (notification == AXMenuListValueChanged && coreObject->isMenuList() && coreObject->isFocused()) { g_signal_emit_by_name(axObject, "focus-event", true); atk_object_notify_state_change(axObject, ATK_STATE_FOCUSED, true); } notifyChildrenSelectionChange(coreObject); break; case AXValueChanged: if (ATK_IS_VALUE(axObject)) { AtkPropertyValues propertyValues; propertyValues.property_name = "accessible-value"; memset(&propertyValues.new_value, 0, sizeof(GValue)); #if ATK_CHECK_VERSION(2,11,92) double value; atk_value_get_value_and_text(ATK_VALUE(axObject), &value, nullptr); g_value_set_double(g_value_init(&propertyValues.new_value, G_TYPE_DOUBLE), value); #else atk_value_get_current_value(ATK_VALUE(axObject), &propertyValues.new_value); #endif g_signal_emit_by_name(ATK_OBJECT(axObject), "property-change::accessible-value", &propertyValues, NULL); } break; case AXInvalidStatusChanged: atk_object_notify_state_change(axObject, ATK_STATE_INVALID_ENTRY, coreObject->invalidStatus() != "false"); break; default: break; } }
void AXObjectCache::postPlatformNotification(AccessibilityObject* coreObject, AXNotification notification) { AtkObject* axObject = coreObject->wrapper(); if (!axObject) return; switch (notification) { case AXCheckedStateChanged: if (!coreObject->isCheckboxOrRadio() && !coreObject->isSwitch()) return; atk_object_notify_state_change(axObject, ATK_STATE_CHECKED, coreObject->isChecked()); break; case AXSelectedChildrenChanged: case AXMenuListValueChanged: // Accessible focus claims should not be made if the associated widget is not focused. if (notification == AXMenuListValueChanged && coreObject->isMenuList() && coreObject->isFocused()) { g_signal_emit_by_name(axObject, "focus-event", true); atk_object_notify_state_change(axObject, ATK_STATE_FOCUSED, true); } notifyChildrenSelectionChange(coreObject); break; case AXValueChanged: if (ATK_IS_VALUE(axObject)) { AtkPropertyValues propertyValues; propertyValues.property_name = "accessible-value"; memset(&propertyValues.new_value, 0, sizeof(GValue)); #if ATK_CHECK_VERSION(2,11,92) double value; atk_value_get_value_and_text(ATK_VALUE(axObject), &value, nullptr); g_value_set_double(g_value_init(&propertyValues.new_value, G_TYPE_DOUBLE), value); #else atk_value_get_current_value(ATK_VALUE(axObject), &propertyValues.new_value); #endif g_signal_emit_by_name(ATK_OBJECT(axObject), "property-change::accessible-value", &propertyValues, NULL); } break; case AXInvalidStatusChanged: atk_object_notify_state_change(axObject, ATK_STATE_INVALID_ENTRY, coreObject->invalidStatus() != "false"); break; case AXElementBusyChanged: atk_object_notify_state_change(axObject, ATK_STATE_BUSY, coreObject->isBusy()); break; case AXCurrentChanged: atk_object_notify_state_change(axObject, ATK_STATE_ACTIVE, coreObject->currentState() != AccessibilityCurrentState::False); break; case AXRowExpanded: atk_object_notify_state_change(axObject, ATK_STATE_EXPANDED, true); break; case AXRowCollapsed: atk_object_notify_state_change(axObject, ATK_STATE_EXPANDED, false); break; case AXExpandedChanged: atk_object_notify_state_change(axObject, ATK_STATE_EXPANDED, coreObject->isExpanded()); break; case AXDisabledStateChanged: { bool enabledState = coreObject->isEnabled(); atk_object_notify_state_change(axObject, ATK_STATE_ENABLED, enabledState); atk_object_notify_state_change(axObject, ATK_STATE_SENSITIVE, enabledState); break; } case AXPressedStateChanged: atk_object_notify_state_change(axObject, ATK_STATE_PRESSED, coreObject->isPressed()); break; case AXReadOnlyStatusChanged: #if ATK_CHECK_VERSION(2,15,3) atk_object_notify_state_change(axObject, ATK_STATE_READ_ONLY, !coreObject->canSetValueAttribute()); #endif break; case AXRequiredStatusChanged: atk_object_notify_state_change(axObject, ATK_STATE_REQUIRED, coreObject->isRequired()); break; case AXActiveDescendantChanged: if (AccessibilityObject* descendant = coreObject->activeDescendant()) platformHandleFocusedUIElementChanged(nullptr, descendant->node()); break; default: break; } }