
    g
f&                     
   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m	Z	 ddl
Z
ddl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 ddlmZ ddlmZ ddlmZ ddlmZ  G d d      Z e       Zd Zy)z$Id$z
$Revision$z$Date$zCopyright (c) 2011. Orca Team.LGPL    NAtspiz2.0)r   )GLib   )debug)focus_manager)input_event)orca_modifier_manager)
orca_state)script_manager)settings)AXObject)AXUtilitiesc                       e Zd Zd Zd Zd ZddZd Zd ZddZ	d	 Z
d
 Zd Zd Zd Zd Zd Zed        ZddZd Zd Zd ZddZd Zd Zd Zd Zd Zd Zd Zy) EventManagerc                    t        j                  t         j                  dd       i | _        d| _        d| _        t        j                  d      | _        d| _	        t        j                         | _        t        j                  j                  | j                         | _        d t$        _        d | _        t        j                  t         j                  dd       y )NzEVENT MANAGER: InitializingTFr   zEvent manager initialized)r   printMessage
LEVEL_INFO_scriptListenerCounts_active_pausedqueueQueue_eventQueue_gidleId	threadingLock
_gidleLockr   EventListenernew_enqueue_object_event	_listenerr   devicebypassedKeyselfs    4/usr/lib/python3/dist-packages/orca/event_manager.py__init__zEventManager.__init__0   s    5++-JDQ%'"${{1~ (~~/,,001K1KL 
5++-H$O    c                    t        j                  t         j                  dd       t        j                  j                         t        _        dt        j                  _        t        j                  j                  | j                        t        j                  _        d| _        t        j                  t         j                  dd       y)z,Called when this event manager is activated.zEVENT MANAGER: ActivatingTr   zEVENT MANAGER: ActivatedN)r   r   r   r   Devicer    r   r#   event_countadd_key_watcher_processKeyboardEventkey_watcherr   r%   s    r'   activatezEventManager.activate=   s     	5++-H$O!LL,,.
()
%--d.H.HI 	% 5++-GNr)   c                     t        j                  t         j                  dd       d| _        t	        j
                  d      | _        i | _        dt        _	        t        j                  t         j                  dd       y)z.Called when this event manager is deactivated.zEVENT MANAGER: DeactivatingTFr   NzEVENT MANAGER: Deactivated)
r   r   r   r   r   r   r   r   r   r#   r%   s    r'   
deactivatezEventManager.deactivateI   s]     	5++-JDQ ;;q>%'" 
5++-I4Pr)   c                     d| d| d| }t        j                  t         j                  |d       || _        |rt	        j
                  d      | _        yy)zPauses/unpauses event queuing.zEVENT MANAGER: Pause queueing: z. Clear queue: z. Tr   N)r   r   r   r   r   r   r   )r&   pause
