
    Egu$                         d dl Z  e j                  dd       d dlmZmZmZmZmZmZ d dl	Z	d dl
mZmZmZ d dlmZ d dlmZ dZd	Zd
Z G d dej*                        Z G d dej*                        Z G d de      Zy)    NCaribouz1.0)GtkGdkGObjectr   GioGLib)utilstrackerssettings)TransparentButton)
BaseWindowi  ih     c                   $     e Zd Z fdZd Z xZS )ExtendedKeyc                      t         t           |        j                         j	                  d       | _         j                  d fd        j                  d fd       y )N
osk-buttonbutton-press-eventc                 8    j                   j                         S N)_keypresswidgeteventselfs     &/usr/share/cinnamon-screensaver/osk.py<lambda>z&ExtendedKey.__init__.<locals>.<lambda>   s    AR     button-release-eventc                 8    j                   j                         S r   )r   releaser   s     r   r   z&ExtendedKey.__init__.<locals>.<lambda>   s    499CTCTCV r   )superr   __init__get_style_context	add_classr   connect)r   labelxkey	__class__s   `  r   r#   zExtendedKey.__init__   sP    k4)%0 **<8	)+RS+-VWr   c                 n    || j                   j                  j                  z  }| j                  ||       y r   )r   propswidthset_size_request)r   r,   height
real_widths       r   update_sizeszExtendedKey.update_sizes   s*    TYY__222
j&1r   )__name__
__module____qualname__r#   r0   __classcell__r)   s   @r   r   r      s    X2r   r   c                   X     e Zd Z fdZd Zd
dZd
dZd
dZd
dZd Z	d Z
d
d	Z xZS )Keyc                    t         t        |           | j                         j	                  d       || _        d| _        |j                         | _        d | _	        d| _
        d| _        | j                  | j
                  j                  j                         d | _        d | _        | j                  rz| j
                  j#                  d| j$                         t'        j(                  |       | _        | j                  j                         j	                  d       | j                          | j#                  d| j*                         | j#                  d| j,                         | j
                  j                  j.                  d	v rW| j
                  j#                  d
| j0                        | _        | j
                  j#                  d| j4                        | _        y y )Nr   Fr   znotify::show-subkeys)relative_tozosk-popoverr   r   )	Control_LAlt_Lzkey-pressedzkey-released)r"   r7   r#   r$   r%   r   checkedget_extended_keys_extended_keys_extended_keyboard_grabbed_eventCaptureId	set_labelr+   r'   _popup_popover_boxr&   _on_show_subkeys_changedr   Popoverbutton_press_eventbutton_release_eventname_model_key_pressedmodel_press_handler_model_key_releasedmodel_release_handler)r   keyr)   s     r   r#   zKey.__init__"   se   c4!# **<8	!335"& tyy,,- II4d6S6ST++$7DKKK))+55mD""$)4+B+BC+T-F-FG99??#99'+yy'8'8H_H_'`D$)-):):>4KcKc)dD& :r   c                     || j                   j                  j                  z  }| j                  ||       | j                  r2| j                  j                         D ]  }|j                  ||        y y r   )r   r+   r,   r-   rD   get_childrenr0   )r   r,   r.   r/   childs        r   r0   zKey.update_sizes@   sh     TYY__222
j&1**779 2""5&12 r   c                     t        d       y )Nzpressed modelprintr   rN   datas      r   rJ   zKey._model_key_pressedL   s
    or   c                     t        d       y )Nzreleased modelrS   rU   s      r   rL   zKey._model_key_releasedO   s    r   c                     |j                   t        j                  j                  t        j                  j                  fv rt        j
                  S | j                  j                          t        j
                  S r   )typer   	EventType_2BUTTON_PRESS_3BUTTON_PRESSEVENT_PROPAGATEr   r   r   r   r   rV   s       r   rG   zKey.button_press_eventR   sO     ::#--668T8TUU&&&		"""r   c                 V    | j                   j                          t        j                  S r   )r   r!   r   r]   r^   s       r   rH   zKey.button_release_event]   s    		"""r   c                     |j                   j                  }t        j                  |      }|rt	        |      S |j                   j
                  S r   )r+   keyvalr   keyval_to_unicodechrrI   )r   rN   ra   unichars       r   get_uni_charzKey.get_uni_charb   s<    !!''/w<99>>!r   c                    t        j                  t         j                  j                  d      | _        | j
                  D ]W  }| j                  |      }t        ||      }| j                  j                  |ddd       | j                  j                          Y | j                  j                  | j                         y )N   )orientationmarginFr   )r   BoxOrientation
