[GTK] GTK's DRT not to log events for already defunct objects
authormario@webkit.org <mario@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 20 Jan 2012 09:57:24 +0000 (09:57 +0000)
committermario@webkit.org <mario@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 20 Jan 2012 09:57:24 +0000 (09:57 +0000)
https://bugs.webkit.org/show_bug.cgi?id=76620

Reviewed by Martin Robinson.

Do not log 'state-change:defunct' events.

* DumpRenderTree/gtk/AccessibilityCallbacks.cpp:
(printAccessibilityEvent): Early return if a
'state-change:defunct' signal is passed.
(axObjectEventListener): Pass the signal name and value in
separate parameters to printAccessibilityEvent.

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

Tools/ChangeLog
Tools/DumpRenderTree/gtk/AccessibilityCallbacks.cpp

index 752f9a6..26539ad 100644 (file)
@@ -1,3 +1,18 @@
+2012-01-20  Mario Sanchez Prada  <msanchez@igalia.com>
+
+        [GTK] GTK's DRT not to log events for already defunct objects
+        https://bugs.webkit.org/show_bug.cgi?id=76620
+
+        Reviewed by Martin Robinson.
+
+        Do not log 'state-change:defunct' events.
+
+        * DumpRenderTree/gtk/AccessibilityCallbacks.cpp:
+        (printAccessibilityEvent): Early return if a
+        'state-change:defunct' signal is passed.
+        (axObjectEventListener): Pass the signal name and value in
+        separate parameters to printAccessibilityEvent.
+
 2012-01-19  Gustavo Noronha Silva  <gns@gnome.org>
 
         Unreviewed build fix. Wrong variable being used as the cwd for git
index f50b033..a24d367 100644 (file)
@@ -43,21 +43,26 @@ static guint childrenChangedListenerId = 0;
 static guint propertyChangedListenerId = 0;
 static guint visibleDataChangedListenerId = 0;
 
-static void printAccessibilityEvent(AtkObject* accessible, const gchar* signalName)
+static void printAccessibilityEvent(AtkObject* accessible, const gchar* signalName, const gchar* signalValue)
 {
-    // Sanity check.
-    if (!accessible || !ATK_IS_OBJECT(accessible) || !signalName)
+    // Do not handle state-change:defunct signals, as the AtkObject
+    // associated to them will not be valid at this point already.
+    if (!signalName || !g_strcmp0(signalName, "state-change:defunct"))
+        return;
+
+    if (!accessible || !ATK_IS_OBJECT(accessible))
         return;
 
     const gchar* objectName = atk_object_get_name(accessible);
-    guint objectRole = atk_object_get_role(accessible);
+    AtkRole objectRole = atk_object_get_role(accessible);
 
     // Try to always provide a name to be logged for the object.
     if (!objectName || *objectName == '\0')
         objectName = "(No name)";
 
+    GOwnPtr<gchar> signalNameAndValue(signalValue ? g_strdup_printf("%s = %s", signalName, signalValue) : g_strdup(signalName));
     printf("Accessibility object emitted \"%s\" / Name: \"%s\" / Role: %d\n",
-           signalName, objectName, objectRole);
+           signalNameAndValue.get(), objectName, objectRole);
 }
 
 static gboolean axObjectEventListener(GSignalInvocationHint *signalHint,
@@ -75,26 +80,25 @@ static gboolean axObjectEventListener(GSignalInvocationHint *signalHint,
 
     GSignalQuery signal_query;
     GOwnPtr<gchar> signalName;
+    GOwnPtr<gchar> signalValue;
 
     g_signal_query(signalHint->signal_id, &signal_query);
 
     if (!g_strcmp0(signal_query.signal_name, "state-change")) {
-        signalName.set(g_strdup_printf("state-change:%s = %d",
-                                       g_value_get_string(&paramValues[1]),
-                                       g_value_get_boolean(&paramValues[2])));
+        signalName.set(g_strdup_printf("state-change:%s", g_value_get_string(&paramValues[1])));
+        signalValue.set(g_strdup_printf("%d", g_value_get_boolean(&paramValues[2])));
     } else if (!g_strcmp0(signal_query.signal_name, "focus-event")) {
-        signalName.set(g_strdup_printf("focus-event = %d",
-                                       g_value_get_boolean(&paramValues[1])));
+        signalName.set(g_strdup("focus-event"));
+        signalValue.set(g_strdup_printf("%d", g_value_get_boolean(&paramValues[1])));
     } else if (!g_strcmp0(signal_query.signal_name, "children-changed")) {
-        signalName.set(g_strdup_printf("children-changed = %d",
-                                       g_value_get_uint(&paramValues[1])));
+        signalName.set(g_strdup("children-changed"));
+        signalValue.set(g_strdup_printf("%d", g_value_get_uint(&paramValues[1])));
     } else if (!g_strcmp0(signal_query.signal_name, "property-change")) {
-        signalName.set(g_strdup_printf("property-change:%s",
-                                       g_quark_to_string(signalHint->detail)));
+        signalName.set(g_strdup_printf("property-change:%s", g_quark_to_string(signalHint->detail)));
     } else
         signalName.set(g_strdup(signal_query.signal_name));
 
-    printAccessibilityEvent(accessible, signalName.get());
+    printAccessibilityEvent(accessible, signalName.get(), signalValue.get());
 
     return TRUE;
 }