clearQueuereasonmsgs        r'   pauseQueuingzEventManager.pauseQueuingS   sV     0woj\QSTZS[\5++S$7${{1~D r)   c                    fd}fd}fd}fd}| j                   j                  j                          	 t        t	        | j                   j
                              }| j                   j                  j                          |D ]  }	|	k(  r y ||	      r0dd	|	d
g}
t        j                  t        j                  |
d       |	c S  ||	      r0dd	|	dg}
t        j                  t        j                  |
d       |	c S  ||	      r0dd	|	dg}
t        j                  t        j                  |
d       |	c S  ||	      sdd	|	dg}
t        j                  t        j                  |
d       |	c S  ddg}
t        j                  t        j                  |
d       y# t        $ r7}d| }t        j                  t        j                  |d       g }Y d}~xd}~ww xY w# | j                   j                  j                          w xY w)zMReturns the event which renders this one no longer worthy of being processed.c                    | j                   j                   k(  xrj | j                  j                  k(  xrO | j                  j                  k(  xr4 | j                  j                  k(  xr | j                  j                  k(  S N)typesourcedetail1detail2any_data)xevents    r'   isSamez+EventManager._isObsoletedBy.<locals>.isSame_   sp    66UZZ' 1HH,1II.1 II.1 JJ%..0	1r)   c                      h d}t         fd|D              sy j                  j                  k(  xr  j                  j                  k(  S )N>	   document:page-changed object:active-descendant-changedwindowobject:state-changedobject:property-changeobject:children-changedobject:text-caret-movedobject:selection-changedobject:text-selection-changedc              3   T   K   | ]  }j                   j                  |       ! y wr;   r<   
startswith.0etyperA   s     r'   	<genexpr>zTEventManager._isObsoletedBy.<locals>.obsoletesIfSameTypeAndObject.<locals>.<genexpr>r         GEqvv((/G   %(F)anyr=   r<   rA   	skippablerB   s   ` r'   obsoletesIfSameTypeAndObjectzAEventManager._isObsoletedBy.<locals>.obsoletesIfSameTypeAndObjectf   sB    
I GYGG88u||+D%**0DDr)   c                      j                   j                   k7  sK j                  j                  k7  s2 j                  j                  k7  s j                  j                  k7  ryddh}t	         fd|D              syt        j                   j                        t        j                  j                        k(  S )NFfocusobject:state-changed:focusedc              3   T   K   | ]  }j                   j                  |       ! y wr;   rO   rQ   s     r'   rT   zTEventManager._isObsoletedBy.<locals>.obsoletesIfSameTypeInSibling.<locals>.<genexpr>   rU   rV   )r<   r>   r?   r@   rW   r   
get_parentr=   rX   s   ` r'   obsoletesIfSameTypeInSiblingzAEventManager._isObsoletedBy.<locals>.obsoletesIfSameTypeInSiblingv   s    vv#qyyEMM'AQYYRWR_R_E_**. .I GYGG&&qxx0H4G4G4UUUr)   c                      ddh}t         fd|D              syt        fd|D              sy j                  j                  k(  ryy)Nwindow:activatewindow:deactivatec              3   T   K   | ]  }j                   j                  |       ! y wr;   rO   rQ   s     r'   rT   zLEventManager._isObsoletedBy.<locals>.obsoletesWindowEvent.<locals>.<genexpr>   rU   rV   Fc              3   T   K   | ]  }j                   j                  |       ! y wr;   rO   )rR   rS   rB   s     r'   rT   zLEventManager._isObsoletedBy.<locals>.obsoletesWindowEvent.<locals>.<genexpr>   s      Kuzz,,U3KrV   T)rW   r=   rX   s   ` r'   obsoletesWindowEventz9EventManager._isObsoletedBy.<locals>.obsoletesWindowEvent   sJ    !#I GYGGKKKxx5<<'r)   z,EVENT MANAGER: Exception in _isObsoletedBy: TNEVENT MANAGER:zobsoleted byzmore recent duplicatez.more recent event of same type for same objectz+more recent event of same type from siblingz'more recent window (de)activation eventzis not obsoleted)r   mutexacquirelistreversedr   	Exceptionr   r   r   releaseprintTokens)r&   rB   rC   rZ   r`   rf   eventserrorr7   etokenss    `         r'   _isObsoletedByzEventManager._isObsoletedBy\   s   	1	E 	V	 	&&(	-(4#3#3#9#9:;F ""**, 	AEzay*E>113!!%"2"2FDA+A.*E>1JL!!%"2"2FDA+A.*E>1GI!!%"2"2FDA#A&*E>1CE!!%"2"2FDA-	0 #E+=>%**FD9C  	@HCu//d;F	
 ""**,s)   (F   	G ),GG# G  G# #&H	c                    t        j                  t         j                  d       d|g}t        j                  t         j                  |d       | j                  r| j
                  r(d}t        j                  t         j                  |d       y|j                  }|j                  d      s|j                  d      ry| j                         r9| j                  |      r(d}t        j                  t         j                  |d       yt        j                         j                         }||j                  k(  st        j                  |j                        ry||j                   k(  ry|j                  d	      r0|j                   }|(d
}t        j                  t         j                  |d       yd|v rt#        j$                  |      ryt#        j$                  |      r(d}t        j                  t         j                  |d       yt        j&                  |      st        j(                  |      r(d}t        j                  t         j                  |d       yt#        j*                  |j                        }t#        j,                  |      j/                         }d|v r-|dk(  r(d}t        j                  t         j                  |d       y|j1                  d      r-|dk(  r(d}t        j                  t         j                  |d       yt3        j                         j5                         }	|	(d}t        j                  t         j                  |d       y|	j6                  t#        j*                  |j                        k7  r(d}t        j                  t         j                  |d       y|j                  d      rt#        j8                  |j                        }
d|v r|
t:        j<                  j>                  t:        j<                  j@                  t:        j<                  jB                  t:        j<                  jD                  t:        j<                  jF                  t:        j<                  jH                  t:        j<                  jJ                  t:        j<                  jL                  t:        j<                  jN                  t:        j<                  jP                  t:        j<                  jR                  t:        j<                  jT                  t:        j<                  jV                  t:        j<                  jX                  fv r(d}t        j                  t         j                  |d       yyd|v r_|
t:        j<                  jZ                  t:        j<                  j\                  fv r(d}t        j                  t         j                  |d       yy|j                  d      rHt#        j$                  |j                        r(d}t        j                  t         j                  |d       yy|j                  d      rt#        j8                  |j                        }
|j1                  d      r|
t:        j<                  j^                  t:        j<                  jV                  t:        j<                  jT                  t:        j<                  j`                  t:        j<                  jX                  t:        j<                  jb                  fv r(d}t        j                  t         j                  |d       yd|v rHt        jd                  |j                        s(d}t        j                  t         j                  |d       yyd|v rR|jf                  sE|
t:        j<                  jh                  fv r(d}t        j                  t         j                  |d       yyd |v r_|
t:        j<                  jj                  t:        j<                  jl                  fvr(d}t        j                  t         j                  |d       yyd!|v r|
t:        j<                  jn                  t:        j<                  jp                  t:        j<                  jr                  t:        j<                  jt                  t:        j<                  jJ                  t:        j<                  jv                  t:        j<                  jx                  t:        j<                  jz                  fvr(d"}t        j                  t         j                  |d       yy|j                  d#      ret#        j8                  |j                        }
|
t:        j<                  j|                  fv r(d}t        j                  t         j                  |d       yy|j                  d$      rd%|j                   v rD|j                   j                  d%d      s(d&}t        j                  t         j                  |d       yd'|v r7|j                  d(kD  r(d)}t        j                  t         j                  |d       y|j1                  d      r=t        j                  |      r(d*}t        j                  t         j                  |d       yyy)+z-Returns True if this event should be ignored. rg   TzKEVENT MANAGER: Ignoring because manager is not active or queueing is pausedrG   zmouse:buttonFz0EVENT MANAGER: Ignoring event type due to delugerJ   z5EVENT_MANAGER: Ignoring due to lack of event.any_dataremovez2EVENT_MANAGER: Ignoring due to dead event.any_dataz5EVENT_MANAGER: Ignoring due to role of event.any_datazgnome-shellz3EVENT MANAGER: Ignoring event based on type and appsystemthunderbirdz9EVENT MANAGER: Ignoring because there is no active scriptz<EVENT MANAGER: Ignoring because event is not from active apprI   namezBEVENT MANAGER: Ignoring event type due to role of unfocused sourcevaluerL   z.EVENT MANAGER: Ignoring event from dead sourcerH   z2EVENT MANAGER: Ignoring system event based on rolecheckedzCEVENT MANAGER: Ignoring event type of unfocused, non-showing sourceselectedzDEVENT MANAGER: Ignoring event type due to role of source and detail1	sensitiveshowingz.EVENT MANAGER: Ignoring event type due to rolerK   object:text-changedu   ￼zEEVENT MANAGER: Ignoring because changed text is only embedded objectsinserti  zFEVENT MANAGER: Ignoring because inserted text has more than 1000 charsz7EVENT MANAGER: Ignoring because event is suspected spam)Br   r   r   rn   r   r   r<   rP   	_inDeluge_ignoreDuringDeluger   
getManagerget_locus_of_focusr=   r   
is_focusedr@   r   is_deadis_menu_relatedis_imageget_applicationget_namelowerendswithr   getActiveScriptappget_roler   RoleCANVAS	CHECK_BOXICONIMAGELIST	LIST_ITEMMENU	MENU_ITEMPANELRADIO_BUTTONSECTION	TABLE_ROW
TABLE_CELL	TREE_ITEM
SPLIT_PANE
SCROLL_BARTABLETREE
TREE_TABLE
is_showingr>   PUSH_BUTTONTEXTENTRYALERT	ANIMATIONDIALOGINFO_BARNOTIFICATION
STATUS_BARTOOL_TIPLABELreplacer?   is_selectable)r&   rB   rr   r7   
event_typer\   childr   app_namescriptroles              r'   _ignorezEventManager._ignore   s    	5++R0"E*%**FD9||t||_Cu//d;ZZ
  *j.C.CN.S>> 8 8 ?DCu//d; ((*==?ELL K$:$:5<<$HENN"  !:;NNE}M""5#3#3S$?:%(*:*:5*A&J""5#3#3S$?**51[5I5I%5PM""5#3#3S$?**5<<8C((-335H:%(m*CK""5#3#3S$?""8,]1JK""5#3#3S$?#..0@@BF~Q""5#3#3S$?zzX55ellCCT""5#3#3S$?  !9:$$U\\2D#EJJ--!JJ00!JJOO!JJ,,!JJOO!JJ00!JJOO!JJ00!JJ,,!JJ33!JJ..!JJ00!JJ11!JJ002 2 _C&&u'7'7dC*$EJJ115::3H3HII^C&&u'7'7dC  !;<-F""5#3#3S$?  !78$$U\\2D""8,EJJ,,!JJ11!JJ00!JJOO!JJ00!JJ113 3 OC&&u'7'7dCJ&"--ell;_C&&u'7'7dCZ'}}%**2H2H1I)I`C&&u'7'7dCj(

1A1ABB^C&&u'7'7dCJ&

 0 0 %

 4 4 %

 1 1 %

 3 3 %

 %

 7 7 %

 5 5 %

 3 3 5 5 KC&&u'7'7dC  !:;$$U\\2D

(())Z""5#3#3S$?  !675>>)%..2H2HSU2V]""5#3#3S$?:%%--$*>^""5#3#3S$?""8,1J1J51QO""5#3#3S$?r)   Nc                 `   t         j                  t         j                  k  ryg }t        |t        j
                        r(|j                  |j                  |j                  g       nt        |t        j                        r|j                  |j                         nLt         j                  r)t         j                  j                  |j                        r|j                  |       ny|rdg|dd n|dg|dd n|rdg|dd ndg|dd t        j                  t         j                  |d       y)z:Convenience method to output queue-related debugging info.NzEVENT MANAGER: Pruningr   zEVENT MANAGER: Not pruningzEVENT MANAGER: QueueingzEVENT MANAGER: DequeuedT)r   r   
