
    ?g                        d dl Z d dlZd dlZd dlZ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mZ d dl 	 ej                   d   Zd	Zd
Z e j(                         Zej,                  j.                  xr ej,                  j0                  Zej4                  j7                  ej8                  j:                        Zd Zd Z d Z! G d d      Z" G d d      Z# G d d      Z$ G d dejJ                        Z& G d dejN                        Z( G d dejR                        Z* G d dejR                        Z+y#  dZY xY w)    NGtkz3.0)Gior   Gdk	GdkPixbufGLibPango)SidePage)*XDG_CURRENT_DESKTOP zDesktop Entryz
system-runc                     |rO| j                         s>| j                  t        j                  t        j                  j
                               y y y )Norientation)
get_header
set_headerr   	SeparatorOrientation
HORIZONTAL)rowbefore	user_datas      ;/usr/share/cinnamon/cinnamon-settings/modules/cs_startup.pylist_header_funcr      s4    cnn&s}}1K1KLM 'v    c                     t         j                  j                  |       }|j                  d      r|dt	        d        }|S )z/ Get the desktop basename without the .desktop .desktopN)ospathbasenameendswithlen)filenamer   s     r   get_appnamer#   !   s=    ww)H$-c*o-.Or   c                      t         j                  j                         } | j                  dd      }|r|j	                  d      si S t        j
                  d      }t        |d         S )Nzorg.cinnamon.SessionManagerTzautostart-blacklist)r   SettingsSchemaSourceget_defaultlookuphas_keySettingsset)sourceschemacs_settingss      r   get_blacklisted_appsr.   )   s[    %%113F]]8$?F(=>	,,<=K{0122r   c                   <    e Zd ZdZ ed      ZdZd Zd Zd Z	d Z
y)	Modulestartupz Manage your startup applicationsprefsc                 Z    t        d      }t        t        d      d|||       }|| _        y )Nz7startup, programs, boot, init, session, autostart, appsStartup Applicationszcs-startup-programs)module)_r	   sidePage)selfcontent_boxkeywordsr7   s       r   __init__zModule.__init__8   s/    NOA457LhXclpq r   c                    | j                   st        d       t               }d|_        | j                  j                  |       | j                          t        t        d            }|j                  |ddd       | j                          t        j                         D ]R  }|j                  s|j                  s|j                  r*|j                   r7t#        |      }|j%                  |       T y y )Nz#Loading Startup Applications moduleTr4   r   )loadedprintSettingsPageexpandr7   
add_widgetensure_user_autostart_dirAutostartBoxr6   
pack_startgather_appsAUTOSTART_APPSvalueskey_file_loadedshown
no_displayhiddenAutostartRowadd_row)r8   pagesettingsappr   s        r   on_module_selectedzModule.on_module_selected=   s    {{78>DDKMM$$T***,#A&<$=>HOOHdD!4%,,. *&&399S^^TWT^T^&s+C$$S)* r   c                     t         j                  j                  t        j                         d      }t         j                  j                  |      s	 t        j                  |       y y #  t        d|z         Y y xY w)N	autostartz"Could not create autostart dir: %s)r   r   joinr   get_user_config_dirisdirmakedirsr>   )r8   user_autostart_dirs     r   rB   z Module.ensure_user_autostart_dirQ   s`    WW\\$*B*B*DkRww}}/0Q./ 1Q:=OOPs   A* *A<c           
         g }t               }t        j                  t        j                  j	                  t        j                         dd            }|D ]C  }t        |      }||v rt        |t        j                  j                  |            t        |<   E t        j                         D ]E  }|j                  t        j                  t        j                  j	                  |dd                   G |D ]w  }t        |      }||v r|t        v r,t        j                  j                  |      t        |   _        Gt        |t        j                  j                  |            t        |<   y y )NrS   z	*.desktopuser_position)system_position)r.   globr   r   rT   r   rU   r#   AutostartAppdirnamerF   get_system_config_dirsextendr\   )r8   system_filesblacklisted_apps
user_filesrP   keydsys_apps           r   rE   zModule.gather_appsY   s1   /1YYrww||D,D,D,FU`ab
 	XCc"C&&".s"''//RUBV"WN3		X ,,. 	VA		"'',,q+{*S TU	V $ 	]Gg&C&&n$68ggoog6Ns#3&27CE77??SZC[']s#	]r   N)__name__
__module____qualname__namer6   commentcategoryr;   rQ   rB   rE    r   r   r0   r0   3   s-    D23GH!
*(Q]r   r0   c                   f    e Zd ZddZd ZddZddZd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zy)r^   Nc                     || _         || _        || _        d| _        t	               | _        t        j                  j                         | _	        || _
        d| _        d | _        | j                          y )Nr   F)rP   r[   r\   save_timeoutSaveMask	save_maskr   KeyFilenewkey_filer   rH   r   load)r8   rP   r[   r\   s       r   r;   zAutostartApp.__init__s   s]    *.!((*	$		r   c                    	 | j                   j                  | j                  t               d| _        t        j                  j                  | j                        | _
        t        j                  j                  | j                        | _        | j                  | j                   t        j                  d      | _        | j                  | j                   t        j                   d      | _        | j%                  | j                         | _        | j)                  | j                   t        j*                  t-        d            | _        | j)                  | j                   t        j0                  t-        d            | _        | j5                  | j                   dd      | _        | j                  | j                   dd      | _        | j5                  | j                   t        j:                  d	      | _        | j)                  | j                   t        j>                  t@              | _!        y # t        j
                  $ r#}t        d| j                  z  |       Y d }~y d }~ww xY w)
NzFailed to load %sTFUnavailableNo descriptionX-GNOME-Autostart-Delay0X-GNOME-Autostart-enabledr   )"rv   load_from_filerP   KEYFILE_FLAGSr   GErrorr>   rH   r   r   r   r_   dirget_booleanKEY_FILE_DESKTOP_KEY_HIDDENrK   KEY_FILE_DESKTOP_KEY_NO_DISPLAYrJ   	get_shownrI   get_locale_stringKEY_FILE_DESKTOP_KEY_NAMEr6   rk   KEY_FILE_DESKTOP_KEY_COMMENTrl   
get_stringdelayenabledKEY_FILE_DESKTOP_KEY_EXECcommandKEY_FILE_DESKTOP_KEY_ICONDEFAULT_ICONicon)r8   es     r   rw   zAutostartApp.load   s   	MM((=A
  $((277??488,&&t}}d6V6VX]^**4==$:^:^`ef^^DMM2
