U
    ą^q                  	   @   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
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rze5ej6d W n4 ej7k
r   e8dej9d  e5ej6d! Y nX e:e e:d" e3 Z;e;<  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   t  rt   q 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|   tjdd| _tjdd| _tjdd| _tjdd| _d | _	| 
  ttd| _tddkrtttd	}ntttd
}t | _| jt | 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   sJ   d}d}t d}| ||| d}d}| || d}d}| || d S )NZtriggersZswitch_engine>Use shortcut with shift to switch to the previous input methodemojiZemoji_dialogunicodeZunicode_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 d}n"|dkr,| j d}n| j|}| jd| }| jd| }|d| d|}|d kr|d| 7 }|| |dkr|d	| j	dd
| || n6|dkr|d	| j	dd|| n|d	| j	|d|| d S )Nr.   Zhotkeyr/   zunicode-hotkeyz	button_%szentry_%s; 
clickedzpanel/panel/emojizgeneral/hotkey)
r   get_strvr   r)   
get_objectset_textr&   set_tooltip_textconnect"_Setup__shortcut_button_clicked_cb)r   r1   r2   r3   	shortcutsbuttonentrytooltipr   r   r   Z__init_hotkey   s@    


   
   
   zSetup.__init_hotkeyc                 C   s  | j d| _| jd| jdtjj | j d| _| jd| jdtjj | j d| _	| j	
d | j d| _| jd	| jdtjj | j d
| _| jd| jdtjj | jd	| jdtjj | j d| _| jd| jdtjj | j d| _| 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-font	font-name	sensitiveZ checkbutton_show_icon_on_systrayzshow-icon-on-systrayZcheckbutton_show_im_namezshow-im-name)r)   r9   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_namer   r   r   r   Z__init_panel   sr    zSetup.__init_panelc                    s   j d _ jd jdtjj  j d _ jd jdtjj  j d _	 jd j	dtjj  j
  _ j d _ jr jd	  j  n j j i  jD ]}|| < q jd
}fdd|D } j d _ j|  j d} jr:|d	 |d j n|d j  j d}|d fdd  j d}|d fdd  j d}|d fdd  j d}|d j i  _ j d}|d j  jd j  jd j  jd j d S )NZcheckbutton_embed_preedit_textzembed-preedit-textrB   Zcheckbutton_use_sys_layoutzuse-system-keyboard-layoutZcheckbutton_use_global_enginezuse-global-engineZcombobox_enginesTpreload-enginesc                    s   g | ]}| kr | qS r   r   ).0r1   )tmp_dictr   r   
<listcomp>  s      z(Setup.__init_general.<locals>.<listcomp>Ztreeview_enginesbutton_engine_addr6   button_engine_removec                     s
    j  S r   )_Setup__treeviewZremove_engineargsr   r   r   <lambda>      z&Setup.__init_general.<locals>.<lambda>button_engine_upc                     s
    j  S r   )rQ   Zmove_up_enginerR   r   r   r   rT     rU   button_engine_downc                     s
    j  S r   )rQ   Zmove_down_enginerR   r   r   r   rT     rU   button_engine_aboutbutton_engine_preferencesznotify::active-engineznotify::engines)r)   r9   Z&_Setup__checkbutton_embed_preedit_textr   rF   r   rG   rH   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_namer8   rQ   set_sensitiver<   _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enginesr?   r   )r   rM   r   Z__init_general   sx    


zSetup.__init_generalc                    s  j d_jd jdjdtjj j d_	jdj	dtjj j d_
j
 }t|tjkr|dd	 |d
d j d_jdj
dtjj jdjdtjj  fdd}fdd}|d d j   d| jd| j d_jdjdtjj j d_j d_j d_fdd}fdd}|d d jd | jd | jd | jd!| d S )"NZfontbutton_emoji_fontu   🙂🍎🚃💓📧⚽🐳ZfontrD   Zbutton_emoji_langZlangZcheckbutton_emoji_partial_matchZwrapTzmax-width-charsJ   Zspinbutton_emoji_partial_matchzhas-partial-matchrB   rE   c                    s6   d}t   }|j|kr$d S j|| d S )Npartial-match-length)int	get_valuer   get_intset_int)objkeyvalueZ
adjustmentr   r   r   adjustment_value_changed_cb@  s
    z7Setup.__init_emoji.<locals>.adjustment_value_changed_cbc                    s6    j |}t j }||kr&d S  j| d S r   )r   rm   rk   &_Setup__spinbutton_emoji_partial_matchrl   Z	set_value)settingsrp   rq   	old_valuer   r   r   &settings_emoji_partial_match_length_cbF  s
    zBSetup.__init_emoji.<locals>.settings_emoji_partial_match_length_cbrj   z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}|   sd S |  jkr$d}n,|  jkr4d}n|  jkrDd}ntd d S  j|| d S )N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   rn   )ro   rp   Z	conditionr   r   r   !radiobuton_emoji_partial_match_cb_  s    