debugLevel
isinstancer	   KeyboardEventextendevent_stringhw_codeBrailleEventappendrB   eventDebugFiltermatchr<   rn   )r&   rq   	isEnqueueisPrunerr   s        r'   _queuePrintlnzEventManager._queuePrintlnc  s     e...a223MM1>>19956;334MM!''"''5+A+A+G+G+OMM!34F1QK 78F1QK45F1QK45F1QK%**FD9r)   c                 >   | j                  |      ry| j                  |       | j                         rH| j                  |      r7d}t	        j
                  t        j                  |d       | j                          t        j                  |j                        }d|g}t	        j                  t        j                  |d       t        j                         j                  ||j                        }|t        j                         f|j                   |j"                  <   | j$                  j'                          | j(                  j+                  |       | j,                  s$t/        j0                  | j2                        | _        | j$                  j5                          y)z!Callback for Atspi object events.N0EVENT MANAGER: Pruning event queue due to flood.Tz&EVENT MANAGER: App for event source is)r   r   _inFlood_prioritizeDuringFloodr   r   r   _pruneEventsDuringFloodr   r   r=   rn   r   r   	getScripttime
eventCacher<   r   ri   r   putr   r   idle_add_dequeue_object_eventrm   )r&   rq   r7   r   rr   r   s         r'   r!   z"EventManager._enqueue_object_event}  s$    <<?1==?t::1=DCu//d;((*&&qxx0:C@%**FD9**,66sAHHE%&		$4!&&!!Q}} MM$*D*DEDM!r)   c                 :   t        j                         j                         ryt        j                         j	                         Vt        j                         j                         }t        j                         j                  |d       |j                          y)NFzNo focus)r   r   focus_and_window_are_unknownr   r   getDefaultScriptsetActiveScriptidleMessage)r&   defaultScripts     r'   
_onNoFocuszEventManager._onNoFocus  sq    ##%BBD$$&668@*557HHJM%%'77zR%%'r)   c                 v   d}	 | j                   j                         }| j                  |d       |t        _        t        j
                   xs) t        j
                  j                  |j                        }|rdt        j                         }d|j                   d| j                   j                          d}t        j                  t        j                  |d       | j                  |       |rNdt        j                         z
  dd	|j                   d
}t        j                  t        j                  |d       dt        _        | j                  j                          | j                   j                         r)t!        j"                  d| j$                         d| _        d}| j                  j)                          |S # t*        j,                  $ r4 d}t        j                  t        j.                  |d       d| _        d}Y |S t0        $ r' t        j2                  t        j.                         Y |S w xY w)z/Handles all object events destined for scripts.TF)r   z
vvvvv PROCESS OBJECT EVENT z (queue size: z) vvvvvzTOTAL PROCESSING TIME: z.4fz
^^^^^ PROCESS OBJECT EVENT z ^^^^^
Ni	  r   z>EVENT MANAGER: Attempted dequeue, but the event queue is empty)r   
get_nowaitr   r   objEventr   r   r<   r   qsizer   eventDebugLevel_processObjectEventr   ri   emptyr   timeout_addr   r   rm   r   EmptyLEVEL_SEVERErl   printException)r&   rerunrB   	debugging	startTimer7   s         r'   r   z"EventManager._dequeue_object_event  s    #	5$$//1Eu6"EN!222 D 1177