**4==$:X:XZ[\iZjk	--dmmT=^=^`abr`st__T]]4MsS
''7RTXYt}}d6T6TVXY**4==$:X:XZfg	# {{ 	%0!4	s   *H* *I =II c                 H    	 |j                  t        |      }|S #  |}Y |S xY wN)r   D_GROUPr8   rv   re   default_valueretvals        r   r   zAutostartApp.get_string   s1    	#((#6F 	#"F    !c                 J    	 |j                  t        |d       }|S #  |}Y |S xY wr   )r   r   r   s        r   r   zAutostartApp.get_locale_string   s3    	#//dCF 	#"Fs    "c                 H    	 |j                  t        |      }|S #  |}Y |S xY wr   )r   r   r   s        r   r   zAutostartApp.get_boolean   s1    	#))'37F 	#"Fr   c                    	 |j                  t        t        j                        }|rd}|D ]
  }|dv sd} n |sy	 |j                  t        t        j                        }|rd}|D ]  }|t
        k(  sd} n |ryy#  d}Y ]xY w#  d}Y +xY w)NF)GNOMEz
X-CinnamonT)get_string_listr   r   !KEY_FILE_DESKTOP_KEY_ONLY_SHOW_IN KEY_FILE_DESKTOP_KEY_NOT_SHOW_INENVIRON)r8   rv   only_show_infoundinot_show_ins         r   r   zAutostartApp.get_shown   s    	!#33GT=c=cdL E! // E 	 "227D<a<abK E  < E 5	! L	 Ks   $A= $B =BBc                 8    | j                   j                          y r   )rs   clear_itemsr8   s    r   save_done_successzAutostartApp.save_done_success   s    ""$r   c                 	   | j                         r| j                  }t        j                  j	                  | j
                  | j                        | _        t        j                  |       t        j                  j                         | _        d | _        | j                  j                  | j                  t              r| j                          | j!                          y	 t        j                  j                         }| j                  t        j                  j	                  t        j"                         d      | _        t        j                  j	                  | j                  | j                        | _        |j                  t        j                  j	                  | j
                  | j                        t               n |j                  | j                  t               d| j0                  j2                  v r!|j5                  t*        d| j6                         d| j0                  j2                  v r/|j5                  t*        t        j8                  | j:                         d	| j0                  j2                  v r/|j5                  t*        t        j<                  | j>                         d
| j0                  j2                  v rr| jA                         }|r1|jC                  t*        t        jD                  || jF                         n/|j)                  t*        t        jD                  | jF                         d| j0                  j2                  v rr| jA                         }|r1|jC                  t*        t        jH                  || jJ                         n/|j)                  t*        t        jH                  | jJ                         d| j0                  j2                  v r/|j)                  t*        t        j.                  | jL                         d| j0                  j2                  v r!|j)                  t*        d| jN                         |jQ                  | j                         | j                  | _        || _        | j!                          y# t$        $ rc}t'        d|z         j)                  t*        t        j,                  d       |j)                  t*        t        j.                  d       Y d }~d }~ww xY w)NFrS   z!Problem creating user keyfile: %sApplicationz
/bin/falser   r}   
no-displayrK   rk   rl   r   r   r{   ))user_equals_systemrP   r   r   rT   r\   r   remover   rt   ru   rv   r[   r~   r   rw   r   rU   	Exceptionr>   
set_stringr   KEY_FILE_DESKTOP_KEY_TYPEr   rs   contentsset_booleanr   r   rJ   r   rK   
get_localeset_locale_stringr   rk   r   rl   r   r   save_to_file)r8   old_apprv   r   locales        r   savezAutostartApp.save   s\   ""$hhGww||D$8$8$--HDHIIg LL,,.DM!%D}}++DHHmD		""$	W||'')H!!)%'WW\\$2J2J2Lk%Z"GGLL););T]]K	''T5I5I4==(Y[hi''		=A ///  *Et||T4>>222  $*N*NPTP_P_`t~~...  $*J*JDKKXT^^,,,__&F**7D4R4RTZ\`\e\ef##GT-K-KTYYW///__&F**7D4U4UW]_c_k_kl##GT-N-NPTP\P\]///)G)GVdnn---)BDJJOdii(99  O  	W59:)G)GW)G)GVV	Ws   !DR 	S/AS**S/c                    d}|d   | j                   k7  r'|d   | _         | j                  j                  d       d}|d   | j                  k7  r'|d   | _        | j                  j                  d       d}|r| j	                          |d   | j
                  k7  r'|d   | _        | j                  j                  d       d}|d   | j                  k7  r'|d   | _        | j                  j                  d       d}|r| j                          y y )NFrk   Trl   r   r   )rk   rs   add_itemrl   update_descriptionr   r   r   )r8   infochangeds      r   updatezAutostartApp.update  s    <499$VDINN##F+G	?dll*	?DLNN##I.G##%	?dll*	?DLNN##I.G=DJJ&gDJNN##G,GIIK r   c                 h    || _         | j                  j                  d       | j                          y )Nr   )r   rs   r   r   )r8   r   s     r   set_enabledzAutostartApp.set_enabled*  s$    	*		r   c                    | j                   s,| j                  r t        j                  | j                         y d| _        | j                  j                  d       d| _        | j                  j                  d       | j                          y )NTrK   Fr   )
