static void
test_desktop (void)
{
	Accessible  *desktop;
	Accessible  *application;
	Accessible **list;

	fprintf (stderr, "Testing desktop...\n");

	g_assert (SPI_getDesktop (-1) == NULL);
	desktop = SPI_getDesktop (0);
	g_assert (desktop != NULL);

	g_assert ((SPI_getDesktopList (&list)) > 0);
	g_assert (list[0] == desktop);
	SPI_freeDesktopList (list);

	validate_accessible (desktop, FALSE, FALSE);

	application = Accessible_getChildAtIndex (desktop, 0);
	g_assert (application != NULL);
	AccessibleApplication_unref (application);

	Accessible_unref (desktop);
}
static void
global_listener_cb (const AccessibleEvent *event,
		    void                  *user_data)
{
	TestWindow *win = user_data;
	Accessible *desktop;
	AccessibleApplication *application;

	g_assert (win->magic == WINDOW_MAGIC);
	g_assert (!strcmp (event->type, "focus:"));

	fprintf (stderr, "Fielded focus event ...\n");

	if (!do_poke) {
		desktop = SPI_getDesktop (0);
		application = Accessible_getChildAtIndex (desktop, 0);
		g_assert (application != NULL);
		Accessible_unref (desktop);
		
		test_application (application);
		
		AccessibleApplication_unref (application);
		
		print_tree = FALSE;

		validate_accessible (event->source, TRUE, TRUE);

		fprintf (stderr, "quitting mainloop.\n");
		gtk_main_quit ();
	}

	print_tree = TRUE;
	validate_accessible (event->source, TRUE, TRUE);
}
static void
validate_tree (Accessible *accessible,
	       gboolean    has_parent,
	       gboolean    recurse_down)
{
	Accessible  *parent;
	long         len, i;

	parent = Accessible_getParent (accessible);
	if (has_parent) {
		long        index;
		Accessible *child_at_index;

		g_assert (parent != NULL);

		index = Accessible_getIndexInParent (accessible);
		g_assert (index >= 0); 

		child_at_index = Accessible_getChildAtIndex (parent, index);

		g_assert (child_at_index == accessible);

		Accessible_unref (child_at_index);
		Accessible_unref (parent);
	}

	len = Accessible_getChildCount (accessible);
	print_tree_depth++;
	for (i = 0; i < len; i++) {
		Accessible *child;

		child = Accessible_getChildAtIndex (accessible, i);
#ifdef ROPEY
		if (!child)
			fprintf (stderr, "Unusual - ChildGone at %ld\n", i);

		g_assert (Accessible_getIndexInParent (child) == i);
		g_assert (Accessible_getParent (child) == accessible);
#endif

		if (recurse_down && child)
			validate_accessible (child, has_parent, recurse_down);

		Accessible_unref (child);
	}
	print_tree_depth--;
}
static void
control_spi_listener_build_actions_list (ControlSpiListener *listener, Accessible *parent, int depth)
{
    Accessible* child;
    AccessibleRole role;

    int i, child_count;

    if (depth > SEARCH_DEPTH)
        return;

    child_count = Accessible_getChildCount (parent);

    child_count = MIN (child_count, SEARCH_BREADTH);

    for (i = 0; i < child_count; ++i) {
        char *name;
        char *normalized_name;

        child = Accessible_getChildAtIndex (parent, i);

        if (child == parent)
            continue;

        name = Accessible_getName (child);

#if DEBUG
        {
            gchar *role_name;

            role_name = Accessible_getRoleName (child);
            g_message ("Looking at %s %s", role_name, name);
        }
#endif

        if (name) {
            normalized_name = control_spi_listener_normalize (name);
            if (normalized_name && strlen(normalized_name) > 0 && is_actionable (child)) {
                AccessibleItem *item;

                item = g_new0(AccessibleItem, 1);
                Accessible_ref (child);
                item->accessible = child;
                item->name = g_strdup (normalized_name);

                listener->actions = g_slist_append (listener->actions, item);
            }
            SPI_freeString (name);
            g_free (normalized_name);
        }

        if (is_worth_searching (child))
            control_spi_listener_build_actions_list (listener, child, depth+1);

        Accessible_unref (child);
    }
}
示例#5
0
static void search_for_matching_frame( Driver* dp, Accessible* application ) {
    int child_count = Accessible_getChildCount( application );
    int i;
    for ( i = 0; i < child_count; ++i ) {
        Accessible* child = Accessible_getChildAtIndex( application, i );
        check_for_matching_frame( dp, child );
        Accessible_unref( child );
        if ( dp->found_application )
            break;
    }
}
示例#6
0
static void search_for_application( Driver* dp, Accessible* desktop ) {
    int child_count = Accessible_getChildCount( desktop );
    if ( child_count == 0 )
        report_error( "The Desktop has no children. Have you re-logged in?" );

    int i;
    for ( i = 0; i < child_count; ++i ) {
        Accessible* child = Accessible_getChildAtIndex( desktop, i );
        if ( child == NULL )
            continue;

        search_for_matching_frame( dp, child );
        Accessible_unref( child );
        if ( dp->found_application )
            break;
    }
}
SQByteArray * windows_child ( SQByteArray * _parent, long _index )
{
   Accessible * accessibleObject = windows_to_accessible(_parent);
   return windows_from_accessible ( Accessible_getChildAtIndex ( accessibleObject, _index ) );
}