3
w]n                 @   s  d dl mZ d dlZd dlZd dlZd dlZd dlmZ edd edd edd ed	d ed
d d dl	m
Z
 e
jd 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Zd dlZd dl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mZm Z  e!e"d\Z#Z$Z%Z&Z'Z(e!e"d\	Z)Z*Z+Z,Z-Z.Z/Z0Z1G dd de2Z3e4dkryej5ej6d W n4 ej7k
r   e8dej9d  ej5ej6d! Y nX ej:e ej:d" e3 Z;e;j<  dS )#    )print_functionN)require_versionGLibz2.0GdkX11z3.0GioGtkIBusz1.0)r   z
ibus-setup)r   )r   )r   )r   )path)EmojiLangButton)EngineComboBox)EngineDialog)EngineTreeView)EngineAbout)
DOMAINNAME_N_   	   c                   s   e Zd Zdd Z fddZdd Zd2dd	Zd
d Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Z  ZS )3Setupc             C   s   xt j rt j  qW d S )N)r   Zevents_pendingZmain_iteration)self r   /usr/share/ibus/setup/main.pyZ__flush_gtk_eventsS   s    
zSetup.__flush_gtk_eventsc                s   t t| j  tjdd| _tjdd| _tjdd| _tjdd| _d | _	| j
  ttd| _tjddkrtjtjtd	}ntjtjtd
}tj | _| jjt | jj| | j  d S )Nzorg.freedesktop.ibus.general)Zschemaz#org.freedesktop.ibus.general.hotkeyzorg.freedesktop.ibus.panelz org.freedesktop.ibus.panel.emojiZListBoxZXDG_CURRENT_DESKTOPZUnityz./setup-unity.uiz
./setup.ui)superr   __init__r   ZSettings_Setup__settings_general_Setup__settings_hotkey_Setup__settings_panel_Setup__settings_emoji_Setup__bus_Setup__init_bushasattrr   _Setup__has_list_boxosgetenvr	   joindirname__file__ZBuilder_Setup__builderZset_translation_domainr   Zadd_from_file_Setup__init_ui)r   Zgtk_builder_file)	__class__r   r   r   W   s&    




zSetup.__init__c             C   s6   d}d}t d}| j||| d}d}| j|| d S )NZtriggersZswitch_enginez>Use shortcut with shift to switch to the previous input methodemojiZemoji_dialog)r   _Setup__init_hotkey)r   namelabelcommentr   r   r   Z__init_hotkeysy   s    zSetup.__init_hotkeysNc             C   s   |dkr| j jd}n| jj|}| jjd| }| jjd| }|jdj| dj|}|d krp|d| 7 }|j| |dkr|jd| j	dd| || n|jd| j	|d	|| d S )
Nr*   Zhotkeyz	button_%szentry_%sz; 
clickedzpanel/zgeneral/hotkey)
r   get_strvr   r'   
get_objectset_textr$   set_tooltip_textconnect"_Setup__shortcut_button_clicked_cb)r   r,   r-   r.   	shortcutsbuttonentrytooltipr   r   r   Z__init_hotkey   s    



zSetup.__init_hotkeyc             C   s  | j jd| _| jjd| jdtjj | j jd| _| jjd| jdtjj | j jd| _	| j	j
d | j jd| _| jjd	| jdtjj | j jd
| _| jjd| jdtjj | jjd	| jdtjj | j jd| _| jjd| jdtjj | j jd| _| jjd| jdtjj d S )NZ!combobox_lookup_table_orientationzlookup-table-orientationactiveZcombobox_panel_showZshowZcombobox_panel_position   Zcheckbutton_custom_fontzuse-custom-fontZfontbutton_custom_fontzcustom-fontz	font-name	sensitiveZ checkbutton_show_icon_on_systrayzshow-icon-on-systrayZcheckbutton_show_im_namezshow-im-name)r'   r2   Z)_Setup__combobox_lookup_table_orientationr   bindr   SettingsBindFlagsDEFAULTZ_Setup__combobox_panel_showZ_Setup__combobox_panel_position
set_activeZ_Setup__checkbutton_custom_fontZ_Setup__fontbutton_custom_fontGETZ(_Setup__checkbutton_show_icon_on_systrayZ _Setup__checkbutton_show_im_name)r   r   r   r   Z__init_panel   sV    





