
    f\0                     J   d dl mZmZmZ d dlZ	 d dlZd dlmZ  e        d dl	m
Z
mZ d dlmZ d dlmZmZ d dlZ ej$                  d      Zd dlmZ  e       Z G d	 d
e
j                        Z G d d      Z G d d      Z G d de      Z G d de      Zy# e$ r Y w xY w)    )divisionprint_functionunicode_literalsN)require_gi_versions)GObjectGtk)StatusIconProviderEnum)unicode_str
run_script	Indicator)Configc                       e Zd Z ed      ej
                  j                  ej                  dfiZddZ	d Z
d Zd Z	 ddZd	 Zd
 Zd ZddZddZy)ContextMenuquit-onboard Nc                     t         j                   j                  |        || _        t        d      | _        t        d      | _        | j                         | _        y )Nz_Show Onboardz_Hide Onboard)r   __init__	_keyboard__show_label_hide_labelcreate_menu_menuselfkeyboards     3/usr/lib/python3/dist-packages/Onboard/Indicator.pyr   zContextMenu.__init__3   sE      &!_-_-%%'
    c                     || _         y N)r   r   s     r   set_keyboardzContextMenu.set_keyboard=   s	    !r   c                     | j                   S r    r   r   s    r   get_gtk_menuzContextMenu.get_gtk_menu@       zzr   c                    t        j                         }|j                  dt        j                  |        t         j
                  j                  | j                        }|j                  d       |j                  dt        j                  |        |j                  |       t        j                  j                  sft         j
                  j                  t        d            }|j                  d       |j                  d| j                          |j                  |       t         j"                  j%                         }|j                  |       t         j
                  j                  t        d            }|j                  d       |j                  d| j&                         |j                  |       t        j                  j(                  st         j"                  j%                         }|j                  |       t         j
                  j                  t        d            }|j                  d       |j                  d| j*                         |j                  |       |j-                          |S )NshowTactivate_Preferences_Help_Quit)r   Menuconnect_objectr   update_itemsMenuItemnew_with_labelr   set_use_underlineon_show_keyboard_toggleappendconfiglockdowndisable_preferencesr   connect_on_settings_clickedSeparatorMenuItemnew_on_helpdisable_quit_on_quitshow_all)r   menu	show_itemsettings_itemitem	help_item	quit_items          r   r   zContextMenu.create_menuC   s   xxz 	FK$<$<dCLL//0@0@A	##D)  !,!D!Dd	LI22  LL77.8IJM++D1!!*d.G.GHKK&$$((*DLL//'
;	##D)*dmm4I++((,,.DKK 33AgJ?I''-j$--8KK	"r   c                 D    | j                   j                  dd||||       yzQ
        Callback called when status icon right clicked.  Produces menu.
        N)r   popup)r   buttonactivate_timedatamenu_position_funcs        r   rH   zContextMenu.popupo   s$    
 	

t+T	0r   c                 ,   | j                   r| j                   j                         r7| j                  j                         d   j	                  | j
                         y | j                  j                         d   j	                  | j                         y y )Nr   )r   
is_visibler   get_children	set_labelr   r   r$   s    r   r/   zContextMenu.update_itemsx   sj    >>~~((*

'')!,66t7G7GH

'')!,66t7G7GH	 r   c                     t        d       y )NsokSettings)r   )r   widgets     r   r9   z ContextMenu._on_settings_clicked   s
    =!r   c                 8    | j                   j                          y r    )r   request_visibility_toggler$   s    r   r3   z#ContextMenu.on_show_keyboard_toggle   s     	002r   c                 2    t        j                  ddg       y )Nz/usr/bin/yelpzhelp:onboard)