C  IIK	3EJJ< @$$($4$4$:$:$<#=WF  ""5#8#8#uE$$U+-diikI.Ec-J3EJJ<xI  ""5#8#8#uE!ENOO##%%%'  t7 !OO##%  {{ 	RCu113=DME   	5  !3!34	5s   F=G AH8	+H87H8c                     d| }t        j                  t         j                  |d       || j                  v r| j                  |xx   dz  cc<   y| j                  j                  |       d| j                  |<   y)zwTells this module to listen for the given event type.

        Arguments:
        - eventType: the event type.
        z)EVENT MANAGER: registering listener for: Tr   N)r   r   r   r   r"   registerr&   	eventTyper7   s      r'   registerListenerzEventManager.registerListener  sn     :)E5++S$7222&&y1Q61NN##I.45D&&y1r)   c                    d| }t        j                  t         j                  |d       || j                  vry| j                  |xx   dz  cc<   | j                  |   dk(  r)| j                  j                  |       | j                  |= yy)zTells this module to stop listening for the given event type.

        Arguments:
        - eventType: the event type.
        z+EVENT MANAGER: deregistering listener for: TNr   r   )r   r   r   r   r"   
deregisterr   s      r'   deregisterListenerzEventManager.deregisterListener  s     <I;G5++S$7D666""9-2-%%i0A5NN%%i0**95 6r)   c                     d|g}t        j                  t         j                  |d       |j                  j	                         D ]  }| j                  |        y)zTells the event manager to start listening for all the event types
        of interest to the script.

        Arguments:
        - script: the script.
        z)EVENT MANAGER: Registering listeners for:TN)r   rn   r   	listenerskeysr   r&   r   rr   r   s       r'   registerScriptListenersz$EventManager.registerScriptListeners  sR     >vF%**FD9))..0 	-I!!),	-r)   c                     d|g}t        j                  t         j                  |d       |j                  j	                         D ]  }| j                  |        y)zTells the event manager to stop listening for all the event types
        of interest to the script.

        Arguments:
        - script: the script.
        z,EVENT MANAGER: De-registering listeners for:TN)r   rn   r   r   r   r   r   s       r'   deregisterScriptListenersz&EventManager.deregisterScriptListeners  sS     A&I%**FD9))..0 	/I##I.	/r)   c                 ,     j                   j                  d      ryt        j                         }t	        j
                         j                  |j                  |j                  d      }d|g}t        j                  t        j                  |d       |S d}t        j                   j                        }t        j                   |      r+d|dg}t        j                  t        j"                  |d       yh d}t%         fd	|D               }d