zSetup.__init_panelc                s   j jd _ jjd jdtjj  j jd _ jjd jdtjj  j jd _	 jjd j	dtjj  j
j  _ j jd _ jr jjd	  jj  n jj j i x jD ]}||j < qW  jjd
}fdd|D } j jd _ jj|  j jd} jr>|jd	 |jd j n|jd j  j jd}|jd fdd  j jd}|jd fdd  j jd}|jd fdd  j jd}|jd j i  _ j jd}|jd j  jjd j  jjd j  jjd j d S )NZcheckbutton_embed_preedit_textzembed-preedit-textr;   Zcheckbutton_use_sys_layoutzuse-system-keyboard-layoutZcheckbutton_use_global_enginezuse-global-engineZcombobox_enginesTzpreload-enginesc                s   g | ]}| kr | qS r   r   ).0r,   )tmp_dictr   r   
<listcomp>   s    z(Setup.__init_general.<locals>.<listcomp>Ztreeview_enginesbutton_engine_addr0   button_engine_removec                 s
    j j S )N)_Setup__treeviewZremove_engine)args)r   r   r   <lambda>  s    z&Setup.__init_general.<locals>.<lambda>button_engine_upc                 s
    j j S )N)rH   Zmove_up_engine)rI   )r   r   r   rJ     s    button_engine_downc                 s
    j j S )N)rH   Zmove_down_engine)rI   )r   r   r   rJ     s    button_engine_aboutbutton_engine_preferencesznotify::active-engineznotify::engines)r'   r2   Z&_Setup__checkbutton_embed_preedit_textr   r>   r   r?   r@   Z"_Setup__checkbutton_use_sys_layoutZ%_Setup__checkbutton_use_global_enginer   Zlist_engines_Setup__engines_Setup__comboboxr!   Zset_no_show_allZhideset_enginesget_namer1   rH   set_sensitiver5   _Setup__button_engine_add_cb&_Setup__button_engine_add_cb_deprecate_Setup__button_engine_about_cb_Setup__engine_setup_exec_list$_Setup__button_engine_preferences_cb(_Setup__combobox_notify_active_engine_cb_Setup__treeview_notify_cb)r   eengine_namesenginesr8   r   )r   rD   r   Z__init_general   sh    