subprocessPopenr   rK   s     r   r<   zContextMenu._on_help   s    />:;r   c                 P    t         j                  d       | j                  d       y )NzEntered _on_quitr   )_loggerdebugemitrY   s     r   r>   zContextMenu._on_quit   s    ()		.!r   r    )NN)__name__
__module____qualname__strr   SignalFlagsRUN_LAST	TYPE_NONE__gsignals__r   r!   r%   r   rH   r/   r9   r3   r<   r>   r   r   r   r   r   -   sh    Nw22;;&00"6L
("*Z -10I"3
<"r   r   c                   J    e Zd ZdZdZ	 dZd Zd Zd Zd Z	d Z
d Zd	 Zd
 Zy)r   z)Keyboard window managed by this indicatorNc                     t        | d      s8t        j                  | g|i || _        | j                  j	                          | j                  S )z"
        Singleton magic.
        r   )hasattrobject__new__r   init)clsargskwargss      r   rj   zIndicator.__new__   s>     sF#~~c;D;F;CHHHMMOxxr   c                      y)z
        This constructor is still called multiple times.
        Do nothing here and use the singleton constructor "init()" instead.
        Nr   r$   s    r   r   zIndicator.__init__   s    
 	r   c           
          t               | _        t        j                  }|t        j
                  k(  rt        j                         }|t        j                  k(  rt        g}n1|t        j                  k(  rt        t        g}n|g }nt        t        g}d | _        |D ]  }	  || j                        | _         n t        j                  dj                  | j                  xr t%        | j                        j                                | j                  | j                  j'                  d       y y # t        $ rB}t        j                  dj                  |j                   t#        |                   Y d }~d }~ww xY w)Nz*Status icon provider: '{}' unavailable: {}z#Status icon provider: '{}' selectedF)r   r   r5   status_icon_providerr	   auto!get_preferred_statusicon_providerGtkStatusIconBackendGtkStatusIconAppIndicatorBackendAppIndicator_backendRuntimeErrorr[   infoformatr^   r
   typeset_visible)r   sipbackendsbackendexs        r   rk   zIndicator.init   sI    ]
))(---::<C(666,-H*777+-ABH[H+,.H  	IGI '

 3	I 	:fT]] :!$--099;	< ==$MM%%e, %   II$fW%5%5{2GI IIs    D22	E=;8E88E=c                 r    | j                   r| j                   j                          | j                  d        y r    )rx   cleanupr!   r$   s    r   r   zIndicator.cleanup   s'    ==MM!!#$r   c                 H    || _         | j                  j                  |       y r    )r   r   r!   r   s     r   r!   zIndicator.set_keyboard   s    !

)r   c                     | j                   S r    r#   r$   s    r   get_menuzIndicator.get_menu   r&   r   c                 8    | j                   j                          y r    )r   r/   r$   s    r   update_menu_itemszIndicator.update_menu_items   s    

