Changeset 78244 in webkit


Ignore:
Timestamp:
Feb 10, 2011 10:42:18 AM (13 years ago)
Author:
mario@webkit.org
Message:

2011-02-10 Mario Sanchez Prada <msanchez@igalia.com>

Reviewed by Martin Robinson.

[GTK] Log signals from AtkDocument interface also in AccessibilityController
https://bugs.webkit.org/show_bug.cgi?id=54198

Trace AtkDocument's signals emission through AccessibilityController.

Also, taken the code related to adding and removing global
listeners for ATK signals out to a separate file, for the sake of
clarity and to ease future additions.

  • DumpRenderTree/gtk/AccessibilityCallbacks.h: Added.
  • DumpRenderTree/gtk/AccessibilityCallbacks.cpp: Added (printAccessibilityEvent): Print information about an event. (axObjectEventListener): Global listener for AtkObject's signals. (axDocumentEventListener): Global listener for AtkDocument's signals. (connectAccessibilityCallbacks): Connect all global listeners. (disconnectAccessibilityCallbacks): Disconnect all global listeners.
  • DumpRenderTree/gtk/AccessibilityControllerGtk.cpp: (AccessibilityController::setLogAccessibilityEvents): Call to connectAccessibilityCallbacks and disconnectAccessibilityCallbacks.
  • GNUmakefile.am: Added new files.