|d|g}t        j                  t        j                  |d       t	        j
                         j                  | j                  |      }d|g}t        j                  t        j                  |d       |S )z)Returns the script associated with event.mouse:Fz"EVENT MANAGER: Script for event isTNrg   z(is defunct. Cannot get script for event.>   object:row-reorderedobject:column-reorderedobject:state-changed:checkedobject:state-changed:pressedobject:state-changed:expanded"object:state-changed:indeterminater   rI   rJ   rL   object:state-changed:showingobject:state-changed:selectedobject:state-changed:sensitivec              3   T   K   | ]  }j                   j                  |       ! y wr;   rO   )rR   rA   rB   s     r'   rT   z2EventManager._getScriptForEvent.<locals>.<genexpr>-  s      DQ

--a0DrV   z+EVENT MANAGER: Getting script for event forzcheck:)sanityCheck)r<   rP   r	   MouseButtonEventr   r   r   r   rG   r   rn   r   r   r   r=   r   
is_defunctLEVEL_WARNINGrW   )rB   
mouseEventr   rr   r   	skipCheckchecks   `      r'   _getScriptForEventzEventManager._getScriptForEvent  sT    ::  *$55e<J#..0:::>>:K\K\^cdF:FCFe..=M&&u||4!!#&&-WXFe1164@
	  D)DDD?hPUV%**FD9**,66sELLV[6\6?%**FD9r)   c                    |j                   sy|s| j                  |      }|sy|t        j                         j	                         k(  ry|j                  |      sy|j                  |      ry|j                  }|j                  d      rd}n@|j                  d      xr- |j                  xr t        j                  |j                         }|r1|j                   t        j                         j                         k7  ry	y
|j                  d      s|j                  d      r|j                  ry|j                  d      rK|j                  r?t        j                  |j                         r t        j                  |j                         ry|j                  d      r?t        j                   |j                         r t        j"                  |j                         ryy)a  Determines if the event is one which should cause us to
        change which script is currently active.

        Returns a (boolean, string) tuple indicating whether or not
        this is an activatable event, and our reason (for the purpose
        of debugging).
        )Fz!event.source? What event.source??)Fz"There is no script for this event.)Fz,The script for this event is already active.)Fz/The script says not to activate for this event.)Tz9The script insists it should be activated for this event.rb   Tobject:state-changed:active)TzWindow activation)Fz+Window activation for already-active windowr\   r]   )TzEvent source claimed focus.r   )Tz Selection change in focused menur   )TzModal panel is showing.)Fz/No reason found to activate a different script.)r=   r  r   r   r   isActivatableEventforceScriptActivationr<   rP   r>   r   is_framer   get_active_windowis_menuis_focusableis_panelis_modal)r&   rB   r   eTypewindowActivations        r'   _isActivatableEventz EventManager._isActivatableEvent6  s    ||=,,U3FB^..0@@BBH((/K''.T

-.#$//0MN  IMM I&1&:&:5<<&H  ||}779KKMM0KG$ >?==6;<""5<<0[5M5Mell5[; :;##ELL1k6J6J5<<6X2Gr)   c                     t        j                  |j                        r5d|j                  dg}t	        j
                  t        j                  |d       yy)NzEVENT MANAGER: source ofzis deadTF)r   r   r=   r<   r   rn   r   )r&   rB   rr   s      r'   _eventSourceIsDeadzEventManager._eventSourceIsDeado  sB    ELL)0%**iHFe..=r)   c                     | j                  |      ryg d}|j                  |vry|j                  t        j                         j                         k7  S )z=Returns true if this event should be ignored during a deluge.Tzobject:text-changed:deletezobject:text-changed:insertz!object:text-changed:delete:systemz!object:text-changed:insert:systemzobject:text-attributes-changedrK   zobject:children-changed:addz"object:children-changed:add:systemobject:children-changed:removez%object:children-changed:remove:systemz&object:property-change:accessible-namez-object:property-change:accessible-descriptionrL   r   r   F)r  r<   r=   r   r   r   )r&   rB   ignores      r'   r   z EventManager._ignoreDuringDelugew  sN     ""5)4  ::V#||}779LLNNNr)   c                     | j                   j                         }|dkD  r+d| }t        j                  t        j                  |d       yy)Nd   z%EVENT MANAGER: DELUGE! Queue size is TFr   r   r   r   r   r&   sizer7   s      r'   r   zEventManager._inDeluge  sG    %%'#:9$@Cu//d;r)   c                     | j                  |      ryg d}|j                  |vry|xs" t        j                         j	                         }|j
                  |k(  S )z>Returns true if this event should be processed during a flood.Fr  T)r  r<   r   r   r   r=   )r&   rB   r\   r  s       r'   _processDuringFloodz EventManager._processDuringFlood  sX     ""5)4  ::V#H113FFH||u$$r)   c                 n   |j                   j                  d      r|j                  S |j                   j                  d      r|j                  S |j                   j                  d      ry|j                   j                  d      ry|j                   j                  d      ry|j                   j                  d      r@t        j                  |j
                        xs t        j                  |j
                        S |j                   j                  d      ry|j                   j                  d	      ryy
)z@Returns true if this event should be prioritized during a flood.r]   r   rM   Trb   rc   r
  zdocument:load-completezobject:state-changed:busyF)r<   rP   r>   r   r  r=   	is_window)r&   rB   s     r'   r   z#EventManager._prioritizeDuringFlood  s     ::  !?@== ::  !@A== ::  !@A::  !23::  !45::  !>?''5\9N9Nu||9\\::  !9:::  !<=r)   c                    | j                   j                         }t        j                  d      }t	        j
                         j                         }| j                   j                         s	 | j                   j                         }| j                  ||      r%|j                  |       | j                  |d       	 | j                   j                         s| j                   j!                          	 | j                   j                         s|| _         | j                   j                         }d||z
   d| }t        j                  t        j                  |d       y# t        $ r4}d| }t        j                  t        j                  |d       Y d}~d}~ww xY w# | j                   j                         s| j                   j!                          w w xY w)	z6Gets rid of events we don't care about during a flood.r   F)r   z)EVENT MANAGER: Exception pruning events: TNEVENT MANAGER: z events pruned. New size: )r   r   r   r   r   r   r   r   getr"  r   r   rl   r   r   r   	task_done)r&   oldSizenewQueuer\   rB   rp   r7   newSizes           r'   r   z$EventManager._pruneEventsDuringFlood  s    ""((*;;q>((*==?""((*1((,,.
 ++E59LL'&&ue&<''--/$$..0 ""((* $""((*' 122LWIV5++S$7  @A%I""5#3#3S$??@ ''--/$$..0 0s0   -E  7F   	F)*FF  FF   7Gc                     | j                   j                         }|dkD  r+d| }t        j                  t        j                  |d       yy)N2   z$EVENT MANAGER: FLOOD? Queue size is TFr  r  s      r'   r   zEventManager._inFlood  sG    %%'"98?Cu//d;r)   c                 T   ||k(  r6d|j                    d}t        j                  t        j                  |d       y|j                  r6d|j                    d}t        j                  t        j                  |d       yt        j                  |j                        rWt        j                  t        j                  k(  r6d|j                    d}t        j                  t        j                  |d       yd|j                    d}t        j                  t        j                  |d       y)	NzEVENT MANAGER: Processing z: script for event is activeTz%: script handles events when inactivez!: progress bar verbosity is 'all'zEVENT MANAGER: Not processing z due to lack of reasonF)r<   r   r   r   presentIfInactiver   is_progress_barr=   r   progressBarVerbosityPROGRESS_BAR_ALL)r&   rB   eventScriptactiveScriptr7   s        r'   _shouldProcessEventz EventManager._shouldProcessEvent  s    ,&.uzzl:VWCu//d;((.uzzl:_`Cu//d;&&u||4,,0I0II.uzzl:[\Cu//d;.uzzl:PQ5++S$7r)   c                 `   | j                  |      ry|j                  }|j                  d      rD|j                  t	        j
                         k(  r#t        j                         j                          yt        j                  |j                        st	        j                  |j                        rd|j                  g}t        j                  t        j                  |d       |j                  d      s@|j                  d      rvt        j                         j!                         |j                  k(  rGt        j                         j#                  d       t        j                         j%                  dd       y|j                  d      r4|j'                  d	      s#t        j                         j                          nR|j                  d
      rAt	        j(                  |j                        r"t        j                         j                          t	        j*                  |j                        r4d|j                  g}t        j                  t        j                  |d       y| j-                         r| j/                  |      s(d}t        j0                  t        j                  |d       y| j3                  |      r7d}t        j0                  t        j                  |d       | j5                          t        j6                  t        j                  |d       t        j8                  r0t        j8                  j;                  |      r|j                  d      sd}t        j<                  t        j                  ||j                         t?        |j@                  tB        jD                        rXt        j0                  t        j                  | d       t        j<                  t        j                  ||j@                  d       | jG                  |      }|s(d}t        j0                  t        j                  |d       y| jI                  ||      \  }}d| d| d}t        j0                  t        j                  |d       |r%	 t        j                         j%                  ||       t        j                         jM                         }
| jO                  |||
      sy	 |jQ                  |       t        j                  t        jT                  k\  rY|rV|jW                         }|jY                         D ]2  \  }}d| d| }t        j0                  t        j                  |d       4 yyy# tJ        $ r?}	d|j                  d|	g}t        j                  t        j                  |d       Y d}	~	yd}	~	ww xY w# tJ        $ re}	d|j                   d|	 }t        j0                  t        j                  |d       t        jR                  t        j                         Y d}	~	/d}	~	ww xY w)zjHandles all object events destined for scripts.

        Arguments:
        - e: an at-spi event.
        Nr  z'EVENT MANAGER: Ignoring defunct object:Trc   zwindow:destroyz Active window is dead or defunctzwindow:creater
  z)EVENT MANAGER: Ignoring iconified object:z6EVENT MANAGER: Not processing this event due to flood.r   )	timestampr   z                                 z	ANY DATA:F)