HORIZONTALrD   r>   re   r   
pack_startshow_allrC   add)r   r(   r'   rN   s       r   r=   zKey.get_extended_keysk   s    GG0J0JSTU'' 	)D%%d+EeT*C((eUA>&&(	) 	))*r   c                     | j                   j                  j                  r| j                  j	                          y | j                  j                          y r   )r   r+   show_subkeysrC   popuppopdown)r   rN   pspecrV   s       r   rE   zKey._on_show_subkeys_changedx   s3    99??''KKKK!r   r   )r1   r2   r3   r#   r0   rJ   rL   rG   rH   re   r=   rE   r4   r5   s   @r   r7   r7   !   s1    e<
2 	##
"+"r   r7   c                   X     e Zd ZdZ fdZddZddZd Zd ZddZ	d Z
d	 Zd
 Z xZS )OnScreenKeyboardaC  
    An on-screen keyboard that can be used to input the password in the lockscreen.  If
    accessibility doesn't have the osk enabled, we don't construct the keyboard initially,
    to save footprint.  If needed, the keyboard button can be pressed to display the keyboard
    on demand, and it gets constructed then.
    c                 L   t         t        |           | j                  t        j
                  j                         | j                  t        j
                  j                         d| j                  _
        t        j                  j                         \  }}t        |t              dz
  | _        t        |dz  t"              dz
  | _        d | _        t	        j(                         | _        | j-                  | j*                         t	        j.                  t        j0                  j2                  t        j
                  j                  t        j
                  j                        }t5        dt        j6                  j8                        }|j;                  d| j<                         |j?                  |ddd       |jA                          | j*                  jC                  |d	       | j*                  jA                          tE        jF                         r| jI                          y y )
N   <      )rh   halignvalignzinput-keyboard-symbolicclickedFr   disabled)%r"   rv   r#   
set_halignr   AlignCENTER
set_valignENDr+   ri   statusscreenget_smallest_monitor_sizesminLARGEST_OSK_WIDTH	max_widthLARGEST_OSK_HEIGHT
max_height_group_stackStack
base_stackro   rj   rk   VERTICALr   IconSizeLARGE_TOOLBARr&   on_activate_button_clickedrm   rn   	add_namedr   get_osk_a11y_activebuild_and_show_keyboard)r   smallest_widthsmallest_heightboxactivate_buttonr)   s        r   r#   zOnScreenKeyboard.__init__   so   .0		(()		&

*0--*R*R*T'^->?"Do13EFK !))+!gg#//":": YY-- YY]], ,,Es||GaGab	4+J+JKua8!!#z2  "'')((* *r   c                 $    | j                          y r   )r   r   buttonrV   s      r   r   z+OnScreenKeyboard.on_activate_button_clicked   s    $$&r   c                 :    | j                   j                  d       y )Nr~   )r   set_visible_child_namer   s      r   on_caribou_button_clickedz*OnScreenKeyboard.on_caribou_button_clicked   s    ..z:r   c                    | j                   st        j                  t        j                               | _        t        j                  d      | _         i | _        | j                          | j                   j                          | j                  j                  | j                   d       | j                  j                  d       y )N)keyboard_typeT)visibleenabled)r   r   KeyboardModelr   get_osk_type	_keyboardr   r   _groups	_add_keysrn   r   r   r   )r   s    r   r   z(OnScreenKeyboard.build_and_show_keyboard   s      $22AVAVAXYDN #		$ 7DDLNN&&(OO%%d&7&7C..y9r   c                    | j                   j                         }t        j                  t        j                  j
                        }|D ]  }| j                   j                  |      }|j                  d| j                         i }|j                         }|D ]  }|j                  |      }t        j                  t        j                  j                        }	|j                  |	       | j                  ||	       |	||<   |	j!                          | j"                  j%                  |	|d|        || j&                  |<    | j)                          y )N)modeznotify::active-levelrh   ::)r   
