[ATK] Use a smart pointer for AccessibilityObject wrapper and remove GTK specific...
[WebKit-https.git] / Source / WebCore / accessibility / atk / AXObjectCacheAtk.cpp
index 3ac0228..bb183d1 100644 (file)
@@ -38,7 +38,7 @@ namespace WebCore {
 
 void AXObjectCache::detachWrapper(AccessibilityObject* obj, AccessibilityDetachmentType detachmentType)
 {
-    AtkObject* wrapper = obj->wrapper();
+    auto* wrapper = obj->wrapper();
     ASSERT(wrapper);
 
     // If an object is being detached NOT because of the AXObjectCache being destroyed,
@@ -66,9 +66,8 @@ void AXObjectCache::detachWrapper(AccessibilityObject* obj, AccessibilityDetachm
 
 void AXObjectCache::attachWrapper(AccessibilityObject* obj)
 {
-    AtkObject* atkObj = ATK_OBJECT(webkitAccessibleNew(obj));
-    obj->setWrapper(atkObj);
-    g_object_unref(atkObj);
+    GRefPtr<WebKitAccessible> wrapper = adoptGRef(webkitAccessibleNew(obj));
+    obj->setWrapper(wrapper.get());
 
     // If an object is being attached and we are not in the middle of a layout update, then
     // we should report ATs by emitting the children-changed::add signal from the parent.
@@ -94,12 +93,12 @@ void AXObjectCache::attachWrapper(AccessibilityObject* obj)
         return;
 
     // Look for the right object to emit the signal from.
-    AtkObject* atkParent = coreParent->wrapper();
+    auto* atkParent = coreParent->wrapper();
     if (!atkParent)
         return;
 
     size_t index = coreParent->children(false).find(obj);
-    g_signal_emit_by_name(atkParent, "children-changed::add", index != notFound ? index : -1, atkObj);
+    g_signal_emit_by_name(atkParent, "children-changed::add", index != notFound ? index : -1, wrapper.get());
 }
 
 static AccessibilityObject* getListObject(AccessibilityObject* object)
@@ -168,24 +167,24 @@ static void notifyChildrenSelectionChange(AccessibilityObject* object)
     if (oldListObject.get() != listObject)
         oldFocusedObject.get() = nullptr;
 
-    AtkObject* axItem = item ? item->wrapper() : nullptr;
-    AtkObject* axOldFocusedObject = oldFocusedObject.get() ? oldFocusedObject.get()->wrapper() : nullptr;
+    WebKitAccessible* axItem = item ? item->wrapper() : nullptr;
+    WebKitAccessible* axOldFocusedObject = oldFocusedObject.get() ? oldFocusedObject.get()->wrapper() : nullptr;
 
     // Old focused object just lost focus, so emit the events.
     if (axOldFocusedObject && axItem != axOldFocusedObject) {
         g_signal_emit_by_name(axOldFocusedObject, "focus-event", false);
-        atk_object_notify_state_change(axOldFocusedObject, ATK_STATE_FOCUSED, false);
+        atk_object_notify_state_change(ATK_OBJECT(axOldFocusedObject), ATK_STATE_FOCUSED, false);
     }
 
     // Emit needed events for the currently (un)selected item.
     if (axItem) {
         bool isSelected = item->isSelected();
-        atk_object_notify_state_change(axItem, ATK_STATE_SELECTED, isSelected);
+        atk_object_notify_state_change(ATK_OBJECT(axItem), ATK_STATE_SELECTED, isSelected);
         // When the selection changes in a collapsed widget such as a combo box
         // whose child menu is not showing, that collapsed widget retains focus.
         if (!object->isCollapsed()) {
             g_signal_emit_by_name(axItem, "focus-event", isSelected);
-            atk_object_notify_state_change(axItem, ATK_STATE_FOCUSED, isSelected);
+            atk_object_notify_state_change(ATK_OBJECT(axItem), ATK_STATE_FOCUSED, isSelected);
         }
     }
 
@@ -196,7 +195,7 @@ static void notifyChildrenSelectionChange(AccessibilityObject* object)
 
 void AXObjectCache::postPlatformNotification(AccessibilityObject* coreObject, AXNotification notification)
 {
-    AtkObject* axObject = coreObject->wrapper();
+    auto* axObject = ATK_OBJECT(coreObject->wrapper());
     if (!axObject)
         return;
 
@@ -231,7 +230,7 @@ void AXObjectCache::postPlatformNotification(AccessibilityObject* coreObject, AX
             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);
+            g_signal_emit_by_name(axObject, "property-change::accessible-value", &propertyValues, NULL);
         }
         break;
 
@@ -299,7 +298,7 @@ void AXObjectCache::nodeTextChangePlatformNotification(AccessibilityObject* obje
     if (!parentObject)
         return;
 
-    AtkObject* wrapper = parentObject->wrapper();
+    auto* wrapper = parentObject->wrapper();
     if (!wrapper || !ATK_IS_TEXT(wrapper))
         return;
 
@@ -349,7 +348,7 @@ void AXObjectCache::frameLoadingEventPlatformNotification(AccessibilityObject* o
     if (!object)
         return;
 
-    AtkObject* axObject = object->wrapper();
+    auto* axObject = ATK_OBJECT(object->wrapper());
     if (!axObject || !ATK_IS_DOCUMENT(axObject))
         return;
 
@@ -376,13 +375,15 @@ void AXObjectCache::platformHandleFocusedUIElementChanged(Node* oldFocusedNode,
 {
     RefPtr<AccessibilityObject> oldObject = getOrCreate(oldFocusedNode);
     if (oldObject) {
-        g_signal_emit_by_name(oldObject->wrapper(), "focus-event", false);
-        atk_object_notify_state_change(oldObject->wrapper(), ATK_STATE_FOCUSED, false);
+        auto* axObject = oldObject->wrapper();
+        g_signal_emit_by_name(axObject, "focus-event", false);
+        atk_object_notify_state_change(ATK_OBJECT(axObject), ATK_STATE_FOCUSED, false);
     }
     RefPtr<AccessibilityObject> newObject = getOrCreate(newFocusedNode);
     if (newObject) {
-        g_signal_emit_by_name(newObject->wrapper(), "focus-event", true);
-        atk_object_notify_state_change(newObject->wrapper(), ATK_STATE_FOCUSED, true);
+        auto* axObject = newObject->wrapper();
+        g_signal_emit_by_name(axObject, "focus-event", true);
+        atk_object_notify_state_change(ATK_OBJECT(axObject), ATK_STATE_FOCUSED, true);
     }
 }