
    |~g                         d dl mZ d dlmZmZmZmZmZmZm	Z	m
Z
mZ d dlmZmZmZ d dlmZ d dlmZ d dlmZmZ erd dlmZmZ d dlmZ  G d	 d
e      Z G d de      Z G d de      Zy)    )OrderedDict)	IterableTYPE_CHECKINGCallableListTupleDictUnionTypeVarAny)GioGLibPango)DbusService)BluemanTray)IndicatorInterfaceIndicatorNotAvailableMenuItemDictSubmenuItemDict)MenuItemActivatorc                       e Zd Zd fdZded   ddfdZdefdZded	ed
e	e
   deeeeee
ej                  f   e	ej                     f   f   fdZdddede	ej                     fdZ edd      Zdeeeef      deeege	ej                     f   de	ej                     fdZdeeedf      fdZded   dee
ej                  f   fdZdede
dej                  deddf
dZ xZS )MenuServicereturnNc                     t            d ddt        j                  j                         t                _        d _        d _        | _	         j                  ddd j                          j                  dd	d
 j                          j                  ddd fd        j                  ddd fd        j                  dd       t        j                  d j                          y )Nzcom.canonical.dbusmenu/org/blueman/sni/menur   	GetLayout)ir   as)u
(ia{sv}av)Event)r   svr!    AboutToShow)r   )bc                 6    j                   j                  kD  S N)	_revision_revision_advertised)_selfs    L/usr/lib/python3/dist-packages/blueman/main/indicators/StatusNotifierItem.py<lambda>z&MenuService.__init__.<locals>.<lambda>   s    RVRkRkAk     GetGroupProperties)air    )z	a(ia{sv})c                     j                         D cg c]  \  }}|| v r|j                  |      f c}}S c c}}w r*   )_iterate_items_render_item)idspropsidxitemr.   s       r/   r0   z&MenuService.__init__.<locals>.<lambda>   sD    \`\o\o\q ,;ysTX/2cz .1$2C2CD2I,J ,;  ,;s   !:LayoutUpdated)r!   r   d   )super__init__r   BusTypeSESSIONr   _itemsr+   r,   _on_activate
add_method_get_layout	_on_event
add_signalr   timeout_add_advertise_revision)r.   on_activate_menu_item	__class__s   ` r/   r>   zMenuService.__init__   s    79PRUR]R]ReRef8C$&!1%57JDL\L\]!5r4>>Jvv7kl,lN;	< 	4d667r1   itemsr   c                 \    t        d |D              | _        | xj                  dz  c_        y )Nc              3   *   K   | ]  }|d    |f  yw)idNr&   .0r:   s     r/   	<genexpr>z(MenuService.set_items.<locals>.<genexpr>$   s     !G4:t"4!Gs      )r   rA   r+   )r.   rK   s     r/   	set_itemszMenuService.set_items#   s"    !!G!GG!r1   c                     | j                   | j                  k7  r.| j                  d| j                   d       | j                   | _        y)Nr;   r   T)r+   r,   emit_signal)r.   s    r/   rH   zMenuService._advertise_revision'   s9    >>T666_dnna@(,D%r1   	parent_id_recursion_depth_property_namesc                 v   |dk(  rJ| j                   di | j                  d | j                  j                         D        | j                        ffS | j                  |dz	     }d|v r5|dk7  r0| j                   || j                  |      | j	                  ||      ffS | j                   || j                  |      g ffS )Nr   c              3   0   K   | ]  }|d    dz  |f  yw)rN      Nr&   rO   s     r/   rQ   z*MenuService._get_layout.<locals>.<genexpr>0   s     =wZ^tDzQPT>U=ws   r[   submenu)r+   _render_menurA   values_render_submenur6   )r.   rV   rW   rX   r:   s        r/   rD   zMenuService._get_layout-   s    >>>Ar4+<+<=wbfbmbmbtbtbv=w=A=Q=Q,S $T T T ;;yA~.DD %5%:~~	43D3DT3JDL`L`aegpLq'rrr>>It/@/@/F#KKKr1   r:   r9   c                 T    d|v r#| j                  t        |d   |dz         d       S g S )Nr\   rR   c                     g S r*   r&   )_item_isxs     r/   r0   z-MenuService._render_submenu.<locals>.<lambda>:   s    ^` r1   )r]   	enumerate)r.   r:   r9   s      r/   r_   zMenuService._render_submenu8   s2    $$YtIa%HJ`aaIr1   _Tr   )boundsubmenu_callbackc                     |D cg c]4  \  }}t        j                  d|| j                  |       |||      f      6 c}}S c c}}w )Nr"   )r   Variantr6   )r.   rK   rg   r9   r:   s        r/   r]   zMenuService._render_menu@   sO     $)*S$ \C1B1B41HJZ[_adJe+fg * 	* *s   9Ac              #      K   | j                   j                         D ]3  }|d   dz  |f d|v st        |d   |d   dz  dz         E d {    5 y 7 w)NrN   r[   r\   rR   )rA   r^   rd   )r.   r:   s     r/   r5   zMenuService._iterate_itemsE   sf     KK&&( 	MDt*/4''D $T)_tDzQ!6KLLL	M Ms   .AAAAr   c                 x   d|v rd|v r|j                  dd      rt        j                  |d   dd      d   n|d   }t        j                  d|      t        j                  d|d         t        j                  d	|d
         d}d|v rt        j                  dd      |d<   |S dt        j                  dd      iS )Ntext	icon_namemarkupFr       r$   r(   	sensitive)labelz	icon-nameenabledr\   zchildren-displaytype	separator)getr   parse_markupr   ri   )r.   r:   rr   r8   s       r/   r6   zMenuService._render_itemK   s    T>kT1EIXXhX]E^E&&tF|R>qAdhiodpEc51!\\#tK/@A<<T+->?E
 D ,0LLi,H()LDLLk:;;r1   event_id_data
