patches/firefox3-21-atspi2.diff
author Jon Tibble <meths@btinternet.com>
Sat, 06 Oct 2012 16:11:50 +0100
branchs11express-2010-11
changeset 22109 db10202d5f6d
parent 17285 a3a456985390
permissions -rw-r--r--
Added tag oi_151a_prestable7 for changeset 25dee50cecca
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
17285
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
     1
diff --git a/accessible/src/atk/nsAccessibleWrap.cpp b/accessible/src/atk/nsAccessibleWrap.cpp
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
     2
--- a/accessible/src/atk/nsAccessibleWrap.cpp
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
     3
+++ b/accessible/src/atk/nsAccessibleWrap.cpp
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
     4
@@ -920,20 +920,20 @@ refChildCB(AtkObject *aAtkObj, gint aChi
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
     5
     if (!accChild)
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
     6
         return nsnull;
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
     7
 
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
     8
     AtkObject* childAtkObj = nsAccessibleWrap::GetAtkObject(accChild);
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
     9
 
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    10
     NS_ASSERTION(childAtkObj, "Fail to get AtkObj");
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    11
     if (!childAtkObj)
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    12
         return nsnull;
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    13
+    g_object_ref(childAtkObj);
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    14
     
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    15
     //this will addref parent
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    16
     atk_object_set_parent(childAtkObj, aAtkObj);
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    17
-    g_object_ref(childAtkObj);
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    18
     return childAtkObj;
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    19
 }
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    20
 
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    21
 gint
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    22
 getIndexInParentCB(AtkObject *aAtkObj)
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    23
 {
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    24
     // We don't use nsIAccessible::GetIndexInParent() because
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    25
     // for ATK we don't want to include text leaf nodes as children
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    26
diff --git a/accessible/src/atk/nsAppRootAccessible.cpp b/accessible/src/atk/nsAppRootAccessible.cpp
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    27
--- a/accessible/src/atk/nsAppRootAccessible.cpp
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    28
+++ b/accessible/src/atk/nsAppRootAccessible.cpp
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    29
@@ -629,44 +629,63 @@ nsApplicationAccessibleWrap::GetNativeIn
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    30
         mAtkObject->role = ATK_ROLE_INVALID;
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    31
         mAtkObject->layer = ATK_LAYER_INVALID;
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    32
     }
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    33
 
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    34
     *aOutAccessible = mAtkObject;
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    35
     return NS_OK;
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    36
 }
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    37
 
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    38
+struct AtkRootAccessibleAddedEvent {
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    39
+  AtkObject *app_accessible;
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    40
+  AtkObject *root_accessible;
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    41
+  PRUint32 index;
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    42
+};
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    43
+
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    44
+gboolean fireRootAccessibleAddedCB(gpointer data)
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    45
+{
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    46
+    AtkRootAccessibleAddedEvent* eventData = (AtkRootAccessibleAddedEvent*)data;
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    47
+    g_signal_emit_by_name(eventData->app_accessible, "children_changed::add",
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    48
+                          eventData->index, eventData->root_accessible, NULL);
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    49
+    g_object_unref(eventData->app_accessible);
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    50
+    g_object_unref(eventData->root_accessible);
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    51
+    free(data);
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    52
+    
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    53
+    return FALSE;
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    54
+}
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    55
+
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    56
 nsresult
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    57
 nsApplicationAccessibleWrap::AddRootAccessible(nsIAccessible *aRootAccWrap)
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    58
 {
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    59
     NS_ENSURE_ARG_POINTER(aRootAccWrap);
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    60
 
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    61
     // add by weak reference
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    62
     nsresult rv = nsApplicationAccessible::AddRootAccessible(aRootAccWrap);
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    63
     NS_ENSURE_SUCCESS(rv, rv);
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    64
 
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    65
     AtkObject *atkAccessible = nsAccessibleWrap::GetAtkObject(aRootAccWrap);
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    66
     atk_object_set_parent(atkAccessible, mAtkObject);
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    67
 
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    68
     PRUint32 count = 0;
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    69
     mChildren->GetLength(&count);
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    70
-    g_signal_emit_by_name(mAtkObject, "children_changed::add", count - 1,
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    71
-                          atkAccessible, NULL);
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    72
 
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    73
-#ifdef MAI_LOGGING
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    74
-    if (NS_SUCCEEDED(rv)) {
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    75
-        MAI_LOG_DEBUG(("\nAdd RootAcc=%p OK, count=%d\n",
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    76
-                       (void*)aRootAccWrap, count));
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    77
+    // Emit children_changed::add in a timeout
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    78
+    // to make sure aRootAccWrap is fully initialized.
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    79
+    AtkRootAccessibleAddedEvent* eventData = (AtkRootAccessibleAddedEvent*)
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    80
+      malloc(sizeof(AtkRootAccessibleAddedEvent));
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    81
+    if (eventData) {
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    82
+      eventData->app_accessible = mAtkObject;
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    83
+      eventData->root_accessible = atkAccessible;
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    84
+      eventData->index = count -1;
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    85
+      g_object_ref(mAtkObject);
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    86
+      g_object_ref(atkAccessible);
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    87
+      g_timeout_add(0, fireRootAccessibleAddedCB, eventData);
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    88
     }
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    89
-    else
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    90
-        MAI_LOG_DEBUG(("\nAdd RootAcc=%p Failed, count=%d\n",
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    91
-                       (void*)aRootAccWrap, count));
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    92
-#endif
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    93
 
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    94
-    return rv;
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    95
+    return NS_OK;
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    96
 }
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    97
 
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    98
 nsresult
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
    99
 nsApplicationAccessibleWrap::RemoveRootAccessible(nsIAccessible *aRootAccWrap)
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
   100
 {
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
   101
     NS_ENSURE_ARG_POINTER(aRootAccWrap);
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
   102
 
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
   103
     PRUint32 index = 0;
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
   104
@@ -676,33 +695,19 @@ nsApplicationAccessibleWrap::RemoveRootA
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
   105
     nsCOMPtr<nsIWeakReference> weakPtr = do_GetWeakReference(aRootAccWrap);
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
   106
     rv = mChildren->IndexOf(0, weakPtr, &index);
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
   107
 
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
   108
     AtkObject *atkAccessible = nsAccessibleWrap::GetAtkObject(aRootAccWrap);
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
   109
     atk_object_set_parent(atkAccessible, NULL);
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
   110
     g_signal_emit_by_name(mAtkObject, "children_changed::remove", index,
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
   111
                           atkAccessible, NULL);
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
   112
 
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
   113
-#ifdef MAI_LOGGING
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
   114
-    PRUint32 count = 0;
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
   115
-    mChildren->GetLength(&count);
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
   116
-
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
   117
-    if (NS_SUCCEEDED(rv)) {
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
   118
-        rv = mChildren->RemoveElementAt(index);
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
   119
-        MAI_LOG_DEBUG(("\nRemove RootAcc=%p, count=%d\n",
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
   120
-                       (void*)aRootAccWrap, (count-1)));
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
   121
-    }
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
   122
-    else
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
   123
-        MAI_LOG_DEBUG(("\nFail to Remove RootAcc=%p, count=%d\n",
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
   124
-                       (void*)aRootAccWrap, count));
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
   125
-#else
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
   126
     NS_ENSURE_SUCCESS(rv, rv);
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
   127
     rv = mChildren->RemoveElementAt(index);
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
   128
 
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
   129
-#endif
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
   130
     InvalidateChildren();
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
   131
     return rv;
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
   132
 }
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
   133
 
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
   134
 void
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
   135
 nsApplicationAccessibleWrap::PreCreate()
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
   136
 {
a3a456985390 2010-01-09 Ginn Chen <[email protected]>
ginnchen
parents:
diff changeset
   137
     if (!sATKChecked) {