X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=atspi%2Fatspi-misc.c;h=5c0a40dde1784181b7c5173d47fe9ca34924e403;hb=refs%2Fchanges%2F09%2F172909%2F3;hp=4c35df88b9644d21cdeeedf220b97540e6095246;hpb=54d3b53515eb2ddbef32ad12446bd8c9fd731c3f;p=platform%2Fupstream%2Fat-spi2-core.git diff --git a/atspi/atspi-misc.c b/atspi/atspi-misc.c index 4c35df8..5c0a40d 100644 --- a/atspi/atspi-misc.c +++ b/atspi/atspi-misc.c @@ -110,7 +110,7 @@ _atspi_get_iface_num (const char *iface) GHashTable * _atspi_get_live_refs (void) { - if (!live_refs) + if (!live_refs) { live_refs = g_hash_table_new (g_direct_hash, g_direct_equal); } @@ -124,7 +124,7 @@ _atspi_bus () if (!bus) atspi_init (); if (!bus) - g_error ("AT-SPI: COuldn't connect to accessibility bus. Is at-spi-bus-launcher running?"); + g_error ("AT-SPI: Couldn't connect to accessibility bus. Is at-spi-bus-launcher running?"); return bus; } @@ -260,7 +260,7 @@ get_application (const char *bus_name) return app; } -static AtspiAccessible * +AtspiAccessible * ref_accessible (const char *app_name, const char *path) { AtspiApplication *app; @@ -384,17 +384,11 @@ handle_name_owner_changed (DBusConnection *bus, DBusMessage *message, void *user else if (!new[0]) registry_lost = TRUE; } - else + else if (app_hash) { - AtspiAccessible *desktop = atspi_get_desktop (0); - GList *l; - for (l = desktop->children; l; l = l->next) - { - AtspiAccessible *child = l->data; - if (!strcmp (child->parent.app->bus_name, old)) - g_object_run_dispose (G_OBJECT (child->parent.app)); - } - g_object_unref (desktop); + AtspiApplication *app = g_hash_table_lookup (app_hash, old); + if (app && app->bus_name && !strcmp(app->bus_name, name)) + g_object_run_dispose (G_OBJECT (app)); } return DBUS_HANDLER_RESULT_HANDLED; } @@ -643,7 +637,7 @@ _atspi_dbus_return_hyperlink_from_message (DBusMessage *message) DBusMessageIter iter; AtspiHyperlink *retval = NULL; const char *signature; - + if (!message) return NULL; @@ -856,7 +850,7 @@ spi_display_name (void) * * Connects to the accessibility registry and initializes the SPI. * - * Returns: 0 on success, 1 if already initialized, or an integer error code. + * Returns: 0 on success, 1 if already initialized, or an integer error code. **/ int atspi_init (void) @@ -953,7 +947,7 @@ atspi_event_quit (void) /** * atspi_exit: * - * Disconnects from #AtspiRegistry instances and releases + * Disconnects from #AtspiRegistry instances and releases * any floating resources. Call only once at exit. * * Returns: 0 if there were no leaks, otherwise other integer values. @@ -1005,6 +999,7 @@ check_for_hang (DBusMessage *message, DBusError *error, DBusConnection *bus, con DBusMessage *message; gchar *bus_name_dup; DBusPendingCall *pending = NULL; + dbus_bool_t result; for (l = hung_processes; l; l = l->next) if (!strcmp (l->data, bus_name)) return; @@ -1013,9 +1008,9 @@ check_for_hang (DBusMessage *message, DBusError *error, DBusConnection *bus, con "Ping"); if (!message) return; - dbus_connection_send_with_reply (bus, message, &pending, -1); + result = dbus_connection_send_with_reply (bus, message, &pending, -1); dbus_message_unref (message); - if (!pending) + if (!result || !pending) return; bus_name_dup = g_strdup (bus_name); hung_processes = g_slist_append (hung_processes, bus_name_dup); @@ -1128,9 +1123,9 @@ _atspi_dbus_call_partial_va (gpointer obj, { AtspiObject *aobj = ATSPI_OBJECT (obj); DBusError err; - DBusMessage *msg = NULL, *reply = NULL; - DBusMessageIter iter; - const char *p; + DBusMessage *msg = NULL, *reply = NULL; + DBusMessageIter iter; + const char *p; dbus_error_init (&err); @@ -1155,11 +1150,13 @@ out: process_deferred_messages (); if (dbus_error_is_set (&err)) { - /* TODO: Set gerror */ + g_set_error_literal(error, ATSPI_ERROR, ATSPI_ERROR_IPC, err.message); dbus_error_free (&err); + if (reply) + dbus_message_unref(reply); + return NULL; } - - if (reply && dbus_message_get_type (reply) == DBUS_MESSAGE_TYPE_ERROR) + else if (reply && dbus_message_get_type(reply) == DBUS_MESSAGE_TYPE_ERROR) { const char *err_str = NULL; dbus_message_get_args (reply, NULL, DBUS_TYPE_STRING, &err_str, DBUS_TYPE_INVALID); @@ -1168,7 +1165,6 @@ out: dbus_message_unref (reply); return NULL; } - return reply; } @@ -1457,7 +1453,7 @@ get_accessibility_bus_address_x11 (void) g_warning ("Could not open X display"); return NULL; } - + AT_SPI_BUS = XInternAtom (bridge_display, "AT_SPI_BUS", False); XGetWindowProperty (bridge_display, XDefaultRootWindow (bridge_display), @@ -1503,9 +1499,9 @@ get_accessibility_bus_address_dbus (void) g_warning ("Error retrieving accessibility bus address: %s: %s", error.name, error.message); dbus_error_free (&error); - return NULL; + goto out; } - + { const char *tmp_address; if (!dbus_message_get_args (reply, @@ -1515,12 +1511,14 @@ get_accessibility_bus_address_dbus (void) DBUS_TYPE_INVALID)) { dbus_message_unref (reply); - return NULL; + goto out; } address = g_strdup (tmp_address); dbus_message_unref (reply); } - + +out: + dbus_connection_unref (session_bus); return address; } @@ -1583,7 +1581,7 @@ atspi_get_a11y_bus (void) return NULL; } } - + /* Simulate a weak ref on the bus */ dbus_connection_set_data (a11y_bus, a11y_dbus_slot, a11y_bus, a11y_bus_free); @@ -1592,23 +1590,23 @@ atspi_get_a11y_bus (void) /** * atspi_set_timeout: - * @val: The timeout value, in milliseconds, or -1 to disable the timeout. - * @startup_time: The amount of time, in milliseconds, to allow to pass - * before enforcing timeouts on an application. Can be used to prevent - * timeout exceptions if an application is likely to block for an extended - * period of time on initialization. -1 can be passed to disable this - * behavior. + * @val: The timeout value, in milliseconds, or -1 to disable the timeout. + * @startup_time: The amount of time, in milliseconds, to allow to pass + * before enforcing timeouts on an application. Can be used to prevent + * timeout exceptions if an application is likely to block for an extended + * period of time on initialization. -1 can be passed to disable this + * behavior. * - * Set the timeout used for method calls. If this is not set explicitly, - * a default of 0.8 ms is used. - * Note that at-spi2-registryd currently uses a timeout of 3 seconds when - * sending a keyboard event notification. This means that, if an AT makes - * a call in response to the keyboard notification and the application - * being called does not respond before the timeout is reached, - * at-spi2-registryd will time out on the keyboard event notification and - * pass the key onto the application (ie, reply to indicate that the key - * was not consumed), so this may make it undesirable to set a timeout - * larger than 3 seconds. + * Set the timeout used for method calls. If this is not set explicitly, + * a default of 0.8 ms is used. + * Note that at-spi2-registryd currently uses a timeout of 3 seconds when + * sending a keyboard event notification. This means that, if an AT makes + * a call in response to the keyboard notification and the application + * being called does not respond before the timeout is reached, + * at-spi2-registryd will time out on the keyboard event notification and + * pass the key onto the application (ie, reply to indicate that the key + * was not consumed), so this may make it undesirable to set a timeout + * larger than 3 seconds. * * By default, the normal timeout is set to 800 ms, and the application startup * timeout is set to 15 seconds. @@ -1772,7 +1770,7 @@ _atspi_dbus_update_cache_from_dict (AtspiAccessible *accessible, DBusMessageIter g_value_set_boxed (val, &extents); } if (val) - g_hash_table_insert (cache, g_strdup (key), val); + g_hash_table_insert (cache, g_strdup (key), val); dbus_message_iter_next (&iter_dict); }