_timestampc                     |dk(  r9|dz  dk(  r| j                  |dz	         y | j                  |dz	  |dz  dz
         y y )Nclicked   r   r[   rR   )rB   )r.   r9   rx   ry   rz   s        r/   rE   zMenuService._on_eventY   sJ    y f~"!!#(+!!#(C6NQ,>?	 !r1   )rI   r   r   N)__name__
__module____qualname__r>   r   rS   boolrH   intr   strr   r	   r   ri   rD   r_   r   re   r   r]   r5   r
   r6   rE   __classcell__rJ   s   @r/   r   r      s   8&x7 D T 	LS 	LC 	LRVWZR[ 	LsE#tC4E/FT\\HZ*Z$[[\	LN  dllAS  
.	/B*(5b>": *hXZ\_W`bfgkgsgsbtWtNu *t||,*
Ms4E/E)F G M<'H!I <dSVX\XdXdSdNe <@S @C @ @RU @Z^ @r1   r   c                   T     e Zd ZdZdZdZdZdededdf fdZ	d fd	Z
d fd
Z xZS )StatusNotifierItemServiceHardwarebluemanFtrayrm   r   Nc                 ~   t         |   d ddt        j                  j                  ddddddddd       | j                  dd	d
fd       t        j                        | _        || _	        d| _
        d
g d
d
f| _        d| _        | j                  dd
       | j                  dd       | j                  dd
       y )Nzorg.kde.StatusNotifierItem/org/blueman/snir$   z(sa(iiay)ss)or(   )CategoryIdIconNameStatusTitleToolTipMenu