r\   r[   r   r   rP   rK   rs   r   r   r   r   s    r   r   zAutostartApp.remove/  s^    ##(:(:IIdhhDKNN##H- DLNN##I.IIKr   c                     | j                   dk(  rt        d      | _         | j                  dk(  rt        d      | _        y y )Nr   zNo namerz   )rk   r6   rl   r   s    r   r   zAutostartApp.update_description9  s6    99?)DI<<2-.DL r   c                    | j                   syt        j                  j                  | j                   | j                        }t
        j                  j                         }|j                  |t
        j                  j                        sy| j                  |t
        j                  d      | j                  k7  s>| j                  |dd      | j                  k7  s| j                  |      | j                   k7  ry| j                  |t
        j"                  d      | j$                  k7  ry| j'                  |t
        j(                        | j*                  k7  ry| j'                  |t
        j,                        | j.                  k7  ry| j1                  |t
        j2                        | j4                  k7  ry| j1                  |dd      | j6                  k7  ry| j'                  |t
        j8                  t:              | j<                  k7  ryy)NFr}   Tr{   r|   )r\   r   r   rT   r   r   rt   ru   r~   KeyFileFlagsNONEr   r   rK   r   r   rI   r   rJ   r   r   rk   r   rl   r   r   r   r   r   r   r   )r8   r   rv   s      r   r   zAutostartApp.user_equals_system?  s   ##ww||D00$--@<<##%&&tT->->-C-CDXt'G'GOSWS^S^^X'BDIT\\Yx(DJJ6Hd&J&JERVZVeVee!!(D,J,JKtyyX!!(D,M,MNRVR^R^^??8T%C%CDT??8%>D

R!!(D,J,JLY]a]f]ffr   c                 r    d }t        j                         }|D ]  }|j                  d      dk(  s|} |S  |S )N.)r   get_language_namesfind)r8   current_localelocalesr   s       r   r   zAutostartApp.get_localea  sK    ))+ 	F{{32%!'	
 r   )NNr   )rh   ri   rj   r;   rw   r   r   r   r   r   r   r   r   r   r   r   r   rn   r   r   r^   r^   r   sK    h,>%<|8