zSetup.__init_generalc                s  j jd_jjd jjdjdtjj j jd_	jjdj	dtjj j jd_
j
j }t|tjkr|jdd	 |jd
d j jd_jjdj
dtjj jjdjdtjj  fdd}fdd}|d d jj   jd| jjd| j jd_jjdjdtjj j jd_j jd_j jd_fdd}fdd}|d d jjd | jjd | jjd | jjd!| d S )"NZfontbutton_emoji_fontu   🙂🍎🚃💓📧⚽🐳Zfontz	font-nameZbutton_emoji_langZlangZcheckbutton_emoji_partial_matchZwrapTzmax-width-charsJ   Zspinbutton_emoji_partial_matchzhas-partial-matchr;   r=   c                s6   d}t  j }|jj|kr$d S jj|| d S )Nzpartial-match-length)int	get_valuer   get_intset_int)objkeyvalue)
adjustmentr   r   r   adjustment_value_changed_cb8  s
    z7Setup.__init_emoji.<locals>.adjustment_value_changed_cbc                s6    j j|}t jj }||kr&d S  jj| d S )N)r   ra   r_   &_Setup__spinbutton_emoji_partial_matchr`   Z	set_value)settingsrd   re   Z	old_value)r   r   r   &settings_emoji_partial_match_length_cb>  s
    zBSetup.__init_emoji.<locals>.settings_emoji_partial_match_length_cbzpartial-match-lengthzvalue-changedzchanged::partial-match-lengthZhbox_emoji_partial_matchZradiobutton_emoji_prefix_matchZradiobutton_emoji_suffix_matchZradiobutton_emoji_contain_matchc                sb   d}d}| j  sd S |  jkr$d}n,|  jkr4d}n|  jkrDd}ntd d S  jj|| d S )Nzpartial-match-conditionr         z Wrong emoji partial match object)
get_active&_Setup__radiobutton_emoji_prefix_match&_Setup__radiobutton_emoji_suffix_match'_Setup__radiobutton_emoji_contain_matchprintr   rb   )rc   rd   Z	condition)r   r   r   !radiobuton_emoji_partial_match_cbW  s    


z=Setup.__init_emoji.<locals>.radiobuton_emoji_partial_match_cbc                sf    j j|}d }|dkr  j}n,|dkr0 j}n|dkr@ j}ntd d S |j rXd S |jd d S )Nr   rk   rl   z#Wrong emoji partial match conditionT)r   ra   rn   ro   rp   rq   rm   rA   )ri   rd   re   rc   )r   r   r   )settings_emoji_partial_match_condition_cbf  s    zESetup.__init_emoji.<locals>.settings_emoji_partial_match_condition_cbzpartial-match-conditiontoggledz changed::partial-match-condition)r'   r2   Z_Setup__fontbutton_emoji_fontZset_preview_textr   r>   r   r?   r@   Z_Setup__button_emoji_langZ'_Setup__checkbutton_emoji_partial_matchZ	get_childtyper   ZLabelZset_propertyrh   rB   Zget_adjustmentr5   Z _Setup__hbox_emoji_partial_matchrn   ro   rp   )r   Zcheckbutton_labelrg   rj   rr   rs   r   )rf   r   r   Z__init_emoji  s~    







zSetup.__init_emojic             C   s   | j jd| _| jjdtj | jjd| j | j jd| _| jjdtj | j jd| _| jj	| j
  | jjd| j | j  | j  | j  | j  d S )NZwindow_preferenceszdelete-eventznotify::windowZbutton_closer0   Zcheckbutton_auto_startrt   )r'   r2   _Setup__windowr5   r   Z	main_quit_Setup__gdk_window_set_cbZ_Setup__button_close_Setup__checkbutton_auto_startrA   _Setup__is_auto_start)_Setup__checkbutton_auto_start_toggled_cb_Setup__init_hotkeys_Setup__init_panel_Setup__init_general_Setup__init_emoji)r   r   r   r   Z	__init_ui  s    zSetup.__init_uic             C   s<   |j  }t|tjkrd S dtjj| }tjd|d d S )Nz%uZIBUS_SETUP_XIDT)Z
get_windowru   r   Z	X11WindowZget_xidr   Zsetenv)r   objectZpspecZwindowsr   r   r   Z__gdk_window_set_cb  s
    zSetup.__gdk_window_set_cbc             C   s6   | j j }| jjd}|j|d ko.|| jj k d S )NrF   )rP   get_active_enginer'   r2   rS   rH   get_engines)r   Zcomboboxpropertyenginer8   r   r   r   Z"__combobox_notify_active_engine_cb  s    
z(Setup.__combobox_notify_active_engine_cbc             C   s   g }|d kr|S t |j }t|dkrJ|j }|jdtj|d  |S t |j }tj	d }|d krt|d d nd|jdd  }tj
|r|j| |jtj| |S )Nr   rk   ZIBUS_LIBEXECDIR/zibus-setup-:)strZ	get_setuplensplitinsertr	   basenamerR   r"   environexistsappend)r   r   rI   setupr,   Z
libexecdirZ
setup_pathr   r   r   Z__get_engine_setup_exec_args  s     


z"Setup.__get_engine_setup_exec_argsc             C   s   |j dkrd S | jj }| jj }| jjdj|d k | jjdj|d k | jjdj||d d k | jjdj||dd  k | jjd}t| j|d	kr|jd
 n
|jd |j dkr| jj	 }dd |D }| j
jd| d S )Nactive-enginer]   rG   rM   rK   rk   rL   rN   r   TFc             S   s   g | ]}|j  qS r   )rR   )rC   r[   r   r   r   rE     s    z.Setup.__treeview_notify_cb.<locals>.<listcomp>zpreload-engines)r   r]   )r,   rH   Zget_sorted_enginesr   r'   r2   rS   r   "_Setup__get_engine_setup_exec_argsr   r   set_strv)r   ZtreeviewZpropr]   r   rc   r\   r   r   r   Z__treeview_notify_cb  s     





zSetup.__treeview_notify_cbc             C   sX   t | jd}|j| j |j }|tjjkr8|j  d S |j	 }|j  | j
j| d S )N)transient_for)r   rv   rQ   rO   runr   ResponseTypeZAPPLYdestroyZget_selected_enginerH   append_engine)r   r8   dialogidr   r   r   r   Z__button_engine_add_cb  s    zSetup.__button_engine_add_cbc             C   s   | j j }| jj| d S )N)rP   r   rH   r   )r   r8   r   r   r   r   Z __button_engine_add_cb_deprecate  s    
z&Setup.__button_engine_add_cb_deprecatec             C   s0   | j j }|r,t|| jd}|j  |j  d S )N)r   r   )rH   r   r   rv   r   r   )r   r8   r   Zaboutr   r   r   Z__button_engine_about_cb  s
    
zSetup.__button_engine_about_cbc             C   s   | j j }| j|}t|dkr$d S |j }|t| jj kry(tj	| j| tj
\}}|dkrdd S W n tk
rz   Y nX | j|= tjtjf| | j|< d S )Nr   )rH   r   r   r   rR   listrW   keysr"   waitpidWNOHANGOSErrorspawnlP_NOWAIT)r   r8   r   rI   r,   wpidstsr   r   r   Z__button_engine_preferences_cb  s    

z$Setup.__button_engine_preferences_cbc                sD  t j | _| jj rd S td}tjtjjtj	j
|d}|j }|j  | j  |tjjkrftjd tj  d}tj| fdd | jjd fdd tjtjd	d	d
  j  | jj rtd}tjtjjtj	j|d}|j }|j  | j  nFtd}tjtjjtj	j|| d}|j }|j  | j  tjd d S )NzMKeyboard Input Methods (IBus Daemon) is not running. Do you wish to start it?)message_typebuttonstextr      c                 s    j  S )N)quit)rI   )	main_loopr   r   rJ     s    z"Setup.__init_bus.<locals>.<lambda>Z	connectedc                 s    j  S )N)r   )rI   )r   r   r   rJ     s    zibus-daemonz--ximzIBus has been started! If you can not use IBus, please open System Menu -&gt; System Settings -&gt; Language Support and set the "Keyboard Input Method" to "ibus", then log out and back in again.z.IBus daemon could not be started in %d seconds)r   ZBusr   Zis_connectedr   r   MessageDialogMessageTypeZQUESTIONButtonsTypeZYES_NOr   r   _Setup__flush_gtk_eventsr   ZYESsysexitr   ZMainLoopZtimeout_add_secondsr5   r"   spawnlpr   INFOOK)r   messagedlgr   Ztimeoutr   )r   r   Z
__init_bus  sD    







zSetup.__init_busc             C   s   t dtjjt dtjjf}t d}t d}|| }	tj|	| jd}
|
j|  |j	 }|rf|j
d}nd }|
j| |
j }|
j }|
j  |tjjkrd S |dkr| jj|| n| jj|| dj|}|j| dj|}|dt d	 7 }|j| d S )
NZ_CancelZ_OKzSelect keyboard shortcut for %szswitching input methods)titler   z; zpanel/emojir/   z>Use shortcut with shift to switch to the previous input method)r   r   r   ZCANCELr   keyboardshortcutZKeyboardShortcutSelectionDialogrv   Zadd_buttonsZget_textr   Zset_shortcutsr   Zget_shortcutsr   r   r   r   r$   r3   r4   )r   r8   r,   Zsection_namer9   r   Ztitle1Ztitle2r   r   r   r7   r   r:   r   r   r   Z__shortcut_button_clicked_cb(  s6    




z"Setup.__shortcut_button_clicked_cbc             C   s2  |j |}|j|t}|t dkry| jj|t |t  W nX tk
r } z<t	j
t	jj| jt	jjt|d}|j  |j  | j  d S d }~X nX nvy| jj|t |t  W nZ tk
r } z<t	j
t	jj| jt	jjt|d}|j  |j  | j  d S d }~X nX |t  |t< |j|t|t  d S )NF)r   r   r   r   )get_iter_from_stringr`   COLUMN_DATADATA_STARTEDr   Zregister_start_engine	DATA_LANG	DATA_NAME	Exceptionr   r   r   ZERRORrv   r   ZCLOSEr   r   r   r   Zregister_stop_enginesetCOLUMN_ENABLE)r   cellpath_strmodeliterdatar[   r   r   r   r   Z __item_started_column_toggled_cbH  s6    


z&Setup.__item_started_column_toggled_cbc             C   s   |j |}|j|t}|t  |t< d|t |t f }|t rl|| jkr| jj| | jj	dt
| j n*|| jkr| jj| | jj	dt
| j |j|t|t  d S )Nz%s:%szpreload-engines)r   r`   r   DATA_PRELOADr   r   Z_Setup__preload_enginesaddr   r   r   remover   COLUMN_PRELOAD)r   r   r   r   r   r   r   r   r   r   Z __item_preload_column_toggled_cbl  s    


z&Setup.__item_preload_column_toggled_cbc             C   sT   t jtj d}t jtjdd}t j|s0dS t j|s>dS t j||krPdS dS )Nzautostart/ibus.desktopIBUS_PREFIXzshare/applications/ibus.desktopFT)	r	   r$   r   get_user_config_dirr"   r#   r   islinkrealpath)r   	link_fileibus_desktopr   r   r   Z__is_auto_start  s    


zSetup.__is_auto_startc          	   C   s|   t jtj d}t j|s$tj| t jtj d}t jtjdd}ytj| W n   Y nX | j	j
 rxtj|| d S )NZ	autostartzautostart/ibus.desktopr   zshare/applications/ibus.desktop)r	   r$   r   r   isdirr"   makedirsr#   unlinkrx   rm   symlink)r   r8   Zauto_start_dirr   r   r   r   r   Z#__checkbutton_auto_start_toggled_cb  s    



z)Setup.__checkbutton_auto_start_toggled_cbc             G   s   | j j  d S )N)rv   Zpresent)r   rI   r   r   r   Z__sigusr1_cb  s    zSetup.__sigusr1_cbc             C   s&   | j j  tjtj| j tj  d S )N)rv   Zshow_allsignalSIGUSR1_Setup__sigusr1_cbr   main)r   r   r   r   r     s    
z	Setup.run)N)__name__
__module____qualname__r   r   r{   r+   r|   r}   r~   r(   rw   rY   r   rZ   rT   rU   rV   rX   r   r6   Z&_Setup__item_started_column_toggled_cbZ&_Setup__item_preload_column_toggled_cbry   rz   r   r   __classcell__r   r   )r)   r   r   R   s0   "

=Fk. $r   __main__ zUsing the fallback 'C' locale)fileCzxkeyboard-config)=Z
__future__r   r"   r   r   ZtimeZgir   Zgi_require_versionZgi.repositoryr   Zset_prgnamer   r   r   r   r	   Zi18nr   ZlocaleZ	emojilangr
   Zenginecomboboxr   Zenginedialogr   Zenginetreeviewr   Zengineaboutr   r   r   r   r   rangeZCOLUMN_NAMEr   r   ZCOLUMN_VISIBLEZCOLUMN_ICONr   r   ZDATA_LOCAL_NAMEr   Z	DATA_ICONZDATA_AUTHORZDATA_CREDITSZ	DATA_EXECr   r   r   r   r   	setlocaleLC_ALLErrorrq   stderrZinit_textdomainr   r   r   r   r   r   <module>   sV   





	    \


