X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=atspi%2Fatspi-misc.c;h=679e0dad40113ec45031b6535f654366ca45aa4f;hb=refs%2Fchanges%2F31%2F135531%2F1;hp=aa2fb66e41561d76b6bc36ffea1ca3b4c02d38ec;hpb=4c0da161e7af297b34ca7fc31bd44c12baf78636;p=platform%2Fupstream%2Fat-spi2-core.git diff --git a/atspi/atspi-misc.c b/atspi/atspi-misc.c index aa2fb66..679e0da 100644 --- a/atspi/atspi-misc.c +++ b/atspi/atspi-misc.c @@ -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; } @@ -215,9 +215,11 @@ handle_get_bus_address (DBusPendingCall *pending, void *user_data) "/org/a11y/atspi/cache", atspi_interface_cache, "GetItems"); - dbus_connection_send_with_reply (app->bus, message, &new_pending, 2000); - dbus_pending_call_set_notify (new_pending, handle_get_items, app, NULL); + dbus_connection_send_with_reply (app->bus, message, &new_pending, 2000); dbus_message_unref (message); + if (!new_pending) + return; + dbus_pending_call_set_notify (new_pending, handle_get_items, app, NULL); } static AtspiApplication * @@ -247,9 +249,14 @@ get_application (const char *bus_name) message = dbus_message_new_method_call (bus_name, atspi_path_root, atspi_interface_application, "GetApplicationBusAddress"); - dbus_connection_send_with_reply (app->bus, message, &pending, 2000); - dbus_pending_call_set_notify (pending, handle_get_bus_address, app, NULL); + dbus_connection_send_with_reply (app->bus, message, &pending, 2000); dbus_message_unref (message); + if (!pending) + { + g_hash_table_remove (app_hash, bus_name_dup); + return NULL; + } + dbus_pending_call_set_notify (pending, handle_get_bus_address, app, NULL); return app; } @@ -377,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; } @@ -1496,7 +1497,7 @@ 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; } { @@ -1508,12 +1509,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; } @@ -1585,23 +1588,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. @@ -1697,13 +1700,15 @@ atspi_role_get_name (AtspiRole role) retval = g_strdup (value->value_nick); } + g_type_class_unref (type_class); + if (retval) return _atspi_name_compat (retval); return NULL; } -void +GHashTable * _atspi_dbus_update_cache_from_dict (AtspiAccessible *accessible, DBusMessageIter *iter) { GHashTable *cache = _atspi_accessible_ref_cache (accessible); @@ -1766,6 +1771,8 @@ _atspi_dbus_update_cache_from_dict (AtspiAccessible *accessible, DBusMessageIter g_hash_table_insert (cache, g_strdup (key), val); dbus_message_iter_next (&iter_dict); } + + return cache; } gboolean