/ Dr   r^   c                       e Zd Zd Zd Zd Zy)rr   c                 $    g | _         g d| _        y )N)r   r   rK   rk   rl   r   r   )r   allr   s    r   r;   zSaveMask.__init__l  s    ]r   c                 h    |dk(  r| j                   | _        y | j                  j                  |       y )Nr   )r   r   appendr8   items     r   r   zSaveMask.add_itemp  s&    5= HHDMMM  &r   c                 \    | j                   D ]  }| j                   j                  |        y r   )r   r   r   s     r   r   zSaveMask.clear_itemsv  s'    MM 	'DMM  &	'r   N)rh   ri   rj   r;   r   r   rn   r   r   rr   rr   k  s    ^''r   rr   c                   l    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d Zd Zd Zd Zd Zy)rC   c                    t         j                  j                  |        | j                  t         j                  j
                         t        j                         }|j                  t         j                  j                         |j                         }|j                  d       | j                  |ddd       t        j                  t         j                  j
                        }|j                  |       t        j                         }d|_        |j!                  t         j"                  j$                  t         j"                  j&                         |j                  t         j                  j(                         |j                  |ddd       t        j                  t         j                  j
                        | _        |j                  | j*                         t        j                  t         j                  j(                        | _        | j*                  j                  | j,                         t        j.                         | _        | j0                  j3                  t         j4                  j6                         | j0                  j9                  d       | j0                  j;                  | j<                  d        | j0                  j?                  t@        d        | j0                  jC                  d| jD                         | j0                  jC                  d| jF                         | j0                  jI                  |jK                                | j*                  j                  | j0                         t         jL                  jO                         }t         jP                  j                  t         jR                  j                  |      d	       | j                  |       t        jT                         }|jW                  d       |j                  |       t        j                  t         j                  jX                        }t         jZ                  jO                  t         j\                  jX                        }	|j_                  t         j`                  jb                         |j                  |       t         jd                  jg                  d
t         jh                  jj                        | _6        | jl                  jo                  tq        d             | jl                  jC                  d| jr                         |	ju                  | jl                         |j                  | jl                         t         jd                  jg                  dt         jh                  jj                        | _;        | jv                  jo                  tq        d             | jv                  jC                  d| jx                         |	ju                  | jv                         | jv                  j{                  d       |j                  | jv                         t         jd                  jg                  dt         jh                  jj                        | _>        | j|                  jo                  tq        d             | j|                  jC                  d| j~                         |	ju                  | j|                         | j|                  j{                  d       |j                  | j|                         t         jd                  jg                  dt         jh                  jj                        | _@        | j                  jo                  tq        d             | j                  jC                  d| j                         |	ju                  | j                         | j                  j{                  d       |j                  | j                         y )NviewTr   r   )shadow_typeFzrow-selectedzrow-activatedzinline-toolbarzlist-add-symbolicAddclickedzdocument-edit-symbolicEditzlist-remove-symbolicRemovezmedia-playback-start-symboliczRun now)Br   Boxr;   set_orientationr   VERTICALFrameset_shadow_type
ShadowTypeINget_style_context	add_classrD   addScrolledWindowr@   
set_policy
PolicyTypeNEVER	AUTOMATICr   boxinfobar_holderListBoxlist_boxset_selection_modeSelectionModeSINGLEset_activate_on_single_clickset_sort_func	sort_appsset_header_funcr   connecton_row_selectedon_row_activatedset_focus_vadjustmentget_vadjustmentToolbarru   StyleContextWidgetToolItem
set_expandr   	SizeGroupSizeGroupMode
set_halignAlignCENTERButtonnew_from_icon_nameIconSizeBUTTON
add_buttonset_tooltip_textr6   on_add_button_clickedrA   edit_buttonon_edit_button_clickedset_sensitiveremove_buttonon_remove_button_clicked
run_buttonon_run_button_clicked)
r8   titleframeframe_stylemain_boxscwbutton_toolbarbutton_holderr   button_groups
             r   r;   zAutostartBox.__init__{  s   S__556		cnn//0--/f%tT1-77s'?'?@		(  "
s~~++S^^-E-EFCNN//0CtQ/77s'?'?@!iiCNN4G4GHT(()(():):)A)AB2259##DNND9%%&6=nd.B.BCot/D/DE++C,?,?,ABT]]#*""3::#?#?#OQab   &=)gg#//"<"<=}}(():):)E)EFsyy''(#**778KS\\M`M`a((52	4+E+EF0 ::889QSVS_S_SfSfg))!F)4  D,G,GH 0 01&&u-  ! ZZ::;QSVS_S_SfSfg++AhK8""9d.K.KL 2 23((/""#**778WY\YeYeYlYlm((96	4+E+EF0%%e, r   c                 :    | j                   j                  |       y r   )r   r   r8   r   s     r   rM   zAutostartBox.add_row  s    #r   c                     |j                   j                  j                         }|j                   j                  j                         }||k  ry||kD  ryyNr      r   )rP   rk   lowerr8   abr   anamebnames         r   r   zAutostartBox.sort_apps  sE    

  "

  "5=U]r   c                     | j                   j                  d       | j                  j                  d       | j                  j                  d       y )NT)r  r  r  r  r8   r   r   s      r   r   zAutostartBox.on_row_selected  s<    &&t,((.%%d+r   c                 &    | j                  |       y r   )r  r(  s      r   r   zAutostartBox.on_row_activated  s    ##H-r   c                    | j                   j                         (| j                   j                         j                          | j                  j	                         }|j
                  }	 t        j                  j                  |j                  d t        j                  j                        }|j                  d d        y # t        j                  $ r}t        j                          }|j#                  t        j$                  j&                         t        j(                  t+        d      |j                  |j,                  fz        }|j/                         j1                  |       |j3                  t        j4                  t        j6                  j8                         |j;                  dd        | j                   j1                  |       | j                   j=                          Y d }~y d }~ww xY w)NzCould not execute '%s'
%sresponsec                 "    | j                         S r   )hide)wids     r   <lambda>z4AutostartBox.on_run_button_clicked.<locals>.<lambda>  s    affh r   )r   	get_childdestroyr   get_selected_rowrP   r   AppInfocreate_from_commandliner   AppInfoCreateFlagsSUPPORTS_STARTUP_NOTIFICATIONlaunchr   Errorr   InfoBarset_message_typeMessageTypeERRORLabelr6   messageget_content_arear   r
  STOCK_OKResponseTypeOKr   show_all)r8   buttonr   rP   appinfor   warninglabels           r   r  z"AutostartBox.on_run_button_clicked  s_   ((*6))+335mm,,.gg	+kk99#++tSMcMc  NB  NB  CGNN4&zz 	+kkmG$$S__%:%:;IIa <=aii@XXYE$$&**51s||S-=-=-@-@AOOJ(>?##G,((**	+s   *AC   G1DG,,G1c                    | j                   j                         }|j                  }|j                          | j                   j                  |       | j                  j                  d       | j                  j                  d       y )NF)r   r3  rP   r   r  r  r  )r8   rE  r   rP   s       r   r  z%AutostartBox.on_remove_button_clicked  s`    mm,,.gg