get_groupsr   	SizeGroupSizeGroupModerl   	get_groupr&   _on_level_changed
get_levels	get_levelrj   rk   r   
add_widget
_load_rowsrn   r   r   r   set_active_layer)
r   groups
size_group
group_namegrouplayerslevels
level_namelevelr   s
             r   r   zOnScreenKeyboard._add_keys   s   **,]](9(9(D(DE
  	.JNN,,Z8EMM0$2H2HIF%%'F$ V

3gg#//*B*BC%%c*s+%(z"!!++CZ1TUV (.DLL$+	.. 	r   c                 $    | j                          y r   )r   )r   objectrt   rV   s       r   r   z"OnScreenKeyboard._on_level_changed   s    r   c                     |j                         }| j                  t        |      z  }|D ]#  }| j                  |j	                         ||       % y r   )get_rowsr   len	_add_rowsget_columns)r   r   r   rows
row_heightrows         r   r   zOnScreenKeyboard._load_rows   sF    ~~__s4y0
 	?CNN3??,c:>	?r   c                 `   d}g }t        j                  t         j                  j                        }|D ]  }t        j                  t         j                  j                        }t        j                  t         j                  j                        }	|j	                         }
g }|
D ]z  }t        |      }||j                  j                  z  }|j                  |       |j                  j                  dk(  r|j                  |       c|	j                  |ddt               | |rd|j                          |D ]  }|j                  |ddt                j                  j                  dk(  rj                  d| j                          |	j	                         r|j                  |	ddd       |j	                         s|j                  |ddd        | j"                  |z  t        dz  z
  }|t        dz  z
  }|D ]  }|j%                  ||        |j                  |ddt               y )	Nr   r   rightFCaribou_Prefsr}   Tr   )r   rj   rk   rl   rP   r7   r+   r,   appendalignrm   DEFAULT_PADDINGreversepack_endrI   r&   r   r   r0   )r   keysr   r   num_keysrow_childrenr   rN   	right_boxleft_boxchildrenright_box_membersrQ   r   member	key_width
key_heights                    r   r   zOnScreenKeyboard._add_rows   s   gg#//"<"<= 	7CCOO,F,FGIww3??+E+EFH'')H "! 	OUEKK---##F+;;$$/%,,V4''uoN	O !!))+/ NF&&vue_MN ;;##6NN9d.L.LM$$&xtQ7%%'YdA6?	7B ^^h.?Q3FG	?Q#67
! 	6Ey*5	6 	sE5/:r   c                    | j                   j                  j                  }| j                   j                  |      }|j                  j                  }| j
                  |   }| j                  j                  |d|       y )Nr   )r   r+   active_groupr   active_levelr   r   r   )r   active_group_namer   r   r   s        r   r   z!OnScreenKeyboard.set_active_layer  sh     NN00==~~//0AB#))66/000=NP\1]^r   r   )r1   r2   r3   __doc__r#   r   r   r   r   r   r   r   r   r4   r5   s   @r   rv   rv      s8    !+F';: < ?-;^_r   rv   )girequire_versiongi.repositoryr   r   r   r   r   r   r   utilr	   r
   r   widgets.transparentButtonr   
baseWindowr   r   r   r   Buttonr   r7   rv    r   r   <module>r      su    
   9e $ ? ?  * * 7 !  2#** 2["#** ["|^_z ^_r   