Only send property-change signals relevant for caching, absent listeners
authorMike Gorse <mgorse@suse.com>
Mon, 9 Jul 2012 22:41:38 +0000 (17:41 -0500)
committerMike Gorse <mgorse@suse.com>
Mon, 9 Jul 2012 22:41:38 +0000 (17:41 -0500)
Previously, all property-change signals were passed on, regardless of any
registered listeners, because some of them are used by libatspi to keep the
cache up-to-date. However, gtk sends many notifications for property changes
that would have no impact on libatspi's caching code, so we should not waste
time building and sending D-Bus messages for them unless something is
interested in the event.

https://bugzilla.gnome.org/show_bug.cgi?id=674719

atk-adaptor/event.c

index 859d399..efd9c20 100644 (file)
@@ -371,7 +371,11 @@ signal_is_needed (const gchar *klass, const gchar *major, const gchar *minor)
    * TODO: FOr 2.2, have at-spi2-core define a special "cache listener" for
    * this instead, so that we don't send these if no one is listening */
   if (!g_strcmp0 (data [1], "ChildrenChanged") ||
    * TODO: FOr 2.2, have at-spi2-core define a special "cache listener" for
    * this instead, so that we don't send these if no one is listening */
   if (!g_strcmp0 (data [1], "ChildrenChanged") ||
-      !g_strcmp0 (data [1], "PropertyChange") ||
+      ((!g_strcmp0 (data [1], "PropertyChange")) &&
+       (!g_strcmp0 (data [2], "accessible-name") ||
+        !g_strcmp0 (data [2], "accessible-description") ||
+        !g_strcmp0 (data [2], "accessible-parent") ||
+        !g_strcmp0 (data [2], "accessible-role"))) ||
       !g_strcmp0 (data [1], "StateChanged"))
   {
     g_free (data [2]);
       !g_strcmp0 (data [1], "StateChanged"))
   {
     g_free (data [2]);