Mini Shell
3
�p5[=y � @ s� d Z dZdZdZdZddlmZ ddlZddlZddl Z ddl
Z
dd lmZ dd
lm
Z
ddlmZ ddlmZ dd
lmZ ddlmZ ej� ZG dd� d�Ze� Zdd� ZdS )z$Id$z
$Revision$z$Date$zCopyright (c) 2011. Orca Team.ZLGPL� )�GLibN� )�debug)�input_event)�messages)�
orca_state)�script_manager)�settingsc @ s� e Zd ZdZd4dd�Zdd� Zdd� Zd d
� Zdd� Zd
d� Z dd� Z
d5dd�Zdd� Zdd� Z
dd� Zdd� Zdd� Zdd� Zdd � Zd!d"� Zd6d$d%�Zd7d&d'�Zd(d)� Zed*d+� �Zd8d,d-�Zd.d/� Zd0d1� Zd2d3� Zd#S )9�EventManageru Tc C s� t jt jdd� t jt jd| d� || _i | _tj| _tjjd�| _ d| _
d| _d| _t
jd�| _d| _tj� | _d| _dg| _dd d
g| _t jt jdd� d S )NzEVENT MANAGER: InitializingTzEVENT MANAGER: Async Mode is %sr Fg�h㈵��>ZVCLzobject:bounds-changedzobject:state-changed:defunctz(object:property-change:accessible-parentzEvent manager initialized)r �println�
LEVEL_INFO�
_asyncMode�_scriptListenerCounts�pyatspiZRegistry�registryZ
getDesktop�_desktop�_active�
_enqueueCount�
_dequeueCount�queueZQueue�_eventQueue�_gidleId� threadingZLock�
_gidleLock�
_gilSleepTime�_synchronousToolkits�_ignoredEvents)�self� asyncMode� r �#/usr/lib/python3.6/event_manager.py�__init__. s$
zEventManager.__init__c C s^ t jt jdd� | jd� | jd� | jd� | jd� | j| j� d| _t jt jdd� dS ) z3Called when this presentation manager is activated.zEVENT MANAGER: ActivatingTzwindow:activatezwindow:deactivatezobject:children-changedzmouse:buttonzEVENT MANAGER: ActivatedN)r r r �_registerListener�registerKeystrokeListener�_processKeyboardEventr )r r r r �activateB s
zEventManager.activatec C s` t jt jdd� d| _x"| jj� D ]}| jj| j|� q"W i | _| j | j
� t jt jdd� dS )z.Called when this event manager is deactivated.zEVENT MANAGER: DectivatingTFzEVENT MANAGER: DeactivatedN)r r r r r �keysr �deregisterEventListener�_enqueue�deregisterKeystrokeListenerr$ )r � eventTyper r r �
deactivateN s zEventManager.deactivatec C s( x"|D ]}|| j kr| j j|� qW d S )N)r �append)r �
eventTypeListr* r r r �ignoreEventTypesY s
zEventManager.ignoreEventTypesc C s( x"|D ]}|| j kr| j j|� qW d S )N)r �remove)r r- r* r r r �unignoreEventTypes^ s
zEventManager.unignoreEventTypesc C s� t jt jd� d|j|j|j|j|j|jf }t jt j|d� | j s\d}t jt j|d� dS t
t|jj| j
��r�d}t jt j|d� dS |jjd�r�d}t jt j|d� dS tj}|jjd ��r|s�d
}t jt j|d� dS |j|jk�rd}t jt j|d� dS |jjd��r6|j| jk�r6d}t jt j|d� dS |jjd
��rx|jjd��rx|j| jk�rxd}t jt j|d� dS y|jj� }|jj� }W n d}t jt j|d� dS |jtj��r�d}t jt j|d� dS |jjd ��r|tjtjtjgk�rd}t jt j|d� dS |jjd��rJ|tjtjgk�rJd}t jt j|d� dS |jjd��r�|tjtjtjgk�r�d}t jt j|d� dS |jjd��r�|tj tj!tj"tj#tj$tj%tj&gk�r�d}t jt j|d� dS |jjd ��s�|jjd��r�|j�sd}t jt j|d� dS y|jj� }|jj� }W n d}t jt j|d� dS |jtj��rld}t jt j|d� dS |tj'k�r�d}t jt j|d� dS d}t jt j|d� dS )z-Returns True if this event should be ignored.� z+EVENT MANAGER: %s for %s in %s (%s, %s, %s)Tz;EVENT MANAGER: Ignoring because event manager is not activez5EVENT MANAGER: Ignoring because event type is ignoredZwindowz?EVENT MANAGER: Not ignoring because event type is never ignoredFzobject:children-changed:addz9EVENT MANAGER: Ignoring because there is no active scriptz<EVENT MANAGER: Ignoring because event is not from active appzobject:children-changed:removezobject:text-changed�systemz?EVENT MANAGER: Ignoring because changed text is embedded objectz/ERROR: Event is from potentially-defunct sourcez#ERROR: Event is from defunct sourcez.EVENT MANAGER: Ignoring event type due to rolez&object:property-change:accessible-namezobject:state-changed:sensitivezobject:state-changed:showingz object:active-descendant-changedz,ERROR: Event any_data lacks child/descendantzCERROR: Event any_data contains potentially-defunct child/descendantz7ERROR: Event any_data contains defunct child/descendantz0EVENT MANAGER: Not ignoring due to lack of cause)(r r r �type�source�host_application�detail1�detail2�any_datar �list�filter�
startswithr r �activeScript�appr �endswith�EMBEDDED_OBJECT_CHARACTER�getState�getRole�containsr �
STATE_DEFUNCT� ROLE_MENUZROLE_LAYERED_PANEZROLE_MENU_ITEMZROLE_CANVASZ ROLE_ICONZROLE_CHECK_MENU_ITEMZROLE_RADIO_MENU_ITEMZ
ROLE_ALERTZROLE_ANIMATIONZ
ROLE_INFO_BARZROLE_NOTIFICATION�
ROLE_PANELZROLE_STATUS_BARZ
ROLE_TOOL_TIPZ
ROLE_IMAGE)r �event�msg�script�state�roler r r �_ignorec s�
zEventManager._ignorec C s� t j}|rt jt jd� | jj� |rZt jt jd� t jt jd� t jt jd| jj� � | jj|� |rxt jt jd� |r�| j r�| j
r�tj| j
� t
j| j�| _ |r�t jt jd� | jj� t jr�t jt jd� d S )Nz acquiring lock...z ...acquiredz calling queue.put...z (full=%s)z ...put completez releasing lock...z ...released)r �debugEventQueuer � LEVEL_ALLr �acquirer ZfullZputr r �time�sleepr Zidle_add�_dequeue�release)r rF r � debuggingr r r �_addToQueue� s*
zEventManager._addToQueuec C s� t |tj�rd|j|jf }nTt |tj�r:dt|j� }n8tj sPtj j
|j�rnd|j|j
|j|j|jf }ndS |r�d|j|f }nd|j|f }tjtj|d� dS )z:Convenience method to output queue-related debugging info.z '%s' (%d)z'%s'z%s (%s,%s,%s) from %sNzEVENT MANAGER: Queueing %s %szEVENT MANAGER: Dequeued %s %sT)�
isinstancer �
KeyboardEventZevent_stringZhw_code�BrailleEvent�reprrF r �eventDebugFilter�matchr3 r4 r6 r7 r8 r5 r r )r �e� isEnqueue�data�stringr r r �
_queuePrintln s zEventManager._queuePrintlnc
C sP t jr4| jr&d| j }t jt j|d� | jd7 _tjtjf}t||� }y|oZ| j |�}W n( d| }t jt j
|d� d}Y nX |r�t jr�| jd8 _dS | j|� | j}|�r|j
j� }y
|j}W n d}Y nX || jks�t|tj�r�d}tj||j
�} |tj� f| j|j<