
    g
f                     6   d Z dZdZdZdZdZddlZ ej                  dd	        ej                  d
d	       ddlm	Z	m
Z
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 G d dej.                        Z e       Zd Zy)z3Module for performing accessible actions via a menuz$Id$z
$Revision$z$Date$zCopyright (c) 2023 Igalia, S.L.LGPL    NGdkz3.0Gtk)r   GLibr      )cmdnames)debug)focus_manager)input_event)keybindings)messages)script_manager)AXObjectc                   F    e Zd ZdZd ZddZddZd Zd Zd Z	d Z
dd
Zy	)ActionPresenterz=Provides menu for performing accessible actions on an object.c                     | j                  d      | _        t        j                         | _        d | _        d | _        d | _        y )NT)get_handlers	_handlersr   KeyBindings	_bindings_gui_obj_window)selfs    7/usr/lib/python3/dist-packages/orca/action_presenter.py__init__zActionPresenter.__init__0   s9    **40$002		    c                     |rCd}t        j                  t         j                  |d       | j                          | j                  S | j                  j                         r| j                          | j                  S )z)Returns the action-presenter keybindings.z&ACTION PRESENTER: Refreshing bindings.T)r	   printMessage
LEVEL_INFO_setup_bindingsr   isEmpty)r   refresh
is_desktopmsgs       r   get_bindingszActionPresenter.get_bindings7   sd     :Cu//d;  " ~~ ^^##%  "~~r   c                     |r7d}t        j                  t         j                  |d       | j                          | j                  S )z&Returns the action-presenter handlers.z&ACTION PRESENTER: Refreshing handlers.T)r	   r   r    _setup_handlersr   )r   r#   r%   s      r   r   zActionPresenter.get_handlersC   s:     :Cu//d;  "~~r   c                     i | _         t        j                  | j                  t        j
                        | j                   d<   d}t        j                  t        j                  |d       y)z2Sets up the action-presenter input event handlers.show_actions_menuz"ACTION PRESENTER: Handlers set up.TN)	r   r   InputEventHandlerr*   r   SHOW_ACTIONS_MENUr	   r   r    r   r%   s     r   r(   zActionPresenter._setup_handlersM   s[      ))&&**, 	*+
 35++S$7r   c           
      P   t        j                         | _        | j                  j                  t        j                  dt         j
                  t         j                  | j                  j                  d                   d}t        j                  t        j                  |d       y)z*Sets up the action-presenter key bindings.ar*   z"ACTION PRESENTER: Bindings set up.TN)r   r   r   add
KeyBindingdefaultModifierMaskORCA_SHIFT_MODIFIER_MASKr   getr	   r   r    r-   s     r   r!   zActionPresenter._setup_bindingsZ   s{     %002""//44""#67	9	: 35++S$7r   c                     d| j                   d| j                  g}t        j                  t        j                  |d       d}t        j                  | j                         }t        j                         j                  || j                         }t        j                         j                  ||       t        j                         }|j                  |       |j                  | j                         |j                  d| j                          y)z>Restores focus to the object associated with the actions menu.z$ACTION PRESENTER: Restoring focus toinTz(Action Presenter menu is being destroyedN)r   r   r	   printTokensr    r   get_applicationr   
getManager	getScriptsetActiveScriptr
   clear_stateset_active_windowset_locus_of_focus)r   tokensreasonappscriptmanagers         r   _restore_focuszActionPresenter._restore_focusi   s     9$))T4<<X%**FD9 <&&tyy1**,66sDIIF!!#33FFC**,F#!!$,,/""43r   c                     t        j                  | j                  |      }d|d| j                  d|g}t        j                  t        j
                  |d       d| _        y)z%Attempts to perform the named action.zACTION PRESENTER: Performingonz
