+
    QiI=  c                   s    R t RtRtRtRtRt^ RIt^ RIt^ RIt]P                  ! RR4       ^ R	I
Ht ^ R
I
Ht ^RIHt ^RIHt  ! R R4      t]P%                  4        R# )5Utilities for obtaining relation-related information.z$Id$z
$Revision$z$Date$zGCopyright (c) 2024 Igalia, S.L.Copyright (c) 2024 GNOME Foundation Inc.ZLGPLNAtspiz2.0)r   )GLib)debug)AXObjectc                   s  a  ] tR t^.t o Rt/ t/ t]P                  ! 4       t	]
V 3R lR l4       t]
RCV 3R lR ll4       t]
RCV 3R lR ll4       t]
V 3R lR	 l4       t]
V 3R
 lR l4       t]
V 3R lR l4       t]
V 3R lR l4       t]
V 3R lR l4       t]
V 3R lR l4       t]
V 3R lR l4       t]
V 3R lR l4       t]
V 3R lR l4       t]
V 3R lR l4       t]
V 3R lR l4       t]
V 3R lR l4       t]
V 3R  lR! l4       t]
V 3R" lR# l4       t]
V 3R$ lR% l4       t]
V 3R& lR' l4       t]
V 3R( lR) l4       t]
V 3R* lR+ l4       t]
RDV 3R, lR- ll4       t ]
V 3R. lR/ l4       t!]
V 3R0 lR1 l4       t"]
V 3R2 lR3 l4       t#]
V 3R4 lR5 l4       t$]
V 3R6 lR7 l4       t%]
V 3R8 lR9 l4       t&]
V 3R: lR; l4       t']
V 3R< lR= l4       t(]
V 3R> lR? l4       t)V 3R@ lt*RAt+V t,RB# )EAXUtilitiesRelationr    c                   < V ^8  d   QhRR/#    returnN Zformat__classdict__   "?/usr/lib/python3.14/site-packages/orca/ax_utilities_relation.py__annotate__ AXUtilitiesRelation.__annotate__7   s     : : :    c                 s\     \         P                  ! ^<4       \        P                  4        K-  )z*Clears any data we have cached for objects)timeZsleepr   _clear_all_dictionariesr
   r   r   _clear_stored_dataZ&AXUtilitiesRelation._clear_stored_data6   s     JJrN779r   c                $   < V ^8  d   QhRS[ RR/# r   reasonr	   NZstrr   r   r   r   r   ?   s     0 0 0T 0r   c                s`   R pV '       d   VRV  2,          p\         P                  ! \         P                  VR4       \        P                  ;_uu_ 4        \        P
                  P                  4        \        P                  P                  4        RRR4       R#   + '       g   i     R# ; i)z*AXUtilitiesRelation: Clearing local cache.z	 Reason: TN)r   print_message
LEVEL_INFOr   _lock	RELATIONSZclearTARGETS)r   msgs   & r   r   Z+AXUtilitiesRelation._clear_all_dictionaries>   sr    :Yvh''CE,,c48 &&&))//1''--/ '&&&s   =BB-	c                r   r   r   r   r   r   r   r   J   s     < < <T <r   c                s0    \         P                  V 4       R# )z*Clears all cached information immediately.N)r   r   )r      &r   clear_cache_nowZ#AXUtilitiesRelation.clear_cache_nowI   s     	33F;r   c                r   r   r
   r   r   r   r   r   P   s       r   c                 s~    \         P                  ! \        P                  R7      p RV n        V P                  4        R# )z3Starts thread to periodically clear cached details.)targetTN)	threadingZThreadr   r   ZdaemonZstart)Zthreads    r   start_cache_clearing_threadZ/AXUtilitiesRelation.start_cache_clearing_threadO   s+     !!)<)O)OPr   c                s^   < V ^8  d   QhRS[ P                  RS[S[ P                  ,          /# r   objr	   )r   
AccessiblelistRelationr   r   r   r   r   X   s*      5++ U^^0D r   c                s   \         P                  ! V 4      '       g   . # \        P                  P	                  \        V 4      4      pVe   V#  \        P                  P                  V 4      pTf-   RT .p\        P                  ! \        P                  TR4       . # T\        P                  \        T 4      &   T#   \        P                   d8   pRT 2p\        P                  ! \        P                  TR4       . u Rp?# Rp?ii ; i)z>Returns the list of Atspi.Relation objects associated with objNz1AXUtilitiesRelation: Exception in get_relations: Tz0AXUtilitiesRelation: get_relation_set failed for)r   Zis_validr   r   gethashr   r&   Zget_relation_setr   ZGErrorr   r   r   print_tokens)r%   Z	relationsZerrorr   tokenss   &    r   get_relationsZ!AXUtilitiesRelation.get_relationsW   s       %%I'1155d3i@	 	((99#>I H#NFu//>I3<%%d3i0 {{ 	EeWMC 0 0#t<I	s   B; ;D,D<DDc                sv   < V ^8  d   QhRS[ P                  RS[ P                  RS[ P                  R,          /# )r   r%   relation_typer	   N)r   r&   RelationTyper(   r   r   r   r   r   r   s<     
 

))
 
