
    g
f;                         d Z dZdZdZdZdZddlZ ej                  dd	       dd
lm	Z	 ddl
Z
ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ  G d dej(                        Zy)z$Custom script utilities for Chromiumz$Id$z
$Revision$z$Date$z$Copyright (c) 2018-2019 Igalia, S.L.LGPL    NAtspiz2.0)r   )debug)focus_manager)web)AXObject)AXUtilitiesc                        e Zd Z fdZ fdZ fdZ fdZd Zd Zd Z	 fdZ
d	 Zd
 Zd Zd fd	Zd Zd Zd Zd fd	Z fdZddZd ZddZ fdZd fd	Z fdZ xZS )	Utilitiesc                 \    t         |   |       i | _        i | _        i | _        i | _        y N)super__init___isStaticTextLeaf_isPseudoElement_isListItemMarker_topLevelObject)selfscript	__class__s     Q/usr/lib/python3/dist-packages/orca/scripts/toolkits/Chromium/script_utilities.pyr   zUtilities.__init__,   s0     !# "!#!    c                 Z    t         |           i | _        i | _        i | _        i | _        y r   )r   clearCachedObjectsr   r   r   r   )r   r   s    r   r   zUtilities.clearCachedObjects3   s.    "$!# "!#!r   c                 4   |r| j                  |      st        | 	  |      S t        j                  |      ry| j                  |      ry| j                  j                  t        |            }||S t        j                  j                  t        j                  j                  g}t        j                  |      |v xr | j                  |      dv }|r*d|dg}t        j                   t        j"                  |d       || j                  t        |      <   |S )NF)N br	CHROMIUM:zbelieved to be static text leafT)inDocumentContentr   isStaticTextLeafr   get_child_countisListItemMarkerr   gethashr   RoleSTATICTEXTget_role_getTagr   printTokens
LEVEL_INFO)r   objrvrolestokensr   s        r   r    zUtilities.isStaticTextLeaf:   s    ..s37+C00##C(  %##''S	2>I""EJJOO4s#u,Vc1BFV1V!3(IJFe..=,.tCy)	r   c                 J   |r| j                  |      st        | 	  |      S | j                  j	                  t        |            }||S | j                  |      dv }|r*d|dg}t        j                  t        j                  |d       || j                  t        |      <   |S )N)z<pseudo:before>z<pseudo:after>r   zbelieved to be pseudo elementT)
r   r   isPseudoElementr   r#   r$   r)   r   r*   r+   )r   r,   r-   r/   r   s       r   r1   zUtilities.isPseudoElementQ   s    ..s37*3//""&&tCy1>I\\#"GG!3(GHFe..=+-d3i(	r   c                    |r| j                  |      sy| j                  j                  t        |            }||S d}t	        j
                  |      }t        j                  |      rw| j                  |      }|dk(  rd}n^|rd}nYt	        j                  |      dkD  rt	        j                  |d      |k(  }n't	        j                  |      | j                  |      k7  }|| j                  t        |      <   |S )NFz::markerT   r   )r   r   r#   r$   r   
