[ATK] Utilize new AtkValue interface coming in ATK 2.11.92
authork.czech@samsung.com <k.czech@samsung.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 26 Mar 2014 10:16:46 +0000 (10:16 +0000)
committerk.czech@samsung.com <k.czech@samsung.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 26 Mar 2014 10:16:46 +0000 (10:16 +0000)
https://bugs.webkit.org/show_bug.cgi?id=130575

Reviewed by Mario Sanchez Prada.

Source/WebCore:

ATK 2.11.92 introduces some new API and deprecates an old one.
Adjust current implementation to meet requirements of the new API.

No new tests. Covered by existing ones.

* accessibility/atk/AXObjectCacheAtk.cpp:
(WebCore::AXObjectCache::postPlatformNotification):
* accessibility/atk/WebKitAccessibleInterfaceValue.cpp:
(webkitAccessibleSetNewValue):
(webkitAccessibleGetIncrementValue):
(webkitAccessibleGetValueAndText):
(webkitAccessibleGetIncrement):
(webkitAccessibleSetValue):
(webkitAccessibleGetRange):
(webkitAccessibleValueSetCurrentValue):
(webkitAccessibleValueGetMinimumIncrement):
(webkitAccessibleValueInterfaceInit):

Tools:

Change ATK version to 2.11.92. Adjust current implementation.

* DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
(AccessibilityUIElement::intValue):
(AccessibilityUIElement::minValue):
(AccessibilityUIElement::maxValue):
* WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
(WTR::AccessibilityUIElement::intValue):
(WTR::AccessibilityUIElement::minValue):
(WTR::AccessibilityUIElement::maxValue):
* efl/jhbuild.modules:
* gtk/jhbuild.modules:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166288 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/accessibility/atk/AXObjectCacheAtk.cpp
Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceValue.cpp
Tools/ChangeLog
Tools/DumpRenderTree/atk/AccessibilityUIElementAtk.cpp
Tools/WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp
Tools/efl/jhbuild.modules
Tools/gtk/jhbuild.modules

index 0ed981d..c629fe1 100644 (file)
@@ -1,3 +1,28 @@
+2014-03-26  Krzysztof Czech  <k.czech@samsung.com>
+
+        [ATK] Utilize new AtkValue interface coming in ATK 2.11.92
+        https://bugs.webkit.org/show_bug.cgi?id=130575
+
+        Reviewed by Mario Sanchez Prada.
+
+        ATK 2.11.92 introduces some new API and deprecates an old one.
+        Adjust current implementation to meet requirements of the new API.
+
+        No new tests. Covered by existing ones.
+
+        * accessibility/atk/AXObjectCacheAtk.cpp:
+        (WebCore::AXObjectCache::postPlatformNotification):
+        * accessibility/atk/WebKitAccessibleInterfaceValue.cpp:
+        (webkitAccessibleSetNewValue):
+        (webkitAccessibleGetIncrementValue):
+        (webkitAccessibleGetValueAndText):
+        (webkitAccessibleGetIncrement):
+        (webkitAccessibleSetValue):
+        (webkitAccessibleGetRange):
+        (webkitAccessibleValueSetCurrentValue):
+        (webkitAccessibleValueGetMinimumIncrement):
+        (webkitAccessibleValueInterfaceInit):
+
 2014-03-26  Zan Dobersek  <zdobersek@igalia.com>
 
         Unreviewed. Removing the remaining Automake cruft.
index 5d62a98..5917109 100644 (file)
@@ -208,7 +208,13 @@ void AXObjectCache::postPlatformNotification(AccessibilityObject* coreObject, AX
             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);
         }
index 19c6cf0..184ed4b 100644 (file)
@@ -26,6 +26,7 @@
 #include "HTMLNames.h"
 #include "WebKitAccessibleUtil.h"
 #include "WebKitAccessibleWrapperAtk.h"
+#include <wtf/text/CString.h>
 
 using namespace WebCore;
 
@@ -37,6 +38,83 @@ static AccessibilityObject* core(AtkValue* value)
     return webkitAccessibleGetAccessibilityObject(WEBKIT_ACCESSIBLE(value));
 }
 