$	
r   c                s    \         P                  V 4       F&  pV'       g   K  VP                  4       V8X  g   K$  Vu # 	  R# )z,Returns the specified Atspi.Relation for objN)r   r-   Zget_relation_type)r%   r.   relations   && r   _get_relationZ!AXUtilitiesRelation._get_relationq   s8     ,99#>HxH668MI ? r   c                x   < V ^8  d   QhRS[ P                  RS[ P                  RS[S[ P                  ,          /# r   r%   r.   r	   r   r&   r/   r'   r   r   r   r   r      sA     M MM.3.@.@M	e	Mr   c                s,    \         P                  W4      # )DReturns the list of targets with the specified relation type to obj.)r   _get_relation_targets)r%   r.   s   &&r   "get_relation_targets_for_debuggingZ6AXUtilitiesRelation.get_relation_targets_for_debugging~   s     #88LLr   c                r2   r3   r4   r   r   r   r   r      s>         ))  
e	 r   c                s   \         P                  P                  \        V 4      / 4      pVP                  V4      p\	        V\
        4      '       d   V# \         P                  W4      pVf#   . W!&   V\         P                  \        V 4      &   . # \        4       p\        VP                  4       4       F/  pVP                  V4      ;p'       g   K  VP                  V4       K1  	  \        P                  P                  .pW9  dE   W9   d?   RV RVR.p	\        P                   ! \        P"                  V	R4       VP%                  V 4       \        V4      p
WV&   V\         P                  \        V 4      &   V
# )r5   zAXUtilitiesRelation: zis in its ownztarget listT)r   r   r)   r*   Z
isinstancer'   r1   ZsetZrangeZget_n_targetsZ
get_targetZaddr   r/   	MEMBER_OFr   r+   r   Zremove)r%   r.   Zcached_targetsZcached_relationr0   targetsZir!   Ztype_includes_objectr,   results   &&         r   r6   Z)AXUtilitiesRelation._get_relation_targets   s@    -4488cBG(,,];ot,,""&44SH,.N)5C''S	2I%x--/0A!,,Q//v//F# 1
 !& 2 2 < <=4-sO]TabFu//>NN3g(.}%1?##DI.r   c                ^   < V ^8  d   QhRS[ P                  RS[S[ P                  ,          /# r$   r   r&   r'   r   r   r   r   r      ,      %"2"2 tE<L<L7M r   c                    \         P                  V \        P                  P                  4      pRV RV.p\
        P                  ! \
        P                  VR4       V# )z?Returns a list of accessible objects that obj is controlled by.AXUtilitiesRelation:zis controlled by:Tr   r6   r   r/   ZCONTROLLED_BYr   r+   r   r%   r:   r,      &  r   get_is_controlled_byZ(AXUtilitiesRelation.get_is_controlled_by   N     %::3@R@R@`@`a(#/BFK5++VT:r   c                r;   r$   r<   r   r   r   r   r      ,      5#3#3 U=M=M8N r   c                r>   )zDReturns a list of accessible objects that obj is the controller for.r?   zis controller for:T)r   r6   r   r/   ZCONTROLLER_FORr   r+   r   rA   rB   r   get_is_controller_forZ)AXUtilitiesRelation.get_is_controller_for   N     %::3@R@R@a@ab(#/CVL5++VT:r   c                r;   r$   r<   r   r   r   r   r      ,      !1!1 d5;K;K6L r   c                r>   )z>Returns a list of accessible objects that obj is described by.r?   zis described by:T)r   r6   r   r/   ZDESCRIBED_BYr   r+   r   rA   rB   r   get_is_described_byZ'AXUtilitiesRelation.get_is_described_by   N     %::3@R@R@_@_`(#/A6J5++VT:r   c                r;   r$   r<   r   r   r   r   r      s,      E$4$4 e>N>N9O r   c                r>   )zEReturns a list of accessible objects that obj is the description for.r?   zis description for:T)r   r6   r   r/   ZDESCRIPTION_FORr   r+   r   rA   rB   r   get_is_description_forZ*AXUtilitiesRelation.get_is_description_for   sN     %::3@R@R@b@bc(#/DfM5++VT:r   c                r;   r$   r<   r   r   r   r   r      s,      )) d53C3C.D r   c                r>   )zBReturns a list of accessible objects that contain details for obj.r?   zhas details in:T)r   r6   r   r/   ZDETAILSr   r+   r   rA   rB   r   get_detailsZAXUtilitiesRelation.get_details   sN     %::3@R@R@Z@Z[(#/@&I5++VT:r   c                r;   r$   r<   r   r   r   r   r      ,       0 0 T%:J:J5K r   c                r>   )zCReturns a list of accessible objects that obj contains details for.r?   zcontains details for:T)r   r6   r   r/   ZDETAILS_FORr   r+   r   rA   rB   r   get_is_details_forZ&AXUtilitiesRelation.get_is_details_for   sN     %::3@R@R@^@^_(#/FO5++VT:r   c                r;   r$   r<   r   r   r   r   r      rM   r   c                r>   )z=Returns a list of accessible objects that obj is embedded by.r?   zis embedded by:T)r   r6   r   r/   ZEMBEDDED_BYr   r+   r   rA   rB   r   get_is_embedded_byZ&AXUtilitiesRelation.get_is_embedded_by   N     %::3@R@R@^@^_(#/@&I5++VT:r   c                r;   r$   r<   r   r   r   r   r      s,      (( T%2B2B-C r   c                r>   )z5Returns a list of accessible objects that obj embeds.r?   zembeds:T)r   r6   r   r/   ZEMBEDSr   r+   r   rA   rB   r   