succeeded:TN)r   do_named_actionr   r	   r7   r    r   )r   actionresultr?   s       r   _perform_actionzActionPresenter._perform_actionz   sP     ))$))V<0&$		<Y_`%**FD9	r   Nc                    t        j                         }|j                         d   xs |j                         }|3t        j
                  }t        j                  }|j                  ||       yi }t        t        j                  |            D ]l  }t        j                  ||      }	t        j                  ||      }
d| d|d|	 d|
 dg}t        j                  t        j                  |d       |
xs |	||	<   n |j!                         sUt        j"                  |      xs |j$                  j'                  |      }	|j                  t        j(                  |	z         y|| _        |j-                         | _        t1        || j2                  | j4                        | _        d}d	| d
}t        j8                  t        j                  |d       t;        j<                  || j6                  j>                         y)z7Shows a menu with all the available accessible actions.r   TzACTION PRESENTER: Action z onz: 'z' localized description: ''i  z!ACTION PRESENTER: Delaying popup z ms due to GtkMenu grab conflict.) r
   r9   &get_active_mode_and_object_of_interestget_locus_of_focusr   LOCATION_NOT_FOUND_FULLLOCATION_NOT_FOUND_BRIEFpresentMessageranger   get_n_actionsget_action_nameget_action_descriptionr	   r7   r    itemsget_namespeechGeneratorgetLocalizedRoleNameNO_ACTIONS_FOUND_ONr   get_active_windowr   
ActionMenurJ   rD   r   r   r   timeout_addshow_gui)r   rB   eventrC   objfullbriefactionsinamedescriptionr?   timeoutr%   s                 r   r*   z!ActionPresenter.show_actions_menu   s     **,<<>qAaWE_E_Ea;33D55E!!$.x--c23 	0A++C3D"99#qAK1!C8#D6!;K=JLFe..='/4GDM	0 }}$$S)]V-C-C-X-XY\-]D!!(">">"EF	002w(<(<d>Q>QR	1':Z[5++S$7$))"4"45r   )FT)FN)__name__
__module____qualname____doc__r   r&   r   r(   r!   rD   rJ   r*    r   r   r   r   -   s-    G
884" r   r   c                   :     e Zd ZdZ fdZd Zd Zd Zd Z xZ	S )r\   z:A simple Gtk.Menu containing a list of accessible actions.c                 f   t         |           | j                  d| j                         | j                  d| j                         || _        || _        |j                         D ]I  \  }}t        j                  |      }|j                  d| j                  |       | j                  |       K y )Nz	popped-uphide)labelactivate)superr   connect_on_popped_up
_on_hiddenon_option_selectedon_menu_hiddenrV   r   MenuItem_on_activateappend)r   rc   action_handlercleanup_handlerre   rf   	menu_item	__class__s          r   r   zActionMenu.__init__   s    [$"4"45VT__-"0-!( 	#D+;7Ij$*;*;TBKK	"	#r   c                 &    | j                  |       y)z*Handler for the 'activate' menuitem signalN)rw   )r   widgetoptions      r   rz   zActionMenu._on_activate   s     	'r   c                 R    d}t        j                  t         j                  |d       y)z'Handler for the 'popped-up' menu signalz&ACTION PRESENTER: ActionMenu popped upTN)r	   r   r    r   argsr%   s      r   ru   zActionMenu._on_popped_up   s!     75++S$7r   c                 r    d}t        j                  t         j                  |d       | j                          y)z"Handler for the 'hide' menu signalz#ACTION PRESENTER: ActionMenu hiddenTN)r	   r   r    rx   r   s      r   rv   zActionMenu._on_hidden   s-     45++S$7r   c                    | j                          t        j                  j                         }|j	                         }|j                         }|j                         \  }}}t        j                  j                  t        j                  j                        }|j                  |       |j                  |       t        j                         |_        ||_        ||_        t        j$                         }||_        ||_        d|_        d|_        t        j*                         }	| j-                  |	|t        j.                  j0                  t        j.                  j0                  |       y)zShows the menur   N)show_allr   Displayget_defaultget_default_seatget_pointerget_positionEventnew	EventTypeBUTTON_PRESS
set_screen
set_devicer   get_current_event_timetimexy	Rectanglewidthheightget_default_root_windowpopup_at_rectGravity
NORTH_WEST)
r   displayseatdevicescreenr   r   r_   rectwindows
             r   r^   zActionMenu.show_gui   s    	++))+'')!!#**,1		cmm889  //1
}}
,,.64)?)?AWAWY^_r   )
ri   rj   rk   rl   r   rz   ru   rv   r^   __classcell__)r   s   @r   r\   r\      s     D	#(
8`r   r\   c                      t         S rh   )
_presenterrm   r   r   getPresenterr      s    r   )rl   __id____version____date____copyright____license__girequire_versiongi.repositoryr   r   r    r   r	   r
   r   r   r   r   	ax_objectr   r   Menur\   r   r   rm   r   r   <module>r      s   * :1 	   5%     5%   ( (        u up7` 7`t 
r   