X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=test%2Fat_spi2_tool.c;h=dfbc05173ef7b7300108c32dab71eddfaac4bbe7;hb=cacf5dc0fac9e7fab51f8375e602fb1e4b50567e;hp=948aae4b05efdad825588dffaaeb6424815ba391;hpb=80d3c912259746251bb90d3035079dc71030f82d;p=platform%2Fupstream%2Fat-spi2-core.git diff --git a/test/at_spi2_tool.c b/test/at_spi2_tool.c index 948aae4..dfbc051 100644 --- a/test/at_spi2_tool.c +++ b/test/at_spi2_tool.c @@ -4,6 +4,7 @@ #include #include #include +#include #define ERROR_STATE -1 #define SAFE_BUFFER_SIZE 2048 @@ -345,7 +346,7 @@ static char *_get_info(AtspiAccessible *node, int length_limit) flows_from); if (ret >= SAFE_BUFFER_SIZE) - fprintf(stderr, "\n%s, %s %s: generated string is too long. Buffer overflow\n", __FILE__, __FUNCTION__, __LINE__); + fprintf(stderr, "\n%s, %s %d: generated string is too long. Buffer overflow\n", __FILE__, __FUNCTION__, __LINE__); free(node_name); free(node_role_name); @@ -427,6 +428,8 @@ void _print_help() printf("-v, --version\t\tshow actual version of tool\n"); printf("-g, --show-legend\tprint AT-SPI state legend\n"); printf("-l, --list-apps\t\tlist all applications of desktop\n"); + printf("-a, --at-spi-client \tenable/disable org.a11y.Status.IsEnabled property\n"); + printf("-s, --sleep \tsleep N seconds\n"); printf("-d, --tree-dump\t\tdump tree for selected application\n"); printf("-c, --tree-check\tcheck tree for selected application\n"); printf("-f, --first-match\tperform dump or check only for first matching application\n"); @@ -443,14 +446,21 @@ void _print_version() printf("AT-SPI2-CORE-UTIL v%s\n", VERSION); } -static void _atspi_tree_traverse(AtspiAccessible *desktop, const char *app_name, bool dump, bool check, bool first_match, int length_limit) +static void _atspi_tree_traverse(const char *app_name, bool dump, bool check, bool first_match, int length_limit) { + + AtspiAccessible *desktop = atspi_get_desktop(0); + if (!desktop) { + fprintf(stderr, "atspi_get_desktop failed\n"); + return; + } + int count = atspi_accessible_get_child_count(desktop, NULL); bool app_name_matched = false; for (int i = 0; i < count; i++) { AtspiAccessible *child = atspi_accessible_get_child_at_index(desktop, i, NULL); if (child == NULL) { - fprintf(stderr, "\n%s, %s %s: Null child occured. Results may be misleading.\n", __FILE__, __FUNCTION__, __LINE__); + fprintf(stderr, "\n%s, %s %d: Null child occured. Results may be misleading.\n", __FILE__, __FUNCTION__, __LINE__); continue; } @@ -481,15 +491,59 @@ static void _atspi_tree_traverse(AtspiAccessible *desktop, const char *app_name, if (!app_name_matched && (dump || check)) fprintf(stderr, "There is no application with name: %s. Try again.\n", app_name); + + g_object_unref(desktop); +} + +static void _at_spi_client_enable(gboolean enabled) +{ + static GDBusProxy *proxy = NULL; //we keep proxy (dbus connection) until program exits + GVariant *result; + GError *error = NULL; + GDBusProxyFlags flags = G_DBUS_PROXY_FLAGS_NONE; + + + if (!proxy) { + proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SESSION, + flags, + NULL, /* GDBusInterfaceInfo */ + "org.a11y.Bus", + "/org/a11y/bus", + "org.freedesktop.DBus.Properties", + NULL, /* GCancellable */ + &error); + if (error) { + fprintf(stderr, "Failed to create proxy object for '/org/a11y/bus': %s\n", error->message); + g_error_free(error); + return; + } + } + + result = g_dbus_proxy_call_sync(proxy, + "Set", + g_variant_new ("(ssv)", "org.a11y.Status", "IsEnabled", g_variant_new_boolean(enabled)), + G_DBUS_CALL_FLAGS_NONE, + -1, + NULL, + &error); + if (result) + g_variant_unref(result); + + if (error) { + fprintf(stderr, "Fail to call org.freedesktop.DBus.Properties.Set: %s\n", error->message); + g_error_free(error); + } } -static void _run_command(int argc, char *argv[], AtspiAccessible *desktop) +static void _run_command(int argc, char *argv[]) { struct option long_options[] = { {"help", no_argument, 0, 'h'}, {"version", no_argument, 0, 'v'}, {"show-legend", no_argument, 0, 'g'}, {"list-apps", no_argument, 0, 'l'}, + {"at-spi-client", no_argument, 0, 'a'}, + {"sleep", required_argument, 0, 's'}, {"tree-dump", required_argument, 0, 'd'}, {"tree-check", required_argument, 0, 'c'}, {"first-match", no_argument, 0, 'f'}, @@ -501,9 +555,10 @@ static void _run_command(int argc, char *argv[], AtspiAccessible *desktop) int option_index = 0; bool traverse_flags[FLAG_NO] = {false}; char *app_name = NULL; + gboolean enable_at_spi_client; while (TRUE) { - command = getopt_long(argc, argv, "hvgld:c:ft:i:", long_options, &option_index); + command = getopt_long(argc, argv, "hvgla:s:d:c:ft:i:", long_options, &option_index); if (command == ERROR_STATE) break; @@ -522,7 +577,19 @@ static void _run_command(int argc, char *argv[], AtspiAccessible *desktop) break; case 'l': - _atspi_tree_traverse(desktop, NULL, false, false, false, module_name_limit); + _atspi_tree_traverse(NULL, false, false, false, module_name_limit); + break; + + case 'a': + enable_at_spi_client = TRUE; + if(optarg[0] == 'f' || optarg[0] == '0') + enable_at_spi_client = FALSE; + + _at_spi_client_enable(enable_at_spi_client); + break; + + case 's': + sleep(atoi(optarg)); break; case 'd': @@ -557,7 +624,7 @@ static void _run_command(int argc, char *argv[], AtspiAccessible *desktop) } if (traverse_flags[DUMP] || traverse_flags[CHECK]) - _atspi_tree_traverse(desktop, app_name, traverse_flags[DUMP], traverse_flags[CHECK], traverse_flags[FIRST_MATCH], module_name_limit); + _atspi_tree_traverse(app_name, traverse_flags[DUMP], traverse_flags[CHECK], traverse_flags[FIRST_MATCH], module_name_limit); } int main(int argc, char *argv[]) @@ -574,13 +641,7 @@ int main(int argc, char *argv[]) return -1; } - AtspiAccessible *desktop = atspi_get_desktop(0); - if (!desktop) { - fprintf(stderr, "atspi_get_desktop failed\n"); - return -1; - } - - _run_command(argc, argv, desktop); + _run_command(argc, argv); return 0; }