get_embedsZAXUtilitiesRelation.get_embeds   sM     %::3@R@R@Y@YZ(#y&A5++VT:r   c                r;   r$   r<   r   r   r   r   r      ,      e.. 48H8H3I r   c                r>   )zLReturns a list of accessible objects that obj contains an error message for.r?   zis error for:T)r   r6   r   r/   Z	ERROR_FORr   r+   r   rA   rB   r   get_is_error_forZ$AXUtilitiesRelation.get_is_error_for   M     %::3@R@R@\@\](#G5++VT:r   c                r;   r$   r<   r   r   r   r   r      s,      u// D9I9I4J r   c                r>   )zKReturns a list of accessible objects that contain an error message for obj.r?   zhas error messages in:T)r   r6   r   r/   ZERROR_MESSAGEr   r+   r   rA   rB   r   get_error_messageZ%AXUtilitiesRelation.get_error_message   sN     %::3@R@R@`@`a(#/GP5++VT:r   c                r;   r$   r<   r   r   r   r   r     s,      E,, e6F6F1G r   c                r>   )z9Returns a list of accessible objects that obj flows from.r?   zflows from:T)r   r6   r   r/   Z
FLOWS_FROMr   r+   r   rA   rB   r   get_flows_fromZ"AXUtilitiesRelation.get_flows_from  sM     %::3@R@R@]@]^(#}fE5++VT:r   c                r;   r$   r<   r   r   r   r   r     s,      %** tE4D4D/E r   c                r>   )z7Returns a list of accessible objects that obj flows to.r?   z	flows to:T)r   r6   r   r/   ZFLOWS_TOr   r+   r   rA   rB   r   get_flows_toZ AXUtilitiesRelation.get_flows_to  sM     %::3@R@R@[@[\(#{FC5++VT:r   c                r;   r$   r<   r   r   r   r   r     rR   r   c                r>   )z?Returns a list of accessible objects that obj is the label for.r?   zis label for:T)r   r6   r   r/   Z	LABEL_FORr   r+   r   rA   rB   r   get_is_label_forZ$AXUtilitiesRelation.get_is_label_for  rT   r   c                sd   < V ^8  d   QhRS[ P                  RS[RS[S[ P                  ,          /# )r   r%   exclude_ancestorsr	   )r   r&   boolr'   r   r   r   r   r     s8       
e	r   c                s   a  V 3R lp\         P                  S \        P                  P                  4      pV'       d   \        \        W#4      4      pRS RV.p\        P                  ! \        P                  VR4       V# )z=Returns a list of accessible objects that obj is labelled by.c                 s<   < \         P                  ! SV 4      '       * # )N)r   Zis_ancestor)Zaccr%   s   &r   is_not_ancestorZ?AXUtilitiesRelation.get_is_labelled_by.<locals>.is_not_ancestor%  s    ++C555r   r?   zis labelled by:T)
r   r6   r   r/   ZLABELLED_BYr'   Zfilterr   r+   r   )r%   rY   r[   r:   r,   s   f&   r   get_is_labelled_byZ&AXUtilitiesRelation.get_is_labelled_by  sf    	6 %::3@R@R@^@^_&9:F(#/@&I5++VT:r   c                r;   r$   r<   r   r   r   r   r   1  rR   r   c                r>   )z=Returns a list of accessible objects that obj is a member of.r?   zis member of:T)r   r6   r   r/   r8   r   r+   r   rA   rB   r   get_is_member_ofZ$AXUtilitiesRelation.get_is_member_of0  rT   r   c                r;   r$   r<   r   r   r   r   r   :  r=   r   c                r>   )zCReturns a list of accessible objects that obj is the node child of.r?   zis node child of:T)r   r6   r   r/   ZNODE_CHILD_OFr   r+   r   rA   rB   r   get_is_node_child_ofZ(AXUtilitiesRelation.get_is_node_child_of9  rD   r   c                r;   r$   r<   r   r   r   r   r   C  rE   r   c                r>   )zDReturns a list of accessible objects that obj is the node parent of.r?   zis node parent of:T)r   r6   r   r/   ZNODE_PARENT_OFr   r+   r   rA   rB   r   get_is_node_parent_ofZ)AXUtilitiesRelation.get_is_node_parent_ofB  rG   r   c                r;   r$   r<   r   r   r   r   r   L  s,      U%5%5 $u?O?O:P r   c                r>   )zDReturns a list of accessible objects that obj is a parent window of.r?   zis parent window of:T)r   r6   r   r/   ZPARENT_WINDOW_OFr   r+   r   rA   rB   r   get_is_parent_window_ofZ+AXUtilitiesRelation.get_is_parent_window_ofK  sN     %::3@R@R@c@cd(#/EvN5++VT:r   c                r;   r$   r<   r   r   r   r   r   U  rR   r   c                r>   )z?Returns a list of accessible objects that obj is the popup for.r?   zis popup for:T)r   r6   r   r/   Z	POPUP_FORr   r+   r   rA   rB   r   get_is_popup_forZ$AXUtilitiesRelation.get_is_popup_forT  rT   r   c                r;   r$   r<   r   r   r   r   r   ^  rH   r   c                r>   )z@Returns a list of accessible objects that obj is a subwindow of.r?   zis subwindow of:T)r   r6   r   r/   ZSUBWINDOW_OFr   r+   r   rA   rB   r   get_is_subwindow_ofZ'AXUtilitiesRelation.get_is_subwindow_of]  rJ   r   c                r;   r$   r<   r   r   r   r   r   g  rM   r   c                r>   )zAReturns a list of accessible objects that obj is the tooltip for.r?   zis tooltip for:T)r   r6   r   r/   ZTOOLTIP_FORr   r+   r   rA   rB   r   get_is_tooltip_forZ&AXUtilitiesRelation.get_is_tooltip_forf  rP   r   c                sT   < V ^8  d   QhRS[ P                  RS[ P                  RS[/# )r   obj1obj2r	   r   r&   rZ   r   r   r   r   r   p  s/      e&6&6 e>N>N SW r   c                s    \         P                  V \        P                  P                  4      pW9   pRV RVRV 2.p\
        P                  ! \
        P                  VR4       V# )z+Returns True if obj1 is controlled by obj2.r?   zis controlled byz: Tr@   )rd   re   r9   r:   r,   s   &&   r   object_is_controlled_byZ+AXUtilitiesRelation.object_is_controlled_byo  s]     &;;D%BTBTBbBbc($0BDBvh-X5++VT:r   c                s:   < V ^8  d   QhRS[ P                  RS[/# r$   rf   r   r   r   r   r   z  s!     : :!1!1 :d :r   c                s6    \         P                  V 4      '       * # )z0Returns True if obj does not have any relations.)r   r-   )r%   r   r   object_is_unrelatedZ'AXUtilitiesRelation.object_is_unrelatedy  s     '44S999r   c                s   < V ^8  d   Qh/ S[ S[S[S[P                  ,          3,          ;R&   S[ S[S[ S[P
                  S[S[P                  ,          3,          3,          ;R&   # )r   r   r   )ZdictZintr'   r   r(   r/   r&   r   r   r   r   r   .   sW      Cenn--.3  #tE..U5E5E0FFGGHM	 r   r
   N) )T)-Z__name__Z
__module__Z__qualname__Z__firstlineno____doc__r   r   r"   ZLockr   Zstaticmethodr   r   r    r#   r-   r1   r7   r6   rC   rF   rI   rK   rL   rN   rO   rQ   rS   rU   rV   rW   rX   r\   r]   r^   r_   r`   ra   rb   rc   rg   rh   Z__annotate_func__Z__static_attributes__Z__classdictcell__)r   s   @r   r   r   .   s    ?13IKMGNNE: : 0 0 0 < < <
    2 
 
 M M    D                             "                 : :Y
  r   r   )rj   Z__id__Z__version__Z__date__Z__copyright__Z__license__r"   r   ZgiZrequire_versionZgi.repositoryr   r   ri   r   Z	ax_objectr   r   r#   r
   r   r   <module>rk      se   2 <;   	   7E "    O: O:b
  / / 1r   