!r   c                 T    | j                   | j                   j                  |       y y r    )rx   r}   r   visibles     r   r}   zIndicator.set_visible   s#    ==$MM%%g. %r   )r^   r_   r`   __doc__r   r   rj   r   rk   r   r!   r   r   r}   r   r   r   r   r      s;    /IE"-H 
*"/r   c                   R    e Zd ZdZdZ ed      ZdZdZdZ	 ed      Z
d Zd Zd	 Zy)
BackendBaseNApplicationStatuszOnboard on-screen keyboardonboardzonboard-status-symbolicOnboardc                     || _         y r    r#   )r   r@   s     r   r   zBackendBase.__init__   s	    
r   c                      y r    r   r$   s    r   r   zBackendBase.cleanup       r   c                     | j                   S r    r#   r$   s    r   r   zBackendBase.get_menu   r&   r   )r^   r_   r`   r   categoryr   	icon_desc	icon_nameicon_name_symbolicidtitler   r   r   r   r   r   r   r      sA    E"H./II2	B*+Er   r   c                   (    e Zd ZdZd Zd Zd Zd Zy)ru   Nc                     t         j                   |       t        j                  j	                         j                   j                        r j                  }n j                  }t        j                  |       _	         j                  j                  d fd        j                  j                  d j                         y )N)r   r)   c                 8    j                   j                         S r    )r   r3   )xr   s    r   <lambda>z/BackendGtkStatusIcon.__init__.<locals>.<lambda>  s    "&**"D"D"F r   z
popup-menu)r   r   r   	IconThemeget_defaulthas_iconr   r   
StatusIcon_status_iconr8   _on_status_icon_popup_menu)r   r@   r   s   `  r   r   zBackendGtkStatusIcon.__init__   s    T4(==$$&//0G0GH//IINNY?!!*#G	H 	!!,"&"A"A	Cr   c                 :    | j                   j                  |       y r    )r   r}   r   s     r   r}   z BackendGtkStatusIcon.set_visible  s    %%g.r   c                 T    | j                   j                  |||| j                         yrG   )r   rH   _menu_position_func)r   status_iconrI   rJ   s       r   r   z/BackendGtkStatusIcon._on_status_icon_popup_menu  s&     	

$d&>&>	@r   c                 n   | j                   j                         }t        |      dk(  r$|\  }t        j                  j                  ||      S t        |      dk(  r%|\  }}t        j                  j                  ||      S t        |      dk(  r(|\  }}}t        j                  j                  ||||      S y )N         )r   r%   lenr   r   position_menu)r   r@   rm   gtk_menur   push_inr   ys           r   r   z(BackendGtkStatusIcon._menu_position_func  s    ::**, t9>LK>>//+FFY!^#' G[>>//+FFY!^ $Aq+>>//!QLL r   )r^   r_   r`   r   r   r}   r   r   r   r   r   ru   ru      s    LC /@Mr   ru   c                   :    e Zd ZdZdZdZdZd Zd Zd Z	d Z
d	 Zy)
rw   Nz%/org/ayatana/NotificationItem/Onboardzorg.kde.StatusNotifierItemActivatec                    t         j                  | |       	 ddlm} t        j                  j                         j                  | j                        r| j                  }n| j                  }|j                  j                  | j                  ||j                  j                         | _        | j"                  j%                  || j&                         | j"                  j)                  |j*                         | j"                  j-                  |j*                  j/                         d          dt1               v r	 t3        j4                         | _        	 | j6                  j9                  dj;                  | j<                  | j>                  | j@                               | j6                  jC                  | jD                         y y # t        $ r}t        |      d }~ww xY w# t2        jF                  jH                  $ r+}tJ        jM                  dtO        |      z          Y d }~y d }~ww xY w# t2        jF                  jH                  $ r+}tJ        jM                  dtO        |      z          Y d }~y d }~ww xY w)Nr   AyatanaAppIndicator3dbuszFtype='method_call',eavesdrop=true,path='{}',interface='{}',member='{}'zMFailed to setup D-Bus match rule, no left-click Activate() for AppIndicator: zJD-Bus session bus unavailable, no left-click Activate() for AppIndicator: )(r   r   gi.repositoryr   ImportErrorry   r   r   r   r   r   r   r   r;   r   IndicatorCategoryAPPLICATION_STATUS
_indicatorset_icon_fullr   set_menur   set_secondary_activate_targetrO   globalsr   
SessionBus_busadd_match_stringr{   STATUSNOTIFIER_OBJECTSTATUSNOTIFIER_IFACEACTIVATE_METHODadd_message_filter_on_activate_method
exceptionsDBusExceptionr[   warningr
   )r   r@   rv   r   r   s        r   r   zBackendAppIndicator.__init__,  s   T4(	#J ==$$&//0G0GH//II&0044GG**==? 	%%i&*nn	6 	  ,55JJ##%a(	* WY5 OO-	5II..&
   : : $ 9 9 $ 4 467 II001I1IJ+ '  	#r""	#R 44 5OO %R$/O%4 5 55! ??00 1 !N +B!0 1 11sH   G <H. A/G# 	G GG #H+ !H&&H+.I6!I11I6c                      y r    r   r$   s    r   r   zBackendAppIndicator.cleanup_  r   r   c                     |j                         | j                  k(  r7|j                         | j                  k(  r| j                  j                          t        j                  j                  S r    )	get_pathr   
get_memberr   r   r3   r   
connectionHANDLER_RESULT_NOT_YET_HANDLED)r   busmessages      r   r   z'BackendAppIndicator._on_activate_methodb  sP    !;!;;4#7#77JJ..0===r   c                 &    | j                  |       y r    )_set_indicator_activer   s     r   r}   zBackendAppIndicator.set_visibleh  s    ""7+r   c                     	 ddl m} |r0| j                  j                  |j                  j
                         y | j                  j                  |j                  j                         y # t        $ r Y y w xY w)Nr   r   )r   r   r   
set_statusIndicatorStatusACTIVEPASSIVEr   )r   activerv   s      r   r   z)BackendAppIndicator._set_indicator_activek  sg    
	:J ** 00779 ** 0088:  		s   A* *	A65A6)r^   r_   r`   r   r   r   r   r   r   r   r}   r   r   r   r   rw   rw   $  s2    JC7 O15f>,:r   rw   )
__future__r   r   r   rW   r   r   Onboard.Versionr   r   r   r   Onboard.definitionsr	   Onboard.utilsr
   r   logging	getLoggerr[   Onboard.Configr   r5   r   r   r   ru   rw   r   r   r   <module>r      s   , B A 	 0   & 6 1 
'

K
( !	_"'// _"DM/ M/` *-M; -M`R:+ R:Q  		s   B B"!B"