S!&&u-((/r   c                    t        j                         }|j                  |d        t        j                  t	        d            }|j                  |       |j                  d| j                         |j                          t        j                  t	        d            }|j                  |       |j                  d| j                         |j                          |j                  d d | j                  |dd       y )NzCustom commandactivatezChoose applicationr   )r   Menuattach_to_widgetMenuItemr6   r   r   on_add_customshow
on_add_apppopuppopup_menu_below_button)r8   rE  rR  custom_optionapp_chooser_options        r   r  z"AutostartBox.on_add_button_clicked  s    
vt,Q'7%89]#j$*<*<= \\!,@*AB'("":t?!D$ < <faKr   c                 2   | j                   j                         }|j                  }t        |      }|j	                  |j                                |j                          |j                         }|d   r"|j                  |       |j                          y y )Ndone)	r   r3  rP   	AppDialogset_transient_forget_toplevelrD  
run_dialogr   )r8   rE  r   rP   edit_dialogr   s         r   r  z#AutostartBox.on_edit_button_clicked  sx    mm,,.ggn%%f&9&9&;<%%'<JJtJJL r   c                    t               }|j                  | j                  j                                |j	                          |j                         }|d   ru| j                  |d         }|y t        |t        j                  j                  |            }t        |      }|t        |<   t        j                  j                  |j                        |_        t        j                  j                  |j                        |_        d|_        d|_        d|_        d|_        |d   |_        |d   |_        |d   |_        |d   |_        d |_        |j3                          |j4                  j7                  d	       |j9                          t;        |      }| j=                  |       |j	                          | j?                  |       y y )
NrW  rk   rZ   FTr   r   rl   r   ) rX  rY  r   rZ  rD  r[  find_free_basenamer^   r   r   r_   r#   rF   r   rP   r   rK   rJ   r   rI   rk   r   r   rl   r   r   rs   r   r   rL   rM   select_new_row)r8   rR  
new_dialogr   r"   rP   re   r   s           r   rO  zAutostartBox.on_add_custom  sj   [
$$T]]%?%?%AB$$&<..tF|<Hxrwwx7PQCh'C"%N377++CGG4CLggoocgg.CGCJ"CNCKCIF|CHy/CKWCIy/CKCH""$MM""5)HHJs#CLLLLN$A r   c                    t               }|j                  | j                  j                                |j	                          |j                         }|t        j                  j                  k(  rg|j                         }|j                         }| j                  t        j                  j                  |            }|y t        j                  j                  t!        j"                         d      }t        j                  j                  ||      }	 t%        j&                  ||       t-        |t        j                  j/                  |            }	t1        |      }
|	t2        |
<   d|	_        |	j6                  j9                  d       |	j;                          t=        |	      }| j?                  |       |j	                          | jA                  |       |jC                          y # t(        $ r t+        d|z         Y w xY w)NrS   zFailed to copy desktop file %srZ   Tr   )"AppChooserDialogrY  r   rZ  rD  runr   rB  rC  get_selected_appget_filenamer^  r   r   r   rT   r   rU   shutilcopyfileIOErrorr>   r^   r_   r#   rF   r   rs   r   r   rL   rM   r_  r2  )r8   rR  
app_dialogr+  selected_appdesktop_file_dirdesktop_file_namerX   user_desktop_filerP   re   r   s               r   rQ  zAutostartBox.on_add_app:  s   %'
$$T]]%?%?%AB>>#s''***%668L+88: $ 7 78H8HIY8Z [ (!#d.F.F.H+!V "-?AR SL 02CD 0Pa@bcC/0C"%N3CKMM""5)HHJs#CLLLLN$'  L69JJKLs   G* *HHc                 d    t        j                  | j                  |t         j                         y )N)priority)r   idle_addon_row_added_idlePRIORITY_LOWr  s     r   r_  zAutostartBox.select_new_row_  s      	d,,cD<M<MNr   c                 x    | j                   j                  |       |j                          t        j                  S r   )r   
select_row
grab_focusr   SOURCE_REMOVEr  s     r   rq  zAutostartBox.on_row_added_idled  s*      %!!!r   c                 6   |j                  d      rN|d t        |      t        d      z
   }t        j                  j	                  t        j                         d|      }n3t        j                  j	                  t        j                         d|      }d|z  }t        j                  j                  |      }d}d}| j                  |      G||k  rBd||fz  }t        j                  j                  |      }|dz  }| j                  |      ||k  rB||k(  ry |S )Nr   rS   z
%s.desktopr   d   z%s-%d.desktop)	r    r!   r   r   rT   r   rU   r   find_app_with_basename)r8   suggested_namebasename_no_ext	base_pathr"   r   r   	max_triess           r   r^  zAutostartBox.find_free_basenamej  s    "":.,-Sc..AC
O.STOT%=%=%?o^IT%=%=%?n]I)+77##H-	**84@9}&)Q7Hww''1HFA	 **84@9}
 	>r   c                 B    t        |      }t        j                  |      S r   )r#   rF   get)r8   r   re   s      r   ry  z#AutostartBox.find_app_with_basename  s    (#!!#&&r   c                 B   |d   }|d   }|j                         }|j                         \  }}}|j                         }|j                         }	||j                  z   |j                  dz  z   |	j                  dz  z
  }
||j
                  z   |j                  z   }d}|
||fS )Nr   r      T)
get_window
get_originget_allocationxwidthyheight)r8   argsmenuwidgetwindow
unused_varwindow_xwindow_ywrectmrectr  r  push_ins                r   rS  z$AutostartBox.popup_menu_below_button  s     Awb""$)/):):)<&
Hh%%'##%5;;?3aHuww-!W}r   N)rh   ri   rj   r;   rM   r   r   r   r  r  r  r  rO  rQ  r_  rq  r^  ry  rS  rn   r   r   rC   rC   z  sX    F!P	,
.+,0L 
%%N#JO
".'r   rC   c                       e Zd Zd Zd Zd Zy)rL   c                 Z   t         j                  j                  |        || _        t	               }t        j
                         }|j                  d       |j                  |ddd       t        j                  j                         }t         j                  j                  |      }| j                  j                  r	 t        j                  | j                  j                        rVt         j"                  j%                  | j                  j                  ddd      }t         j&                  j)                  |      }nLt         j&                  j+                  | j                  j                  t         j,                  j.                        }n<t         j&                  j+                  t0        t         j,                  j.                        }t        j2                  t         j,                  j.                        \  }}	}