Location:
trunk/Tools
Files:
2 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Tools/ChangeLog

    r78228 r78244  
     12011-02-10  Mario Sanchez Prada  <msanchez@igalia.com>
     2
     3        Reviewed by Martin Robinson.
     4
     5        [GTK] Log signals from AtkDocument interface also in AccessibilityController
     6        https://bugs.webkit.org/show_bug.cgi?id=54198
     7
     8        Trace AtkDocument's signals emission through AccessibilityController.
     9
     10        Also, taken the code related to adding and removing global
     11        listeners for ATK signals out to a separate file, for the sake of
     12        clarity and to ease future additions.
     13
     14        * DumpRenderTree/gtk/AccessibilityCallbacks.h: Added.
     15        * DumpRenderTree/gtk/AccessibilityCallbacks.cpp: Added
     16        (printAccessibilityEvent): Print information about an event.
     17        (axObjectEventListener): Global listener for AtkObject's signals.
     18        (axDocumentEventListener): Global listener for AtkDocument's signals.
     19        (connectAccessibilityCallbacks): Connect all global listeners.
     20        (disconnectAccessibilityCallbacks): Disconnect all global listeners.
     21
     22        * DumpRenderTree/gtk/AccessibilityControllerGtk.cpp:
     23        (AccessibilityController::setLogAccessibilityEvents): Call to
     24        connectAccessibilityCallbacks and disconnectAccessibilityCallbacks.
     25
     26        * GNUmakefile.am: Added new files.
     27
    1282011-02-09  Martin Robinson  <mrobinson@igalia.com>
    229
  • trunk/Tools/DumpRenderTree/gtk/AccessibilityControllerGtk.cpp

    r78179 r78244  
    2828#include "AccessibilityController.h"
    2929
     30#include "AccessibilityCallbacks.h"
    3031#include "AccessibilityUIElement.h"
    3132#include "DumpRenderTree.h"
     
    3738
    3839static bool loggingAccessibilityEvents = false;
    39 
    40 static guint state_change_listener_id = 0;
    41 static guint focus_event_listener_id = 0;
    42 static guint active_descendant_changed_listener_id = 0;
    43 static guint children_changed_listener_id = 0;
    44 static guint property_changed_listener_id = 0;
    45 static guint visible_data_changed_listener_id = 0;
    4640
    4741AccessibilityController::AccessibilityController()
     
    8983}
    9084
    91 static gboolean accessibility_event_listener(GSignalInvocationHint *signal_hint,
    92                                             guint n_param_values,
    93                                             const GValue *param_values,
    94                                             gpointer data)
    95 {
    96     // At least we should receive the instance emitting the signal.
    97     if (n_param_values < 1)
    98         return TRUE;
    99 
    100     AtkObject* accessible = ATK_OBJECT(g_value_get_object(&param_values[0]));
    101     const gchar* axObjectName = 0;
    102     guint axObjectRole = 0;
    103     if (accessible) {
    104         axObjectName = atk_object_get_name(accessible);
    105         axObjectRole = atk_object_get_role(accessible);
    106     }
    107 
    108     GSignalQuery signal_query;
    109     gchar* signalName = 0;
    110 
    111     g_signal_query(signal_hint->signal_id, &signal_query);
    112 
    113     if (!g_strcmp0(signal_query.signal_name, "state-change")) {
    114         signalName = g_strdup_printf("state-change:%s = %d",
    115                                      g_value_get_string(&param_values[1]),
    116                                      g_value_get_boolean(&param_values[2]));
    117     } else if (!g_strcmp0(signal_query.signal_name, "focus-event")) {
    118         signalName = g_strdup_printf("focus-event = %d",
    119                                      g_value_get_boolean(&param_values[1]));
    120     } else if (!g_strcmp0(signal_query.signal_name, "children-changed")) {
    121         signalName = g_strdup_printf("children-changed = %d",
    122                                      g_value_get_uint(&param_values[1]));
    123     } else {
    124         signalName = g_strdup(signal_query.signal_name);
    125     }
    126 
    127     // Try to provide always a name to be logged for the object.
    128     gchar* objectName = 0;
    129     if (!axObjectName || *axObjectName == '\0')
    130         objectName = g_strdup("(No name)");
    131     else
    132         objectName = g_strdup(axObjectName);
    133 
    134     printf("Accessibility object emitted \"%s\" / Name: \"%s\" / Role: %d\n", signalName, objectName, axObjectRole);
    135     g_free(signalName);
    136     g_free(objectName);
    137 
    138     return TRUE;
    139 }
    140 
    14185void AccessibilityController::setLogAccessibilityEvents(bool logAccessibilityEvents)
    14286{
     
    14488        return;
    14589
    146     if (state_change_listener_id) {
    147         atk_remove_global_event_listener(state_change_listener_id);
    148         state_change_listener_id = 0;
    149     }
    150     if (focus_event_listener_id) {
    151         atk_remove_global_event_listener(focus_event_listener_id);
    152         focus_event_listener_id = 0;
    153     }
    154     if (active_descendant_changed_listener_id) {
    155         atk_remove_global_event_listener(active_descendant_changed_listener_id);
    156         active_descendant_changed_listener_id = 0;
    157     }
    158     if (children_changed_listener_id) {
    159         atk_remove_global_event_listener(children_changed_listener_id);
    160         children_changed_listener_id = 0;
    161     }
    162     if (property_changed_listener_id) {
    163         atk_remove_global_event_listener(property_changed_listener_id);
    164         property_changed_listener_id = 0;
    165     }
    166     if (visible_data_changed_listener_id) {
    167         atk_remove_global_event_listener(visible_data_changed_listener_id);
    168         visible_data_changed_listener_id = 0;
    169     }
    170 
    17190    if (!logAccessibilityEvents) {
     91        disconnectAccessibilityCallbacks();
    17292        loggingAccessibilityEvents = false;
    17393        return;
    17494    }
    17595
    176     // Ensure that accessibility is initialized for the WebView by querying for
    177     // the root accessible object.
    178     rootElement();
    179 
    180     // Add global listeners
    181     state_change_listener_id = atk_add_global_event_listener(accessibility_event_listener, "Gtk:AtkObject:state-change");
    182     focus_event_listener_id = atk_add_global_event_listener(accessibility_event_listener, "Gtk:AtkObject:focus-event");
    183     active_descendant_changed_listener_id = atk_add_global_event_listener(accessibility_event_listener, "Gtk:AtkObject:active-descendant-changed");
    184     children_changed_listener_id = atk_add_global_event_listener(accessibility_event_listener, "Gtk:AtkObject:children-changed");
    185     property_changed_listener_id = atk_add_global_event_listener(accessibility_event_listener, "Gtk:AtkObject:property-change");
    186     visible_data_changed_listener_id = atk_add_global_event_listener(accessibility_event_listener, "Gtk:AtkObject:visible-data-changed");
    187 
     96    connectAccessibilityCallbacks();
    18897    loggingAccessibilityEvents = true;
    18998}
  • trunk/Tools/GNUmakefile.am

    r78186 r78244  
    7070        Tools/DumpRenderTree/cairo/PixelDumpSupportCairo.cpp \
    7171        Tools/DumpRenderTree/cairo/PixelDumpSupportCairo.h \
     72        Tools/DumpRenderTree/gtk/AccessibilityCallbacks.h \
     73        Tools/DumpRenderTree/gtk/AccessibilityCallbacks.cpp \
    7274        Tools/DumpRenderTree/gtk/AccessibilityControllerGtk.cpp \
    7375        Tools/DumpRenderTree/gtk/AccessibilityUIElementGtk.cpp \
Note: See TracChangeset for help on using the changeset viewer.