includeAppz%ERROR: Could not get script for eventz%EVENT MANAGER: Change active script: z ()z2EVENT MANAGER: Exception setting active script for:z$EVENT MANAGER: Exception processing z: r&  )-rs   r<   rP   r=   r   get_desktopr   r   reclaimScriptsr   r   r  r   rn   r   r   r  clear_stater   r   r  is_iconifiedr   r"  r   r   r   printObjectEventr   r   printDetailsr   r@   r   
Accessibler  r  rl   r   r5  processObjectEventr   r   getTransferableAttributesitems)r&   rB   r  rr   r7   indentr   setNewActiveScriptr6   rp   r4  
attributeskeyrz   s                 r'   r   z EventManager._processObjectEvent  s    u%

<=||{6688%%'668ELL)[-C-CELL-Q?NFe..= 348H8HIY8Z ++-??AU\\Q((*667YZ))+;;<>I&u~~h/G%%'668;<##ELL1%%'668##ELL1A5<<PFe..===?++E2N""5#3#3S$?**51H""5#3#3S$?,,.u//$G%%)?)?)E)Ee)L##H-Fu//F%..%*:*:;""5#3#3xy5IJ""5#3#3VU^^X]^((/9Cu//d;%)%=%=eV%L"F56H5IF8STU5++S$7))+;;FFK &002BBD''v|D	3%%e, u///F99;J(..0 @
U'uBug6""5#3#3S$?@ 5;/#  N,,U4!!%"2"2FDA	  	38BugNCu//d;  !1!122	3s1   $U4 (V? 4	V<=5V77V<?	X-AX((X-c                    t        j                  |||||      }|j                  st        j                  t        j
                  d|        t        j                         j                         }|r||j                  t        j                  v rY|j                  t        j                  |j                            t        j                  |j                  = |j                  | _        n.| j                  "|j                  | j                         d | _        |j                          t!        j                         j#                  |       y )N
)r	   r   is_duplicater   r   r   r   r   r   keyval_namer   grabbedModifiersremove_key_grabr$   refreshModifierKeyGrabprocessr
   update_key_map)	r&   r#   pressedkeycodekeysymstatetextkeyboardEventr   s	            r'   r.   z"EventManager._processKeyboardEventj  s   #11'7FESWX))u//2m_1EF $..0@@BF6- ,,
0K0KK**:+F+F}G`G`+ab"33M4M4MN'4'@'@D$%%111$2B2BC'+D$ 	 	((*99-Hr)   c                 b    t        j                  |      }|t        _        |j	                         S )zProcesses this BrailleEvent.)r	   r   r   lastInputEventrQ  )r&   rB   braille_events      r'   process_braille_eventz"EventManager.process_braille_event  s+     $007$1
!$$&&r)   )TFru   )TNr;   )__name__
__module____qualname__r(   r0   r2   r8   rs   r   r   r!   r   r   r   r   r   r   staticmethodr  r  r  r   r   r"  r   r   r   r5  r   r.   r\   r)   r'   r   r   .   s    P
OQ.XtkZ:4"4	)V6 6$-/ ( (T7HrO6%8:86*[@zI0'r)   r   c                      t         S r;   )_managerra  r)   r'   r   r     s    Or)   )__id____version____date____copyright____license__girequire_versiongi.repositoryr   r   r   r   r   ru   r   r   r	   r
   r   r   r   	ax_objectr   ax_utilitiesr   r   rc  r   ra  r)   r'   <module>rn     sz   * 0 	   7E "         #     %Y' Y'v >r)   