|j5                  |	       |j7                  |dddd       t        j8                  t         j:                  j<                        | _        d| j>                  j@                  _!        t         jD                  jF                  | j>                  j@                  _$        t        jJ                         | _&        t        jN                  | j                  jP                        }| jL                  jS                  djU                  |             d| jL                  j@                  _+        | j>                  jY                  | jL                         t        jJ                         | _-        t        jN                  | j                  j\                        }| jZ                  jS                  d	jU                  |             d| jZ                  j@                  _+        | jZ                  j_                  t`        jb                  jd                         | j>                  jY                  | jZ                         |jg                  | j>                  |t         jh                  jj                  dd       | j>                  jm                  |jn                         t        j8                  t         j:                  j<                        | _8        tr        ju                  | jp                         d
| jp                  j@                  _!        | jp                  jw                  d       t        jN                  | j                  jx                        }t        jJ                  t{        d            | _>        | j|                  j                  d       | jp                  j                  | j|                  d
d
d       t        jJ                         | _@        | j                  j                  d       | j                  jS                  t{        d      |z         | j                  j                         j                  d       | jp                  j                  | j                  d
d
d       |jg                  | jp                  | j>                  t         jh                  jj                  dd       | jp                  jm                  |jn                         | j|                  j                  |dk7         | j                  j                  |dk7         t        j8                  t         j:                  j                        }|j                  d       |j                  d       t        j                         }|j                  | j                  jn                         |j                  d| j                         |jY                  |       |jg                  || jp                  t         jh                  jj                  dd       | jY                  |       y #  t         j&                  j+                  t0        t         j,                  j.                        }Y dxY w)N   Tr      r   r   	<b>{}</b>        <small>{}</small>FDelay%s sz	dim-labelr|      znotify::active)Kr   
ListBoxRowr;   rP   SettingsWidgetGridset_column_spacingrD   r   Screenr&   	IconThemeget_for_screenr   r   path_is_absoluter   Pixbufnew_from_file_at_scaleImagenew_from_pixbufr  r  LARGE_TOOLBARr   icon_size_lookupset_pixel_sizeattachr   r   r   desc_boxpropshexpandr  STARThalignr>  
name_labelmarkup_escape_textrk   
set_markupformatxalignr   comment_labelrl   set_ellipsizer   EllipsizeModeENDattach_next_toPositionTypeRIGHTr  r   	delay_boxDELAY_GROUPrA   set_margin_rightr   r6   delay_labelset_no_show_alldelay_time_labelr   r   set_visibler   set_margin_topset_margin_bottomSwitch
set_activer   on_switch_activated)r8   rP   r  gridscreen
icon_themepixbufimgvalidr.  hname_markupcomment_markupdelay_time_markup
switch_boxswitchs                   r   r;   zAutostartRow.__init__  s[   %!xxz#$dA.'')]]11&9
88==]((7&--DDTXX]]TVXZ\`aF))33F;C))66txx}}cllF`F`aC ))..|S\\=W=WXC**3<<+E+EFq!1CAq!$COO,D,DE&*#%(YY__"))+--dhhmm<"";#5#5k#BC'*$$//* YY[001A1AB%%&9&@&@&PQ*-  '(()<)<)@)@A$,,-DMM30@0@0F0F1M##CKK0S__-E-EFt~~.',$''+ 33DHHNNC99QwZ0((.!!$"2"2E5!D #		--d3((65F)FG//1;;KH!!$"7"7qIDNNDMM3;K;K;Q;QSTVWX$$S[[1$$%6#%=>))*;s*BCWW)C)CD
!!!$$$Q'$((**+')A)ABvJ8H8H8N8NPQSTUq]ii22<A[A[\s   >C_) )>`*c                 h   t        j                  | j                  j                        }t        j                  | j                  j                        }t        j                  | j                  j
                        }| j                  j                  dj                  |             | j                  j                  dj                  |             | j                  j                  t        d      |z         | j                  j                  |dk7         | j                  j                  |dk7         y )Nr  r  r  r|   )r   r  rP   rk   rl   r   r  r  r  r  r  r6   r  r  )r8   r  r  r  s       r   r   zAutostartRow.update  s    --dhhmm<001A1AB 33DHHNNC"";#5#5k#BC%%&9&@&@&PQ((65F)FG$$%6#%=>))*;s*BCr   c                    |j                         }|| j                  j                  k(  ry |rR| j                  j                  d       | j                  j                  d       | j                  j                  d       y | j                  j                  d       | j                  j                  d       | j                  j                  d       y NTF)