z=Setup.__init_emoji.<locals>.radiobuton_emoji_partial_match_cbc                    sf    j |}d }|dkr  j}n,|dkr0 j}n|dkr@ j}ntd d S | rXd S |d d S )Nr   ry   rz   z#Wrong emoji partial match conditionT)r   rm   r|   r}   r~   r   r{   rI   )ru   rp   rq   ro   r   r   r   )settings_emoji_partial_match_condition_cbn  s    zESetup.__init_emoji.<locals>.settings_emoji_partial_match_condition_cbrx   toggledz changed::partial-match-condition)r)   r9   Z_Setup__fontbutton_emoji_fontZset_preview_textr   rF   r   rG   rH   Z_Setup__button_emoji_langZ'_Setup__checkbutton_emoji_partial_matchZ	get_childtyper   ZLabelZset_propertyrt   rJ   Zget_adjustmentr<   Z _Setup__hbox_emoji_partial_matchr|   r}   r~   )r   Zcheckbutton_labelrs   rw   r   r   r   rr   r   Z__init_emoji!  s    


zSetup.__init_emojic                 C   s   | j d| _| jdtj | jd| j | j d| _| jdtj | j d| _| j	| 
  | jd| j |   |   |   |   d S )NZwindow_preferenceszdelete-eventznotify::windowZbutton_closer6   Zcheckbutton_auto_startr   )r)   r9   _Setup__windowr<   r   Z	main_quit_Setup__gdk_window_set_cbZ_Setup__button_close_Setup__checkbutton_auto_startrI   _Setup__is_auto_start)_Setup__checkbutton_auto_start_toggled_cb_Setup__init_hotkeys_Setup__init_panel_Setup__init_general_Setup__init_emojir   r   r   r   Z	__init_ui  s     zSetup.__init_uic                 C   s<   |  }t|tjkrd S dtj| }td|d d S )Nz%uZIBUS_SETUP_XIDT)Z
get_windowr   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d}||d ko.|| j k d S )NrO   )r[   get_active_enginer)   r9   r^   rQ   get_engines)r   Zcomboboxpropertyenginer?   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 | }t|dkrJ| }|dt|d  |S t | }tj	d }|d krt|d d nd|dd  }t
|r|| |t| nHd|dd  }t
|rtd| tjd	 || |t| |S )
Nr   ry   ZIBUS_LIBEXECDIR/zibus-setup-:z/usr/lib/ibus/ibus-setup-z"Warning: Using old FHS 2.x path %sfile)strZ	get_setuplensplitinsertr	   basenamer]   r$   environexistsappendr   sysstderr)r   r   rS   setupr1   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d|d k | jd|d k | jd||d d k | jd||dd  k | jd}t| |d	kr|d
 n
|d |j dkr| j	 }dd |D }| j
d| d S )N)zactive-enginerh   rP   rX   rV   ry   rW   rY   r   TFrh   c                 S   s   g | ]}|  qS r   )r]   )rL   rf   r   r   r   rN     s     z.Setup.__treeview_notify_cb.<locals>.<listcomp>rK   )r1   rQ   Zget_sorted_enginesr   r)   r9   r^   r   "_Setup__get_engine_setup_exec_argsr   r   set_strv)r   ZtreeviewZproprh   r   ro   rg   r   r   r   Z__treeview_notify_cb  s     





zSetup.__treeview_notify_cbc                 C   sX   t | jd}|| j | }|tjjkr8|  d S |	 }|  | j
| d S )N)transient_for)r   r   r\   rZ   runr   ResponseTypeZAPPLYdestroyZget_selected_enginerQ   append_engine)r   r?   dialogidr   r   r   r   Z__button_engine_add_cb  s    zSetup.__button_engine_add_cbc                 C   s   | j  }| j| d S r   )r[   r   rQ   r   )r   r?   r   r   r   r   Z __button_engine_add_cb_deprecate  s    
z&Setup.__button_engine_add_cb_deprecatec                 C   s0   | j  }|r,t|| jd}|  |  d S )N)r   r   )rQ   r   r   r   r   r   )r   r?   r   Zaboutr   r   r   Z__button_engine_about_cb  s
    
