Fixed ugly little regression introduced by 'failsafe' fix
authorbillh <billh@e2bd861d-eb25-0410-b326-f6ed22b6b98c>
Thu, 20 Jun 2002 21:37:58 +0000 (21:37 +0000)
committerbillh <billh@e2bd861d-eb25-0410-b326-f6ed22b6b98c>
Thu, 20 Jun 2002 21:37:58 +0000 (21:37 +0000)
(bug 86048).

git-svn-id: http://svn.gnome.org/svn/at-spi/trunk@324 e2bd861d-eb25-0410-b326-f6ed22b6b98c

ChangeLog
atk-bridge/bridge.c
registryd/registry.c

index 94f7aaf..a547465 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,15 @@
 2002-06-20  Bill Haneman  <bill.haneman@sun.com>
 
+       * registryd/registry.c: [fix for bug 86048]
+       (notify_listeners_cb):
+       Clear CORBA system exceptions which occur when notifying
+       listeners, before returning to the source of the original event,
+       since the event source doesn't care if the relayed notify failed.
+       In other words, don't complain to the atk-bridge if the registry
+       could not notify all its listeners, that's no fault of the
+       application and thus should not appear to be an error from the
+       application's perspective.
+       
        * cspi/spi_main.c: [fix for bug 85980]
        (cspi_object_ref):
        Replaced use of bonobo_object_dup_ref with call to the wrapper
index 2180939..d094d59 100644 (file)
@@ -409,6 +409,13 @@ spi_atk_emit_eventv (GObject      *gobject,
 #endif
 
       Accessibility_Registry_notifyEvent (spi_atk_bridge_get_registry (), &e, &ev);
+#ifdef SPI_BRIDGE_DEBUG
+      if (ev._major != CORBA_NO_EXCEPTION)
+             g_warning ("error emitting event %s, (%d) %s",
+                        e.type,
+                        ev._major,
+                        CORBA_exception_id(&ev));
+#endif       
       if (BONOBO_EX (&ev)) registry_died = TRUE;
       Accessibility_Accessible_unref (e.source, &ev);
 
index 273ab43..33afabc 100644 (file)
@@ -586,6 +586,10 @@ notify_listeners_cb (GList * const *list, gpointer user_data)
               g_warning ("Accessibility app error: exception during "
                        "event notification: %s\n",
                        CORBA_exception_id (ctx->ev));
+             if (ctx->ev->_major == CORBA_SYSTEM_EXCEPTION)
+                     CORBA_exception_init (ctx->ev);
+             /* clear system exception on notify, it means listener is dead but
+              * that's no concern of the event source :-) */
            }
        }
       else /* dup re-entered */