get_activerP   r   r   r  r  r  )r8   r  gparamactives       r   r  z AutostartRow.on_switch_activated  s    ""$TXX%%%HH  &MM''-NN((.HH  'MM''.NN((/r   N)rh   ri   rj   r;   r   r  rn   r   r   rL   rL     s    KZ	D0r   rL   c                   2     e Zd Zd fd	Zd Zd Zd Z xZS )rX  c                     t         t        |           || _        | j	                  d       | j                  t        d      t        j                  j                         |sN| j                  t        d             | j                  t        d      t        j                  j                         nM| j                  t        d             | j                  t        d      t        j                  j                         | j                  t        j                  j                         | j                         }|j                  d       t        j                         }|j!                  d       |j#                  d       |j                  d       |j%                  |       t        j&                  t        d	            }d
|j(                  _        |j-                  |dddd       t        j.                         | _        d| j0                  j(                  _        | j                  r/| j0                  j5                  | j                  j6                         | j0                  j9                  d| j:                         |j-                  | j0                  dddd       t        j&                  t        d            }d
|j(                  _        |j-                  |dddd       t        j<                  t        j>                  j@                        }|j-                  |dddd       t        j.                         | _!        d| jB                  j(                  _        | jB                  jE                  d       | j                  r/| jB                  j5                  | j                  jF                         | jB                  j9                  d| j:                         |jI                  | jB                  ddd       t        jJ                  jM                  t        d            }d|j(                  _        |j9                  d| jN                         |jQ                  |ddd       t        j&                  t        d            }d
|j(                  _        |j-                  |dddd       t        j.                         | _)        d| jR                  j(                  _        | j                  r/| jR                  j5                  | j                  jT                         | jR                  j9                  d| j:                         |j-                  | jR                  dddd       t        j&                  t        d            }d
|j(                  _        |j-                  |dddd       t        j<                  t        j>                  j@                        }|j-                  |dddd       t        jV                  jY                  ddd      | _-        | j                  r8| jZ                  j]                  t_        | j                  j`                               | jZ                  j9                  d| j:                         |jI                  | jZ                  ddd       y )NTCancelzAdd Startup Programr   zEdit Startup ProgramSave      Namer  r   r   rK  r  Commandz	Browse...Fr   CommentzStartup delay   rx  )1superrX  r;   rP   	set_modalr
  r6   r   rB  CANCEL	set_titlerC  set_default_responser@  set_border_widthr  r  set_row_spacingr   r>  r  r  r  Entry
name_entryr  set_textrk   r   on_entry_activatedr   r   r   command_entryr  r   rD   r  new_with_labelon_browse_button_clickedpack_endcomment_entryrl   
SpinButtonnew_with_rangespin	set_valueintr   )r8   rP   content_arear  rH  r   browse_button	__class__s          r   r;   zAppDialog.__init__  sz   i')t(S%5%5%<%<=NN1234OOAeHc&6&6&9&9:NN1345OOAfIs'7'7':':;!!#"2"2"5"56,,.%%a(xxz#Qa 		!F)$ E1aA&))+(,%88OO$$TXX]]3
D,C,CDDOOQ1a0		!I,' E1aA&ggcoo001CAq!$ YY[+/  (++B/88''(8(89"":t/F/FGt))4q9

11!K.A&+#i)F)FG]E5!4		!I,' E1aA& YY[+/  (88''(8(89"":t/F/FGD&&1a3		!O,- E1aA&ggcoo001CAq!$NN11!S!<	88IIDHHNN 34		*d&=&=>tyy%2r   c                    ddi}d }| j                         t        j                  j                  k(  r`| j                  j                         }| j                  j                         }| j                  j                         }t        t        | j                  j                                     }d }|dk(  s|j                         rt        d      }n	 t        j                  |      \  }}|pt        j$                  | dt        j&                  j(                  t        j*                  j,                  d|z        }
d }|
j                          |
j/                          T|dk(  s|j                         r	d   |d<   n||d<   ||d	<   ||d
<   ||d<   d|d<   	 | j/                          |S # t        j                   $ r$}	|	r|	j"                  }nt        d      }Y d }	~	d }	~	ww xY w)NrW  Fr   z#The startup command cannot be emptyz The startup command is not validr   z%srk   r   rl   r   T)rc  r   rB  rC  r  get_textr  r  strr  r  	get_valueisspacer6   r   shell_parse_argvr   r?  MessageDialogr<  r=  ButtonsTyper  r2  )r8   r   	error_msgrk   r   rl   r   successargvr   msg_boxs              r   r[  zAppDialog.run_dialogI  s   %	hhjC,,///??++-D((113G((113GDII//123EI"} 1CD	J$($9$9'$BMGT $++D!S__5J5J,/OO,B,B,09,<> !	!rzT\\^!%av!%v 'F9 'F9#F7O!F6N; {{ J$%II	$%&H$I		Js   F% %G8GGc                 V    | j                  t        j                  j                         y r   )r+  r   rB  rC  )r8   r  s     r   r  zAppDialog.on_entry_activatedx  s    c&&))*r   c           	         t        j                  t        d      | t         j                  j                  t         j
                  t         j                  j                  t         j                  t         j                  j                  f      }|j                         }|t         j                  j                  k(  r+|j                         }| j                  j                  |       |j                          y )NzSelect Command)r   FileChooserDialogr6   FileChooserActionOPENSTOCK_CANCELrB  r  
STOCK_OPENACCEPTrc  re  r  r  r2  )r8   rE  chooserr+  rk   s        r   r  z"AppDialog.on_browse_button_clicked{  s    ''*:(;(,(+(=(=(B(B),)9)93;K;K;R;R),9I9I9P9P)RS ;;=s''...'')D''-r   r   )rh   ri   rj   r;   r[  r  r  __classcell__)r  s   @r   rX  rX    s    I3V-^+r   rX  c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)rb  c                 \   t         j                  j                  | t        d             i | _        t        j
                         | _        | j                  j                  t        d             | j                  j                  d       t        j                         | _
        | j                  j                  | j                         d| j                  j                  _        | j                  j                  d       t        j                         j!                  | j"                  d        j%                  t&        d        j)                  | j*                  d        | j                  j-                  dfd       t/        j0                         }|D ]G  }|j3                         s| j5                  |      }|s(|| j                  |<   j                  |       I t        j6                         }|j9                  d       |j;                  t         j<                  j>                         t        j@                         }t         jB                  jD                  |j                  _#        |jI                         jK                  d	       d|j                  _&        t        jN                  t         jP                  jR                  
      }|j                  |       |j                  | j                         |j                  |       |j                         | jU                  t        d      t         jV                  jX                         | jU                  t        d      t         jV                  jZ                         | j]                  t         jV                  jZ                         | j_                         j9                  d       | j_                         ja                  |ddd       | jc                  d       | je                  dd       | _3        | j-                  d| jh                         y )NApplications)r  zSearch Applications...   Tzsearch-changedc                 $    j                         S r   )invalidate_filter)r   r   s    r   r0  z+AppChooserDialog.__init__.<locals>.<lambda>  s    x7Q7Q7S r   r  r   r   _ClosezAdd Applicationr   i  i,  zkey-press-event)5r   Dialogr;   r6   r   SearchEntryentryset_placeholder_textset_width_chars	SearchBar
