Re: [g-a-devel]Question about Accessible_getStateSet?



This is a bug in atk. I have logged bug 116621 about it and committed fix to CVS 
HEAD.

Padraig

> 
> Mario,
> 
> It looks to me that AccessibleState_isEmpty is returing the wrong value.  
> That is, it returns TRUE when there are states and FALSE if there are not.
> 
> Can you confirm?
> 
> Padraig
> 
> > Hi.
> > 
> > I am developing a small Guile binding for AT-SPI for experimentation
> > purposes.  While some things are quite nicely working already
> > (getting the role, name and description of objects),
> > I can not get the AccessibleStateSet stuff to work.  From looking
> > at the code, it should, but I always seem to detect a
> > empty set, even if AccessibleStateSet_isEmpty!=TRUE.
> > 
> > Is there anything special about the StateSets I might have missed?
> > 
> > Below is the code I use to extract an accessible state set
> > into a Scheme (Guile) list of symbols.  The printf's are in
> > there in case I messed up the symbol creation, but I never saw
> > any printf output, even if I recursively look at *every*
> > object on the whole desktop, like this:
> > 
> > gspi> (define (descend node proc)
> > ... (if (> (length (children node)) 0)
> > ... (map (lambda (node) (descend node proc)) (children node))
> > ... (proc node)))
> > gspi> (map get-name (children (desktop 0)))
> > ("gnome-session" "nautilus" "gnome-panel" "mixer_applet2" "gnopernicus" 
> "srcore")
> > gspi> (define gnopi (car (cddddr (children (desktop 0)))))
> > gspi> gnopi
> > #<Accessible 0x81118f8, name="gnopernicus", role=application>
> > gspi> (descend gnopi get-role)
> > ((((push-button push-button push-button push-button push-button push-button 
> push-button push-button))))
> > gspi> (descend gnopi states)
> > ((((() () () () () () () ()))))
> > 
> > No matter what, I always get a empty list of states.
> > 
> > gspi> (descend (desktop 0) states)
> > (() ((((((() ((() () () () () () () (() () () () ()) () (() () ()) () () () 
() 
> () () () () () ()) (() () () () () () () () () () () () () () () () () () () 
> ())(() () () () () () () () () () (() () () () () () () () () ()) () () () () 
() 
> () () () () () () () () ()) (() () () () () () () () () () () () ()) (() () () 
> ()) () () (() () () ()) (() ())))) ((() ((()) ((() (()))) (()) ((() (()))) 
(()) 
> (()) (()) () (()) (()) (()) () (())))) ((() (((((((((((()) ())))) () (((() () 
() 
> () () ()) ()))))) (()))) (())))) (((((() () () ())))))) (())))) ((((() () () 
() 
> () ((((((())))) (((((() () () ()))))) ((((((() () () ()))))))))))) ((((()) 
(((() 
> () () () () ()) (() () () () () () () () () () () () () ()) (()) (() ()) (() 
()) 
> (() () () () () () () () () () () () () ()) (()) (() () ()) (() () () () ()) 
() 
> () () () (((() () () () ()) (() () () () () () () () () () () () () () () () 
() 
> () () () () ()) (()) (() () () () () () ()) (() () () () () () () () () () () 
() 
> () () () () () () ()) (() () () () () () () () () () () () () () ()) (() () () 
> () () ()) (() () () () () () () ()) (() () () () () () () () () () () () () () 
> () () () () ()) (() () () ()) (() () () () () () () () () () () () () () () () 
> () () ()) ()) (() () () ()) (() () () ()) (() () ()) (() () () ())) (() () 
())) 
> (() () () (()) () () () () ())) (() () ((((())))) (((((())))))) (()) (()))))) 
() 
> ((((() () () () () () () ())))) ())
> > 
> > Does anyone have an idea what I might be doing wrong?
> > 
> > SCM_DEFINE (aobj_stateset, "states", 1, 0, 0, (SCM smob), "")
> > {
> >   Accessible *acc;
> >   AccessibleStateSet *states;
> >   SCM ret = SCM_EOL;
> > 
> >   SCM_ASSERT (SCM_SMOB_PREDICATE (aobj_tag, smob), smob, SCM_ARG1, 
"states");
> > 
> >   acc = (Accessible *) SCM_SMOB_DATA (smob);
> >   states = Accessible_getStateSet (acc);
> >   if (!states) {
> >     return SCM_BOOL_F;
> >   } else if (AccessibleStateSet_isEmpty(states) == FALSE) {
> >     if (AccessibleStateSet_contains(states, SPI_STATE_INVALID)) {
> >       printf("invalid\n");
> >       ret = scm_cons (scm_str2symbol("invalid"), ret);
> >     }
> >     if (AccessibleStateSet_contains(states, SPI_STATE_ACTIVE)) {
> >       printf("active\n");
> >       ret = scm_cons (scm_str2symbol("active"), ret);
> >     }
> >     if (AccessibleStateSet_contains(states, SPI_STATE_ARMED)) {
> >       printf("armed\n");
> >       ret = scm_cons (scm_str2symbol("armed"), ret);
> >     }
> >     if (AccessibleStateSet_contains(states, SPI_STATE_BUSY)) {
> >       printf("busy\n");
> >       ret = scm_cons (scm_str2symbol("busy"), ret);
> >     }
> >     if (AccessibleStateSet_contains(states, SPI_STATE_CHECKED)) {
> >       printf("checked\n");
> >       ret = scm_cons (scm_str2symbol("checked"), ret);
> >     }
> >     if (AccessibleStateSet_contains(states, SPI_STATE_COLLAPSED)) {
> >       printf("collapsed\n");
> >       ret = scm_cons (scm_str2symbol("collapsed"), ret);
> >     }
> >     if (AccessibleStateSet_contains(states, SPI_STATE_DEFUNCT)) {
> >       printf("defunct\n");
> >       ret = scm_cons (scm_str2symbol("defunct"), ret);
> >     }
> >     if (AccessibleStateSet_contains(states, SPI_STATE_EDITABLE)) {
> >       printf("editable\n");
> >       ret = scm_cons (scm_str2symbol("editable"), ret);
> >     }
> >     if (AccessibleStateSet_contains(states, SPI_STATE_ENABLED)) {
> >       printf("enabled\n");
> >       ret = scm_cons (scm_str2symbol("enabled"), ret);
> >     }
> >     if (AccessibleStateSet_contains(states, SPI_STATE_EXPANDABLE)) {
> >       printf("expandable\n");
> >       ret = scm_cons (scm_str2symbol("expandable"), ret);
> >     }
> >     if (AccessibleStateSet_contains(states, SPI_STATE_EXPANDED)) {
> >       printf("expanded\n");
> >       ret = scm_cons (scm_str2symbol("expanded"), ret);
> >     }
> >     if (AccessibleStateSet_contains(states, SPI_STATE_FOCUSABLE)) {
> >       printf("focusable\n");
> >       ret = scm_cons (scm_str2symbol("focusable"), ret);
> >     }
> >     if (AccessibleStateSet_contains(states, SPI_STATE_FOCUSED)) {
> >       printf("focused\n");
> >       ret = scm_cons (scm_str2symbol("focused"), ret);
> >     }
> >     if (AccessibleStateSet_contains(states, SPI_STATE_HORIZONTAL)) {
> >       printf("horizontal\n");
> >       ret = scm_cons (scm_str2symbol("horizontal"), ret);
> >     }
> >     if (AccessibleStateSet_contains(states, SPI_STATE_ICONIFIED)) {
> >       printf("iconified\n");
> >       ret = scm_cons (scm_str2symbol("iconified"), ret);
> >     }
> >     if (AccessibleStateSet_contains(states, SPI_STATE_MODAL)) {
> >       printf("modal\n");
> >       ret = scm_cons (scm_str2symbol("modal"), ret);
> >     }
> >     if (AccessibleStateSet_contains(states, SPI_STATE_MULTI_LINE)) {
> >       printf("multi_line\n");
> >       ret = scm_cons (scm_str2symbol("multi_line"), ret);
> >     }
> >     if (AccessibleStateSet_contains(states, SPI_STATE_MULTISELECTABLE)) {
> >       printf("multiselectable\n");
> >       ret = scm_cons (scm_str2symbol("multiselectable"), ret);
> >     }
> >     if (AccessibleStateSet_contains(states, SPI_STATE_OPAQUE)) {
> >       printf("opaque\n");
> >       ret = scm_cons (scm_str2symbol("opaque"), ret);
> >     }
> >     if (AccessibleStateSet_contains(states, SPI_STATE_PRESSED)) {
> >       printf("pressed\n");
> >       ret = scm_cons (scm_str2symbol("pressed"), ret);
> >     }
> >     if (AccessibleStateSet_contains(states, SPI_STATE_RESIZABLE)) {
> >       printf("resizable\n");
> >       ret = scm_cons (scm_str2symbol("resizable"), ret);
> >     }
> >     if (AccessibleStateSet_contains(states, SPI_STATE_SELECTABLE)) {
> >       printf("selectable\n");
> >       ret = scm_cons (scm_str2symbol("selectable"), ret);
> >     }
> >     if (AccessibleStateSet_contains(states, SPI_STATE_SELECTED)) {
> >       printf("selected\n");
> >       ret = scm_cons (scm_str2symbol("selected"), ret);
> >     }
> >     if (AccessibleStateSet_contains(states, SPI_STATE_SENSITIVE)) {
> >       printf("sensitive\n");
> >       ret = scm_cons (scm_str2symbol("sensitive"), ret);
> >     }
> >     if (AccessibleStateSet_contains(states, SPI_STATE_SHOWING)) {
> >       printf("showing\n");
> >       ret = scm_cons (scm_str2symbol("showing"), ret);
> >     }
> >     if (AccessibleStateSet_contains(states, SPI_STATE_SINGLE_LINE)) {
> >       printf("single_line\n");
> >       ret = scm_cons (scm_str2symbol("single_line"), ret);
> >     }
> >     if (AccessibleStateSet_contains(states, SPI_STATE_STALE)) {
> >       printf("stale\n");
> >       ret = scm_cons (scm_str2symbol("stale"), ret);
> >     }
> >     if (AccessibleStateSet_contains(states, SPI_STATE_TRANSIENT)) {
> >       printf("transient\n");
> >       ret = scm_cons (scm_str2symbol("transient"), ret);
> >     }
> >     if (AccessibleStateSet_contains(states, SPI_STATE_VERTICAL)) {
> >       printf("vertical\n");
> >       ret = scm_cons (scm_str2symbol("vertical"), ret);
> >     }
> >     if (AccessibleStateSet_contains(states, SPI_STATE_VISIBLE)) {
> >       printf("visible\n");
> >       ret = scm_cons (scm_str2symbol("visible"), ret);
> >     }
> >     if (AccessibleStateSet_contains(states, SPI_STATE_MANAGES_DESCENDANTS)) 
{
> >       printf("manages_descendants\n");
> >       ret = scm_cons (scm_str2symbol("manages_descendants"), ret);
> >     }
> >   }
> >   if (states) {
> >     AccessibleStateSet_unref (states);
> >   }
> >   return ret;
> > }
> > 
> > -- 
> > CYa,
> >   Mario | Debian Developer <URL:http://debian.org/>
> >         | Get my public key via finger mlang db debian org
> >         | 1024D/7FC1A0854909BCCDBE6C102DDFFC022A6B113E44
> > _______________________________________________
> > Gnome-accessibility-devel mailing list
> > Gnome-accessibility-devel gnome org
> > http://mail.gnome.org/mailman/listinfo/gnome-accessibility-devel
> > 
> 
> _______________________________________________
> Gnome-accessibility-devel mailing list
> Gnome-accessibility-devel gnome org
> http://mail.gnome.org/mailman/listinfo/gnome-accessibility-devel




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]