ItemIsMenuActivate)r   r    c                 $    j                         S r*   )activate_status_icon)xyr   s     r/   r0   z4StatusNotifierItemService.__init__.<locals>.<lambda>k   s    AZAZA\ r1   Activer   NewIcon	NewStatus
NewToolTip)r=   r>   r   r?   r@   rC   r   activate_menu_itemmenur   r   r   r   rF   )r.   r   rm   rJ   s    ` r/   r>   z"StatusNotifierItemService.__init__g   s    ;=OQTQ\Q\QdQd&)#QT_b%3SPSU	V 	
J4\] 7 78	!PRTVXZ\^O_+		2&S)b)r1   c                 V    | j                   j                          t        |           y r*   )r   registerr=   r.   rJ   s    r/   r   z"StatusNotifierItemService.registerx   s    		r1   c                 V    t         |           | j                  j                          y r*   )r=   
unregisterr   r   s    r/   r   z$StatusNotifierItemService.unregister|   s    		r1   )r   N)r~   r   r   r   r   r   r   r   r   r>   r   r   r   r   s   @r/   r   r   a   s@    H	BEJ*[ *S *T *" r1   r   c                   ~    e Zd ZdxZZdededdfdZdeddfdZdeddfd	Z	d
eddfdZ
deddfdZded   ddfdZy)StatusNotifierItemzorg.kde.StatusNotifierWatcherr   rm   r   Nc           
         t        |      | _        | j                  j                          t        j                  t        j
                  j                        | _        dt        dd ffd}t        j                  t        j
                  j                  | j                  t        j                  j                  |d        	 t        j                  t        j
                  j                        j                  | j                  d| j                  dt        j                   dd      d t        j"                  j                  d       d	y # t        j$                  $ r	 d
t&        w xY w)Nargsr   c                  0    rdy j                          y )NF)activate)r   r   watcher_expecteds    r/   on_watcher_appearedz8StatusNotifierItem.__init__.<locals>.on_watcher_appeared   s      #( r1   z/StatusNotifierWatcherRegisterStatusNotifierItemz(s))r   r   TF)r   _snir   r   bus_get_syncr?   r@   _busr   bus_watch_name_SNI_BUS_NAMEBusNameWatcherFlagsNONE	call_sync_SNI_INTERFACE_NAMEr   ri   DBusCallFlagsErrorr   )r.   r   rm   r   r   s    `  @r/   r>   zStatusNotifierItem.__init__   s   -dI>			$$S[[%8%89		 s 	 t 	  	3;;..0B0BCD[D[D`D`.	6	(S[[001;;""$<d>V>V,dll5BW.Xc'',,b2  $zz 	($''	(s   BE	 	E%c                 \    || j                   _        | j                   j                  d       y )Nr   )r   r   rU   )r.   rm   s     r/   set_iconzStatusNotifierItem.set_icon   s     &				i(r1   titlec                     dg || j                   j                  d   f| j                   _        | j                   j                  d       y )Nr      r   r   r   rU   )r.   r   s     r/   set_tooltip_titlez$StatusNotifierItem.set_tooltip_title   s8    UDII,=,=a,@A				l+r1   rl   c                     dg | j                   j                  d   |f| j                   _        | j                   j                  d       y )Nr   rp   r   r   )r.   rl   s     r/   set_tooltip_textz#StatusNotifierItem.set_tooltip_text   s8    TYY%6%6q%94@				l+r1   visiblec                 j    |rdndx| j                   _        }| j                   j                  d|       y )Nr   Passiver   )r   r   rU   )r.   r   statuss      r/   set_visibilityz!StatusNotifierItem.set_visibility   s+    07HYF		6		k62r1   r   r   c                 N    | j                   j                  j                  |       y r*   )r   r   rS   )r.   r   s     r/   set_menuzStatusNotifierItem.set_menu   s    		  &r1   )r~   r   r   r   r   r   r   r>   r   r   r   r   r   r   r   r&   r1   r/   r   r      s    *IIM'([ (S (T (:)# )$ ),s ,t ,,S ,T ,3d 3t 3'Xn5 '$ 'r1   r   N)collectionsr   typingr   r   r   r   r   r	   r
   r   r   gi.repositoryr   r   r   blueman.main.DbusServicer   blueman.main.Trayr   *blueman.main.indicators.IndicatorInterfacer   r   blueman.plugins.applet.Menur   r   %blueman.main.indicators.GtkStatusIconr   r   r   r   r&   r1   r/   <module>r      sT    # \ \ \ * * 0 ) `IGO@+ O@d @1'+ 1'r1   