search_barr   r  r  set_search_moder   r   r   r   r   set_filter_funclist_filter_funcr   r   app_info_get_allshould_showbuild_widgetr   r  r   r   r   r   r   r   hscrollbar_policyr   r   vexpandr   r   r   r
  rB  CLOSErC  r  r@  rD   r  set_size_requestr   on_key_press)r8   appsr#  r  r  swr   r   s          @r   r;   zAppChooserDialog.__init__  s   

D.(9:__&


''*B(CD

""2&--/DJJ'(,%''-;;=t~~t4  !148  !6!6=

+-ST##% 	)A}}**1-'(DHHV$LL(	) 		q!cnn//0!%(^^%9%9"
((0gg#//":":;		# 
x(S%5%5%;%;<+,c.>.>.A.AB!!#"2"2"5"56003**5$a@tc#& &(9(9:r   c                     | j                   j                  |      j                         }| j                   j                  |      j                         }||k  ry||kD  ryyr  )r   r  get_namer"  s         r   r   zAppChooserDialog.sort_apps  sM    Q((*Q((*5=U]r   c                 D   t        j                         }t        j                         }|j                  d       |j	                         sy t
        j                  j                         }t         j                  j                  |      }|j                         }|r	 t        j                  |j                               rR|j                         }t        j                  j!                  |ddd      }t         j"                  j%                  |      }	nX|j'                  |j                         dt         j(                  j*                        }
t         j"                  j%                  |
      }	nYt         j"                  j-                  t.        j0                  j3                  t4              t         j6                  j8                        }	|j;                  |	dddd       d|	j<                  _        t        j@                  |j	                         d      }|jC                  ||	t         jD                  jF                  dd       d|j<                  _        t         jH                  jJ                  |j<                  _&        d|j<                  _'        t         jH                  jP                  |j<                  _)        |jU                  |       |S #  t         j"                  j-                  t.        j0                  j3                  t4              t         j6                  j8                        }	Y ]xY w)N
   r  Tr   r   F)rH  r  )+r   r  r  r  r0  r   r  r&   r  r  get_iconr   r  	to_stringr   r  r  r  r  	load_iconIconLookupFlags
FORCE_SIZEnew_from_giconr   
ThemedIconru   r   r  r  r  r  r  r>  r  r  r  r  r  r  r)  r  valignr   )r8   r#  r   r  r  r  r   iconfile
shown_iconr  r  rH  s               r   r'  zAppChooserDialog.build_widget  s   nnxxz#zz|'')]]11&9
zz|	m(()9:#~~/H!*!1!1!H!HSUWY[_!`J))33J?C'11$..2BBH[H[HfHfgF))33F;C ))**3>>+=+=l+KS\\MgMghCCAq!$!				

Q7E3(8(8(>(>1E" YY__# YY--
!mii..s~~/A/A,/OQTQ]Q]QkQkls   CK ALc                    | j                   j                         j                         }|j                         }|j	                         D ]B  }t        |      t        j                  k(  s ||j                         j                         v r y y yr  )r  r  r!  r1  get_childrentyper   r>  )r8   r   unusedtextr  childs         r   r$  z!AppChooserDialog.list_filter_func  ss    zz""$**,}}&&( 	EE{cii'5>>+1133		
 r   c                    t        j                  |j                        }|dk(  rl| j                  j	                         r| j
                  j                  d       y| j
                  j                         r| j                  j                          yy|dvr| j                  j	                         s| j
                  j                         rl| j                  j                  |      rQ| j                  j                          | j                  j                         }| j                  j                  ||       y| j
                  j                  |      S y)NEscapeFT)rD  UpDown)r   keyval_namekeyvalr  is_focusr!  r"  get_search_moderu  im_context_filter_keypressget_text_lengthselect_regionhandle_event)r8   r  eventkey_namels        r   r,  zAppChooserDialog.on_key_press  s    ??5<<0xzz""$//6002

%%'  55::&&(T__-L-L-N::88?JJ))+

224AJJ,,Q2??//66r   c                 r    | j                   j                         }|r| j                  j                  |      S y r   )r   r3  r   r  r  s     r   rd  z!AppChooserDialog.get_selected_app  s-    mm,,.88<<$$r   N)	rh   ri   rj   r;   r   r'  r$  r,  rd  rn   r   r   rb  rb    s"    4;l	$L(r   rb  ),collectionsr   r]   rf  girequire_versiongi.repositoryr   r   r   r   r   r   SettingsWidgetsr	   xapp.GSettingsWidgetsenvironr   r   r   OrderedDictrF   r   KEEP_COMMENTSKEEP_TRANSLATIONSr   r  ru   r  r   r  r   r#   r.   r0   r^   rr   r   rC   r  rL   r  rX  rb  rn   r   r   <module>r]     s2    	   	   5%   ? ? $ #jj./G (((*!!//WD4E4E4W4Wmm 1 1 < <=N
3=] =]~w wr' 'Z377 Zxe03>> e0NK

 KZJszz JsGs   E E