get_parentr	   is_list_itemr)   r!   	get_childget_namedisplayedText)r   r,   r-   parenttags        r   r"   zUtilities.isListItemMarkera   s    ..s3##''S	2>I$$S)##F+,,s#Cj ))&1A5''2c9&&s+t/A/A&/II,.tCy)	r   c                     t        j                  |      syt        j                  |      }| j	                  |      dk7  ryt        j
                  |       S )NFselect)r	   is_menur   r4   r)   is_expanded)r   r,   r9   s      r   isMenuInCollapsedSelectElementz(Utilities.isMenuInCollapsedSelectElementy   sK    ""3'$$S)<<8+**6222r   c                 Z    t        j                  |      xr t        j                  |      S r   )r	   is_menu_item	has_popupr   r,   s     r   treatAsMenuzUtilities.treatAsMenu   s%     '',K1F1Fs1KKr   c                     | j                  t        j                         j                               xr t        |   |      S r   )rD   r   
getManagerget_locus_of_focusr   isPopupMenuForCurrentItemr   r,   r   s     r   rH   z#Utilities.isPopupMenuForCurrentItem   s<    
  8 8 : M M OP 71#6	7r   c                     t        j                  |      syt        j                  |      ryt        j                  |      dk7  ryt        j
                  t        j                  |d            S )NFr3   r   )r	   is_framer   r7   r!   is_menu_barr6   rC   s     r   isFrameForPopupMenuzUtilities.isFrameForPopupMenu   sZ     ##C(S!##C(A-&&x'9'9#q'ABBr   c                 p    t        j                  |      xr  | j                  | j                  |            S r   )r	   r=   rM   topLevelObjectrC   s     r   isTopLevelMenuzUtilities.isTopLevelMenu   s/    ""3'^D,D,DTEXEXY\E],^^r   c                     | j                  |      sy t        j                  |t        j                        }d|d|g}t        j                  t
        j                  |d       |S )NzCHROMIUM: Popup menu for:T)rM   r   find_descendantr	   r=   r   r*   r+   )r   r,   menur/   s       r   popupMenuForFramezUtilities.popupMenuForFrame   sV    '',''[-@-@A,c3=%**FD9r   c                    |sy t         	|   |      }t        j                  |      | j	                         v rU| j                  |      s|S t        j                  |      }d|d|g}t        j                  t        j                  |d       |S | j                  j                  t        |            }||S d|d|g}t        j                  t        j                  |d       t        j                  |xs t        j                  |            s|S |}t        j                  |      rt        j                  |      }||S t        j                  |      sAt        j                   |      r*d|g}t        j                  t        j                  |d       n|S | j#                  |      }|r<| j                  |      }d|d|g}t        j                  t        j                  |d       || j                  t        |      <   |S )NzCHROMIUM: Top level object forisTz'CHROMIUM: WARNING: Top level object forz2CHROMIUM: WARNING: Suspected bogus role on listbox)r   rO   r   r(   _topLevelRolesisFindContainerr4   r   r*   r+   r   r#   r$   r	   r5   is_list_boxis_redundant_objectautocompleteForPopup)
r   r,   useFallbackSearchresultr9   r/   cachedlistboxautocompleter   s
            r   rO   zUtilities.topLevelObject   s   ',V$(;(;(==''/!,,V4:CvN!!%"2"2FDA%%))$s)4M;S$O%**FD9 (()L0G0G0LMM##C())'2G?M &&w/..w7NPWX!!%"2"2FDA009((6F6dFSFe..=*0T#Y'r   c                     t        j                  |t        j                  j                        }|sy |j                  d      }t        j                  |      r|S y )Nr   )r   get_relationr   RelationType	POPUP_FOR
get_targetr	   is_autocomplete)r   r,   relationtargets       r   r\   zUtilities.autocompleteForPopup   sL    ((e.@.@.J.JK$$Q'&&v.Mr   c                 P    |r| j                  |      ry| j                  |      d uS )NF)r   r\   rC   s     r   isBrowserAutocompletePopupz$Utilities.isBrowserAutocompletePopup   s+    d,,S1((-T99r   c                     t        j                  |j                        sy|j                  j	                  d      r| j                         \  }}|dv ryy)NFzobject:text-caret-moved)DownUpT)r	   rg   sourcetype
startswithlastKeyAndModifiers)r   eventlastKeymodss       r   isRedundantAutocompleteEventz&Utilities.isRedundantAutocompleteEvent   sJ    **5<<8::  !:; 446MGT.(r   c                     t         |   |||       t        j                  |t        j
                        }|Ad|d|g}t        j                  t        j                  |d       t        j                  |       y y )Nz!CHROMIUM: HACK: Grabbing focus onz's ancestorT)
r   setCaretPositionr   find_ancestorr	   is_linkr   r*   r+   
grab_focus)r   r,   offsetdocumentFramelinkr/   r   s         r   rx   zUtilities.setCaretPosition   sm     fm< %%c;+>+>?93tTFe..=% r   c                     t         |   |      sy|j                  j                  d      syt	        j
                  |j                        ryd}t        j                  t        j                  |d       y)NFzobject:children-changed:addTzDCHROMIUM: Event is believed to be redundant live region notification)