+static bool webkitAccessibleSetNewValue(AtkValue* coreValue, const gdouble newValue)
+{
+    AccessibilityObject* coreObject = core(coreValue);
+    if (!coreObject->canSetValueAttribute())
+        return FALSE;
+
+    // Check value against range limits
+    double value;
+    value = std::max(static_cast<double>(coreObject->minValueForRange()), newValue);
+    value = std::min(static_cast<double>(coreObject->maxValueForRange()), newValue);
+
+    coreObject->setValue(String::number(value));
+    return TRUE;
+}
+
+static float webkitAccessibleGetIncrementValue(AccessibilityObject* coreObject)
+{
+    if (!coreObject->getAttribute(HTMLNames::stepAttr).isEmpty())
+        return coreObject->stepValueForRange();
+
+    // If 'step' attribute is not defined, WebCore assumes a 5% of the
+    // range between minimum and maximum values. Implicit value of step should be one or larger.
+    float step = (coreObject->maxValueForRange() - coreObject->minValueForRange()) * 0.05;
+    return step < 1 ? 1 : step;
+}
+
+#if ATK_CHECK_VERSION(2,11,92)
+static void webkitAccessibleGetValueAndText(AtkValue* value, gdouble* currentValue, gchar** alternativeText)
+{
+    g_return_if_fail(ATK_VALUE(value));
+    returnIfWebKitAccessibleIsInvalid(WEBKIT_ACCESSIBLE(value));
+
+    AccessibilityObject* coreObject = core(value);
+    if (!coreObject)
+        return;
+
+    if (currentValue)
+        *currentValue = coreObject->valueForRange();
+    if (alternativeText)
+        *alternativeText = g_strdup_printf("%s", coreObject->valueDescription().utf8().data());
+}
+
+static double webkitAccessibleGetIncrement(AtkValue* value)
+{
+    g_return_val_if_fail(ATK_VALUE(value), 0);
+    returnValIfWebKitAccessibleIsInvalid(WEBKIT_ACCESSIBLE(value), 0);
+
+    AccessibilityObject* coreObject = core(value);
+    if (!coreObject)
+        return 0;
+
+    return webkitAccessibleGetIncrementValue(coreObject);
+}
+
+static void webkitAccessibleSetValue(AtkValue* value, const gdouble newValue)
+{
+    g_return_if_fail(ATK_VALUE(value));
+    returnIfWebKitAccessibleIsInvalid(WEBKIT_ACCESSIBLE(value));
+
+    webkitAccessibleSetNewValue(value, newValue);
+}
+
+static AtkRange* webkitAccessibleGetRange(AtkValue* value)
+{
+    g_return_val_if_fail(ATK_VALUE(value), nullptr);
+    returnValIfWebKitAccessibleIsInvalid(WEBKIT_ACCESSIBLE(value), nullptr);
+
+    AccessibilityObject* coreObject = core(value);
+    if (!coreObject)
+        return nullptr;
+
+    gdouble minValue = coreObject->minValueForRange();
+    gdouble maxValue = coreObject->maxValueForRange();
+    gchar* valueDescription = g_strdup_printf("%s", coreObject->valueDescription().utf8().data());
+    return atk_range_new(minValue, maxValue, valueDescription);
+}
+#else
 static void webkitAccessibleValueGetCurrentValue(AtkValue* value, GValue* gValue)
 {
     g_return_if_fail(ATK_VALUE(value));
@@ -92,16 +170,7 @@ static gboolean webkitAccessibleValueSetCurrentValue(AtkValue* value, const GVal
     else
         return FALSE;
 
-    AccessibilityObject* coreObject = core(value);
-    if (!coreObject->canSetValueAttribute())
-        return FALSE;
-
-    // Check value against range limits
-    newValue = std::max(static_cast<double>(coreObject->minValueForRange()), newValue);
-    newValue = std::min(static_cast<double>(coreObject->maxValueForRange()), newValue);
-
-    coreObject->setValue(String::number(newValue));
-    return TRUE;
+    return webkitAccessibleSetNewValue(value, newValue);
 }
 
 static void webkitAccessibleValueGetMinimumIncrement(AtkValue* value, GValue* gValue)
@@ -113,24 +182,24 @@ static void webkitAccessibleValueGetMinimumIncrement(AtkValue* value, GValue* gV
     g_value_init(gValue, G_TYPE_FLOAT);
 
     AccessibilityObject* coreObject = core(value);
-    if (!coreObject->getAttribute(HTMLNames::stepAttr).isEmpty()) {
-        g_value_set_float(gValue, coreObject->stepValueForRange());
-        return;
-    }
-
-    // If 'step' attribute is not defined, WebCore assumes a 5% of the
-    // range between minimum and maximum values. Implicit value of step should be one or larger.
-    float step = (coreObject->maxValueForRange() - coreObject->minValueForRange()) * 0.05;
-    g_value_set_float(gValue, step < 1 ? 1 : step);
+    g_value_set_float(gValue, webkitAccessibleGetIncrementValue(coreObject));
 }
+#endif
 
 void webkitAccessibleValueInterfaceInit(AtkValueIface* iface)
 {
+#if ATK_CHECK_VERSION(2,11,92)
+    iface->get_value_and_text = webkitAccessibleGetValueAndText;
+    iface->get_increment = webkitAccessibleGetIncrement;
+    iface->set_value = webkitAccessibleSetValue;
+    iface->get_range = webkitAccessibleGetRange;
+#else
     iface->get_current_value = webkitAccessibleValueGetCurrentValue;
     iface->get_maximum_value = webkitAccessibleValueGetMaximumValue;
     iface->get_minimum_value = webkitAccessibleValueGetMinimumValue;
     iface->set_current_value = webkitAccessibleValueSetCurrentValue;
     iface->get_minimum_increment = webkitAccessibleValueGetMinimumIncrement;
+#endif
 }
 
 #endif
index 2da63c4..cf4d05a 100644 (file)
@@ -1,3 +1,23 @@
+2014-03-26  Krzysztof Czech  <k.czech@samsung.com>
+
+        [ATK] Utilize new AtkValue interface coming in ATK 2.11.92
+        https://bugs.webkit.org/show_bug.cgi?id=130575
+
+        Reviewed by Mario Sanchez Prada.
+
+        Change ATK version to 2.11.92. Adjust current implementation.
+
+        * DumpRenderTree/atk/AccessibilityUIElementAtk.cpp:
+        (AccessibilityUIElement::intValue):
+        (AccessibilityUIElement::minValue):
+        (AccessibilityUIElement::maxValue):
+        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
+        (WTR::AccessibilityUIElement::intValue):
+        (WTR::AccessibilityUIElement::minValue):
+        (WTR::AccessibilityUIElement::maxValue):
+        * efl/jhbuild.modules:
+        * gtk/jhbuild.modules:
+
 2014-03-12  Philippe Normand  <pnormand@igalia.com>
 
         [GTK] The gnumake package is no longer needed in jhbuild
index 8cc46f6..4d083fe 100644 (file)
 
 namespace {
 
+#if ATK_CHECK_VERSION(2,11,92)
+enum RangeLimit {
+    RangeLimitMinimum,
+    RangeLimitMaximum
+};
+#endif
+
 enum AtkAttributeType {
     ObjectAttributeType,
     TextAttributeType
@@ -550,11 +557,40 @@ JSStringRef indexRangeInTable(PlatformUIElement element, bool isRowRange)
     return JSStringCreateWithUTF8CString(rangeString.get());
 }
 
+#if ATK_CHECK_VERSION(2,11,92)
+static double rangeMinMaxValue(AtkValue* atkValue, RangeLimit rangeLimit)
+{
+    AtkRange* range = atk_value_get_range(atkValue);
+    if (!range)
+        return 0;
+
+    double rangeValue = 0;
+    switch (rangeLimit) {
+    case RangeLimitMinimum:
+        rangeValue = atk_range_get_lower_limit(range);
+        break;
+    case RangeLimitMaximum:
+        rangeValue = atk_range_get_upper_limit(range);
+        break;
+    };
+
+    atk_range_free(range);
+    return rangeValue;
+}
+#endif
+
 void alterCurrentValue(PlatformUIElement element, int factor)
 {
     if (!ATK_IS_VALUE(element))
         return;
 
+#if ATK_CHECK_VERSION(2,11,92)
+    double currentValue;
+    atk_value_get_value_and_text(ATK_VALUE(element), &currentValue, nullptr);
+
+    double increment = atk_value_get_increment(ATK_VALUE(element));
+    atk_value_set_value(ATK_VALUE(element), currentValue + factor * increment);
+#else
     GValue currentValue = G_VALUE_INIT;
     atk_value_get_current_value(ATK_VALUE(element), &currentValue);
 
@@ -570,6 +606,7 @@ void alterCurrentValue(PlatformUIElement element, int factor)
     g_value_unset(&newValue);
     g_value_unset(&increment);
     g_value_unset(&currentValue);
+#endif
 }
 
 } // namespace
@@ -984,11 +1021,17 @@ double AccessibilityUIElement::intValue() const
         return 0;
 
     if (ATK_IS_VALUE(m_element)) {
+#if ATK_CHECK_VERSION(2,11,92)
+        double value;
+        atk_value_get_value_and_text(ATK_VALUE(m_element), &value, nullptr);
+        return value;
+#else
         GValue value = G_VALUE_INIT;
         atk_value_get_current_value(ATK_VALUE(m_element), &value);
         if (!G_VALUE_HOLDS_FLOAT(&value))
             return 0;
         return g_value_get_float(&value);
+#endif
     }
 
     // Consider headings as an special case when returning the "int value" of
@@ -1009,24 +1052,30 @@ double AccessibilityUIElement::minValue()
 {
     if (!ATK_IS_VALUE(m_element))
         return 0;
-
+#if ATK_CHECK_VERSION(2,11,92)
+    return rangeMinMaxValue(ATK_VALUE(m_element), RangeLimitMinimum);
+#else
     GValue value = G_VALUE_INIT;
     atk_value_get_minimum_value(ATK_VALUE(m_element), &value);
     if (!G_VALUE_HOLDS_FLOAT(&value))
         return 0;
     return g_value_get_float(&value);
+#endif
 }
 
 double AccessibilityUIElement::maxValue()
 {
     if (!ATK_IS_VALUE(m_element))
         return 0;
-
+#if ATK_CHECK_VERSION(2,11,92)
+    return rangeMinMaxValue(ATK_VALUE(m_element), RangeLimitMaximum);
+#else
     GValue value = G_VALUE_INIT;
     atk_value_get_maximum_value(ATK_VALUE(m_element), &value);
     if (!G_VALUE_HOLDS_FLOAT(&value))
         return 0;
     return g_value_get_float(&value);
+#endif
 }
 
 JSStringRef AccessibilityUIElement::valueDescription()
index 1b776d8..7193d0f 100644 (file)
@@ -51,6 +51,13 @@ namespace WTR {
 
 namespace {
 
+#if ATK_CHECK_VERSION(2,11,92)
+enum RangeLimit {
+    RangeLimitMinimum,
+    RangeLimitMaximum
+};
+#endif
+
 enum AtkAttributeType {
     ObjectAttributeType,
     TextAttributeType
@@ -262,6 +269,13 @@ void alterCurrentValue(PlatformUIElement element, int factor)
     if (!ATK_IS_VALUE(element.get()))
         return;
 
+#if ATK_CHECK_VERSION(2,11,92)
+    double currentValue;
+    atk_value_get_value_and_text(ATK_VALUE(element.get()), &currentValue, nullptr);
+
+    double increment = atk_value_get_increment(ATK_VALUE(element.get()));
+    atk_value_set_value(ATK_VALUE(element.get()), currentValue + factor * increment);
+#else
     GValue currentValue = G_VALUE_INIT;
     atk_value_get_current_value(ATK_VALUE(element.get()), &currentValue);
 
@@ -277,6 +291,7 @@ void alterCurrentValue(PlatformUIElement element, int factor)
     g_value_unset(&newValue);
     g_value_unset(&increment);
     g_value_unset(&currentValue);
+#endif
 }
 
 gchar* replaceCharactersForResults(gchar* str)
@@ -594,6 +609,28 @@ static JSValueRef convertToJSObjectArray(const Vector<RefPtr<AccessibilityUIElem
 }
 #endif
 
+#if ATK_CHECK_VERSION(2,11,92)
+static double rangeMinMaxValue(AtkValue* atkValue, RangeLimit rangeLimit)
+{
+    AtkRange* range = atk_value_get_range(atkValue);
+    if (!range)
+        return 0;
+
+    double rangeValue = 0;
+    switch (rangeLimit) {
+    case RangeLimitMinimum:
+        rangeValue = atk_range_get_lower_limit(range);
+        break;
+    case RangeLimitMaximum:
+        rangeValue = atk_range_get_upper_limit(range);
+        break;
+    };
+
+    atk_range_free(range);
+    return rangeValue;
+}
+#endif
+
 } // namespace
 
 AccessibilityUIElement::AccessibilityUIElement(PlatformUIElement element)
@@ -1196,11 +1233,17 @@ double AccessibilityUIElement::intValue() const
         return 0;
 
     if (ATK_IS_VALUE(m_element.get())) {
+#if ATK_CHECK_VERSION(2,11,92)
+        double value;
+        atk_value_get_value_and_text(ATK_VALUE(m_element.get()), &value, nullptr);
+        return value;
+#else
         GValue value = G_VALUE_INIT;
         atk_value_get_current_value(ATK_VALUE(m_element.get()), &value);
         if (!G_VALUE_HOLDS_FLOAT(&value))
             return 0;
         return g_value_get_float(&value);
+#endif
     }
 
     // Consider headings as an special case when returning the "int value" of
@@ -1221,13 +1264,16 @@ double AccessibilityUIElement::minValue()
 {
     if (!ATK_IS_VALUE(m_element.get()))
         return 0;
-
+#if ATK_CHECK_VERSION(2,11,92)
+    return rangeMinMaxValue(ATK_VALUE(m_element.get()), RangeLimitMinimum);
+#else
     GValue value = G_VALUE_INIT;
     atk_value_get_minimum_value(ATK_VALUE(m_element.get()), &value);
     if (!G_VALUE_HOLDS_FLOAT(&value))
         return 0;
 
     return g_value_get_float(&value);
+#endif
 }
 
 double AccessibilityUIElement::maxValue()
@@ -1235,12 +1281,16 @@ double AccessibilityUIElement::maxValue()
     if (!ATK_IS_VALUE(m_element.get()))
         return 0;
 
+#if ATK_CHECK_VERSION(2,11,92)
+    return rangeMinMaxValue(ATK_VALUE(m_element.get()), RangeLimitMaximum);
+#else
     GValue value = G_VALUE_INIT;
     atk_value_get_maximum_value(ATK_VALUE(m_element.get()), &value);
     if (!G_VALUE_HOLDS_FLOAT(&value))
         return 0;
 
     return g_value_get_float(&value);
+#endif
 }
 
 JSRetainPtr<JSStringRef> AccessibilityUIElement::valueDescription()
index c94258d..98ed69d 100644 (file)
   <autotools id="atk"
              autogen-sh="configure"
              autogenargs="--disable-introspection">
-    <branch module="pub/GNOME/sources/atk/2.11/atk-2.11.90.tar.xz" version="2.11.90"
+    <branch module="pub/GNOME/sources/atk/2.11/atk-2.11.92.tar.xz" version="2.11.92"
             repo="ftp.gnome.org"
-            hash="sha256:44e33abad64419b92fd2ae45fb0d37b9faab6b53640a1a54e068af6fccad4417"/>
+            hash="sha256:71e9880f1b704dfd98806643b8dc66a5df4fcef155cf5944184d8e8f66dac689"/>
   </autotools>
 
 </moduleset>
index a300ae1..f9a1ca7 100644 (file)
   <autotools id="atk"
              autogen-sh="configure"
              autogenargs="--disable-introspection">
-    <branch module="pub/GNOME/sources/atk/2.11/atk-2.11.90.tar.xz" version="2.11.90"
+    <branch module="pub/GNOME/sources/atk/2.11/atk-2.11.92.tar.xz" version="2.11.92"
             repo="ftp.gnome.org"
-            hash="sha256:44e33abad64419b92fd2ae45fb0d37b9faab6b53640a1a54e068af6fccad4417"/>
+            hash="sha256:71e9880f1b704dfd98806643b8dc66a5df4fcef155cf5944184d8e8f66dac689"/>
   </autotools>
 
   <autotools id="at-spi2-core"