zSetup.__button_engine_about_cbc                 C   s   | j  }| |}t|dkr$d S | }|t| j krz*t	| j| tj
\}}|dkrfW d S W n tk
r|   Y nX | j|= tjtjf| | j|< d S )Nr   )rQ   r   r   r   r]   listrb   keysr$   waitpidWNOHANGOSErrorspawnlP_NOWAIT)r   r?   r   rS   r1   wpidstsr   r   r   Z__button_engine_preferences_cb  s     


z$Setup.__button_engine_preferences_cbc                    sD  t  | _| j rd S td}tjtjjtj	j
|d}| }|  |   |tjjkrftd t  d}t| fdd | jd fdd ttjd	d	d
    | j rtd}tjtjjtj	j|d}| }|  |   nFtd}tjtjjtj	j|| d}| }|  |   td d S )Nz8The IBus daemon is not running. Do you wish to start it?)message_typebuttonstextr      c                     s      S r   quitrR   Z	main_loopr   r   rT     rU   z"Setup.__init_bus.<locals>.<lambda>Z	connectedc                     s      S r   r   rR   r   r   r   rT     rU   zibus-daemonz--ximzIBus has been started! If you cannot use IBus, add the following lines to your $HOME/.bashrc; then relog into your desktop.
  export GTK_IM_MODULE=ibus
  export XMODIFIERS=@im=ibus
  export QT_IM_MODULE=ibusz.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YESr   exitr   ZMainLoopZtimeout_add_secondsr<   r$   spawnlpr   INFOOK)r   messagedlgr   Ztimeoutr   r   r   Z
__init_bus	  sJ    







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|  |	 }|rf|
d}nd }|
| |
 }|
 }|
  |tjjkrd S |dkr| j|| n| j|| d|}|| d|}|dt d	 7 }|| d S )
NZ_CancelZ_OKzSelect keyboard shortcut for %szswitching input methods)titler   r4   r7   r5   r-   )r   r   r   ZCANCELr   keyboardshortcutZKeyboardShortcutSelectionDialogr   Zadd_buttonsZget_textr   Zset_shortcutsr   Zget_shortcutsr   r   r   r   r&   r:   r;   )r   r?   r1   Zsection_namer@   r   Ztitle1Ztitle2r   r   r   r>   r   rA   r   r   r   Z__shortcut_button_clicked_cb:  s@      




z"Setup.__shortcut_button_clicked_cbc              
   C   sB  | |}||t}|t dkrz| j|t |t  W n` tk
r } zBt	j
t	jj| jt	jjt|d}|  |  |   W Y d S d }~X Y nX n~z| j|t |t  W nb tk
r } zBt	j
t	jj| jt	jjt|d}|  |  |   W Y d S d }~X Y nX |t  |t< ||t|t  d S )NF)r   r   r   r   )get_iter_from_stringrl   COLUMN_DATADATA_STARTEDr    Zregister_start_engine	DATA_LANG	DATA_NAME	Exceptionr   r   r   ZERRORr   r   ZCLOSEr   r   r   r   Zregister_stop_enginesetCOLUMN_ENABLE)r   cellpath_strmodeliterdatarf   r   r   r   r   Z __item_started_column_toggled_cbZ  s:    


z&Setup.__item_started_column_toggled_cbc                 C   s   | |}||t}|t  |t< d|t |t f }|t rl|| jkr| j| | j	dt
| j n*|| jkr| j| | j	dt
| j ||t|t  d S )Nz%s:%srK   )r   rl   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_cb~  s     


z&Setup.__item_preload_column_toggled_cbc                 C   sT   t t d}t tdd}t |s0dS t |s>dS t ||krPdS dS )Nautostart/ibus.desktopIBUS_PREFIX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 t d}t |s$t| t t d}t tdd}zt| W n   Y nX | j	
 rxt|| d S )NZ	autostartr   r   r   )r	   r&   r   r   isdirr$   makedirsr%   unlinkr   r{   symlink)r   r?   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   d S r   )r   Zpresent)r   rS   r   r   r   Z__sigusr1_cb  s    zSetup.__sigusr1_cbc                 C   s&   | j   ttj| j t  d S r   )r   Zshow_allsignalSIGUSR1_Setup__sigusr1_cbr   mainr   r   r   r   r     s    
z	Setup.run)N)__name__
__module____qualname__r   r   r   r0   r   r   r   r*   r   rd   r   re   r_   r`   ra   rc   r!   r=   Z&_Setup__item_started_column_toggled_cbZ&_Setup__item_preload_column_toggled_cbr   r   r   r   __classcell__r   r   r+   r   r   R   s0   "
=Fk1 $r   __main__ zUsing the fallback 'C' localer   Czxkeyboard-config)=Z
__future__r   r$   r   r   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Errorr   r   Zinit_textdomainr   r   r   r   r   r   <module>   sx   





	

    n