r   handleAsLiveRegionrp   rq   r	   is_tableany_datar   printMessager+   )r   rs   msgr   s      r   r   zUtilities.handleAsLiveRegion  s`    w)%0zz$$%BC /T5++S$7r   c                 >   |xs | j                   }|syt        j                  |      }t        |      dk7  ry|d   }t	        j
                  |dd       t        t        j                  dt	        j                  |                  dk(  rt	        j                  |      S y)Nr   r3   r   Fz/Ensuring we have correct name for find results.z\d+   )	_findContainerr	   find_all_status_barslenr   clear_cacherefindallr7   )r   root
statusBarsbars       r   getFindResultsCountzUtilities.getFindResultsCount  s    *t** 55d;
z?amS%)Z[rzz&("3"3C"89:a?$$S))r   c                 0   |r| j                  |      ry|| j                  k(  ryt        j                  |      sy| j	                  |      }|r4d|d|dg}t        j                  t
        j                  |d       || _        yt        t        j                  |            dk7  r+d|dg}t        j                  t
        j                  |d       yt        t        j                  |            dk7  r+d|d	g}t        j                  t
        j                  |d       yt        t        j                  |            dk7  r+d|d
g}t        j                  t
        j                  |d       yd|dg}t        j                  t
        j                  |d       || _        y)NFTr   z'believed to be find-in-page container ()r3   z7not believed to be find-in-page container (entry count)   z8not believed to be find-in-page container (button count)z;not believed to be find-in-page container (separator count)z:believed to be find-in-page container (accessibility tree))r   r   r	   	is_dialogr   r   r*   r+   r   find_all_entriesfind_all_push_buttonsfind_all_separatorsr   r,   r^   r/   s       r   rY   zUtilities.isFindContainer&  su   d,,S1$%%%$$S)))#.!3(QSY[^_Fe..="%D {++C01Q6!3(abFe..={0056!;!3(bcFe..={..s349!3SUFe..=s$`a%**FD9!r   c                    |xs" t        j                         j                         }t        j                  |      st        j
                  |      sy| j                  |      ry| j                  t        j                  |t        j                              }|r*d|dg}t        j                  t        j                  |d       |S )NFr   z"believed to be find-in-page widgetT)r   rF   rG   r	   is_entryis_push_buttonr   rY   r   ry   r   r   r*   r+   r   s       r   inFindContainerzUtilities.inFindContainerR  s    D]--/BBD$$S)[-G-G-L!!#&%%h&<&<S+BWBW&XY!3(LMFe..=r   c                 J    t         |   |      sy| j                  |      ryy)NFT)r   isHiddenr?   rI   s     r   r   zUtilities.isHidden`  s'    w$..s3r   c                     |sg S | j                  |      dv r+d|g}t        j                  t        j                  |d       g S t        |   |||      S )N)precodez.CHROMIUM: Returning 0 descendants for pre/codeT)r)   r   r*   r+   r   findAllDescendants)r   r   	includeIf	excludeIfr/   r   s        r   r   zUtilities.findAllDescendantsi  sY    I <<0FMFe..=Iw)$	9EEr   c                 B   | j                  |      ry| j                  |      rt        |   |      S t	        j
                  t	        j                  |            D ]A  }| j                  |      d|d|dg}t        j                  t        j                  |d        y y)NTr   z
's siblingzhas posinset.F)isDescriptionListDescriptionr   r   "_shouldCalculatePositionAndSetSizer   iter_childrenr4   getPositionInSetr   r*   r+   )r   r,   siblingr/   r   s       r   r   z,Utilities._shouldCalculatePositionAndSetSizev  s     ,,S1!!#&7=cBB  --h.A.A#.FG 	G$$W-9%sL'?S!!%"2"2FDA		 r   )Fr   )NN)__name__
__module____qualname__r   r   r    r1   r"   r?   rD   rH   rM   rP   rU   rO   r\   rk   rv   rx   r   r   rY   r   r   r   r   __classcell__)r   s   @r   r   r   *   s    "". 03L7
C_0d	:	&("*XF r   r   )__doc____id____version____date____copyright____license__girequire_versiongi.repositoryr   r   orcar   r   orca.scriptsr   orca.ax_objectr   orca.ax_utilitiesr	   r    r   r   <module>r      s_   , +6 	   7E "  	    # )c cr   