
    ?gb                     F   d dl Z d dlmZ  ej                          d dlZ ej
                  dd        ej
                  dd       d dlZd dlZd dlmZ d dl	Z	ej                  j                  e	j                  dz          d dlZd dlZd dlZd dlZd d	lmZ d d
l d dlmZ d dlmZmZmZmZ  ej8                  dd       ej                  j;                  d      Zej                  j?                   ej@                         dd      Z!dez  Z"i Z#da$i dddddddddddddddd d!d d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1Z% G d2 d3e&      Z'd4 Z( G d5 d6e)      Z*e+d7k(  r ed8       d dl,Z, e-ej\                        d9k  r e/d:        e0        ej\                  d;   Z1e1d<vr e/d=ej\                  d;           e0        ej\                  d>   Z2 e*e1e2gej\                  d9d  Z3 e,jX                  e,jh                  e3j`                          ejj                          yy)?    N)utilGtkz3.0XAppz1.0)setproctitlez/bin)Path)*)find_extension_subdir)r   Gior   GLibcinnamon/usr/share/locale~spicesz%s/.cinnamon/configs/entryJSONSettingsEntrytextviewJSONSettingsTextViewcheckboxJSONSettingsSwitchswitch
spinbuttonJSONSettingsSpinButtonfilechooserJSONSettingsFileChooserscaleJSONSettingsRange
radiogroupJSONSettingsComboBoxcomboboxcolorchooserJSONSettingsColorChooserfontchooserJSONSettingsFontButtonsoundfilechooserJSONSettingsSoundFileChoosericonfilechooserJSONSettingsIconChooserdatechooserJSONSettingsDateChoosertimechooserJSONSettingsTimeChooser
keybindingJSONSettingsKeybindinglistJSONSettingsListc                   $     e Zd Z fdZd Z xZS )XLETSettingsButtonc                 t    t         t        |   |d          || _        || _        t        |d         | _        y )Ndescriptioncallback)superr1   __init__uuidinstance_idstrxletCallback)selfinfor7   r8   	__class__s       6/usr/share/cinnamon/cinnamon-settings/xlet-settings.pyr6   zXLETSettingsButton.__init__:   s9     $0m1DE	&Z 01    c                 p    t         j                  d| j                  | j                  | j                         y )Nz(sss))proxyactivateCallbackr:   r7   r8   )r;   s    r>   on_activatedzXLETSettingsButton.on_activated@   s&    w(9(9499dFVFVWr?   )__name__
__module____qualname__r6   rC   __classcell__)r=   s   @r>   r1   r1   9   s    2Xr?   r1   c                    | t         vr/	 t        j                  | t        dz         j                  t         | <   |j                         s|S t         |    r't        |    |      }	 |j                  d      }||k7  r|S t        |      S # t        $ rD 	 t        j                  | d      j                  t         | <   n# t        $ r d t         | <   Y nw xY wY w xY w# t        t        f$ r |}Y uw xY w)Nz/.local/share/localer   zutf-8)
translationsgettexttranslationhomeIOErrorstripdecodeAttributeErrorUnicodeDecodeError_)r7   stringresults      r>   	translaterU   C   s    <	*!(!4!4T4BX;X!Y!a!aL <<>Dd#F+	]]7+F VMV9)  	**%,%8%8?R%S%[%[T" *%)T"*	*  23 	F	sG   .B "C 	C'B76C7C	CCCCC)(C)c                   t    e Zd Z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d Zd Zd Zd Zd Zy)
MainWindowc                    d| _         g }	 t        |d         }|D ]L  \  }}|dv r"|j                         st        |      | _         ,|dv s1|j                         sBt        |      }N |rt        |      }|| _        || _        d | _        t        j                   j#                  d	      | _        i | _        | j)                          | j+                          | j-                          | j.                  j1                          |rEt        | j2                        d
kD  r-| j2                  D ]  }|d   |k(  s| j5                  |        n  n| j5                  | j2                  d          	 t        j6                  j9                  t        j:                  j<                  t        j>                  j@                  d dddd | jB                  d 	       y # t        t        t        f$ r d }	 t        t        j                        dkD  r-t        j                  t        j                  dd  dddg      d   }n# t        j                  $ r Y nw xY wt        t        j                        dkD  r/	 t        t        j                  d         }n# t        $ r d }Y nw xY wY xw xY w# tD        jF                  jH                  $ r}tK        |       Y d }~y d }~ww xY w)Nr      zt:i:ztab=zid=   )z-tz--tab)z-iz--idzorg.cinnamon   idzorg.Cinnamonz/org/Cinnamon)&tabint	TypeError
ValueError
IndexErrorlensysargvgetoptGetoptError	isdecimalr9   typer7   selected_instancer
   Settingsnew	gsettingscustom_modulesload_xlet_databuild_windowload_instanceswindowshow_allinstance_infoset_instance	DBusProxynew_for_busBusTypeSESSIONDBusProxyFlagsNONE_on_proxy_readydbus
exceptionsDBusExceptionprint)	r;   	xlet_typer7   r8   optsoptargr<   es	            r>   r6   zMainWindow.__init___   se   ( 	'k!n-K  	+HCo%==?"3xDH&==?"%c(K	+ k*K 		!%)).9 3t112Q6** :,%%d+
 d0034	MM%%ckk&9&93;M;M;R;RTX&4o~W[]a]q]qswyW :z2 	'Ksxx=1$!==!"vOPQRD%% 388}q '"%chhqk"2K! '"&K'	'Z ,, 	!HH	ss   G	 'A!J 	J A	H*)J*I =J?I  J I=<J=JJ
JJJK2KKNc                     t         j                  j                  |      at        j	                         sd at        r0t        j                  d| j                  | j                  d   d       y y )N(ssb)r\   T)r
   ru   new_for_bus_finishrA   get_name_ownerhighlightXletr7   ri   )r;   objrT   datas       r>   r{   zMainWindow._on_proxy_ready   sS    008##%ED4J4J44PRVW r?   c                     d| j                   d| j                  | _        t        j                  j                  | j                        s't        d| j                   d| j                  | _        t        j                  j                  d| j                  z        rAt        d| j                  z        j                         }t        j                  |      | _        y t        d| j                   d| j                  d       t                y )Nz/usr/share/cinnamon/zs/z/.local/share/cinnamon/z%s/metadata.jsonzCould not find z metadata for uuid z) - are you sure it's installed correctly?)rh   r7   xlet_dirospathexistsrL   openreadjsonloads	xlet_metar   quit)r;   raw_datas     r>   rn   zMainWindow.load_xlet_data   s    8<		499Mww~~dmm,AEtyyRVR[R[\DM77>>,t}}<=.>?DDFH!ZZ1DNgkgpgprvr{r{|}Fr?   c                     t        j                          _         j                  j                  dd       t	        j
                  t        j                  j                        } j                  j                  |       t	        j                         }|j                         j                  d       |j                  d       |j                  |       t	        j                         }|j                  d       |j                  |       t	        j
                  t        j                  j                        }|j                  |       t	        j
                  t        j                  j                        }|j                         j                  d       |j!                  |ddd       t        j"                  j%                  d	t        j&                  j(                         _         j*                  j-                  t/        d
             |j                   j*                         t        j"                  j%                  dt        j&                  j(                         _         j0                  j-                  t/        d             |j                   j0                         t	        j2                          _        |j7                   j4                         t	        j8                          _        t        j<                  j%                  dt        j&                  j(                        } j:                  j                  |        j:                  j-                  t/        d             |j?                   j:                  ddd       t	        j@                         }|jC                  t        jD                  jF                         t	        jH                  t/        d            }|jK                  |       |jM                  d jN                         |jQ                          t	        jH                  t/        d            }	|jK                  |	       |	jM                  d jR                         |	jQ                          t	        jH                  t/        d            }
|jK                  |
       |
jM                  d jT                         |
jQ                          t	        jV                         }|jK                  |       |jQ                          t	        jH                  t/        d       jX                  z        }|jK                  |       |jM                  d jZ                         |jQ                           j:                  j]                  |       t	        j^                         ja                  t        jb                  jd                  t        jb                  jd                         |j!                  ddd       t	        jf                          _4        j                   jh                         d jj                  v r( j                  jm                   jj                  d          tn        jp                  js                   jt                  d      }tn        jp                  jw                  |      r j                  jy                  |       ndtn        jp                  js                   jt                  d      }tn        jp                  jw                  |      r j                  jy                  |        j                  j{                  t}         jX                   jj                  d                d fd	} j                  jM                  d j~                          j                  jM                  d|        j*                  jM                  d j                          j0                  jM                  d j                         y )N   X  orientationzprimary-toolbarFTlinkedr   zgo-previous-symboliczPrevious instancezgo-next-symboliczNext instancezopen-menu-symboliczMore optionszImport from a file)labelactivatezExport to a filezReset to defaultsz	Reload %siconzicon.svgzicon.pngnamec                    j                   j                         d   }t        j                  j	                         j                  j                   j                               }|j                         j                  }|j                  |dz
  kD  r_j                   j                  dd       j                  t        j                  j                  t        j                  j                         y y )Nr[   d   r   r   )rq   get_preferred_sizeGdkDisplayget_defaultget_monitor_at_window
get_windowget_workareaheightresize
set_policyr   
PolicyTypeNEVER	AUTOMATIC)widgetr   natreqmonitorr   scwr;   s        r>   check_sizingz-MainWindow.build_window.<locals>.check_sizing  s    [[335a8Fkk--/EEdkkF\F\F^_G))+22F}}v|+""3,s~~33S^^5M5MN ,r?   destroyrealizeclickedN)Br   	GtkWindowrq   set_default_sizer   BoxOrientationVERTICALaddToolbarget_style_context	add_classset_show_arrowToolItem
set_expand
HORIZONTAL
pack_startButtonnew_from_icon_nameIconSizeBUTTONprev_buttonset_tooltip_textrR   next_buttonStackSwitcherstack_switcherset_center_widget
MenuButtonmenu_buttonImagepack_endMenu
set_halignAlignENDMenuItemappendconnectrestoreshowbackupresetSeparatorMenuItemr7   reload_xlet	set_popupScrolledWindowr   r   r   Stackinstance_stackr   set_icon_namer   r   joinr   r   set_icon_from_file	set_titlerU   r   previous_instancenext_instance)r;   main_boxtoolbartoolitemtoolbutton_boxinstance_button_boximagemenurestore_optionbackup_optionreset_option	separatorreload_option	icon_pathr   r   s   `              @r>   ro   zMainWindow.build_window   sK   nn&$$S#.77s'?'?@!++-!!#--.?@u%W<<>D!HS__-G-GH^$!gg#//2L2LM--/99(C!!"5ueQG::889OQTQ]Q]QdQde))!,?*@A 0 01::889KS\\M`M`a))!O*<= 0 01!//1(()<)<=>>+		,,-A3<<CVCVWU#))!N*;< 0 0%Bxxz		&A.B,CDN#z4<<81-?+@AM"j$++6||!,?*@AL!Z4))+	I1[>DII+EFM"j$*:*:;""4(  "s~~++S^^-A-ABCtQ/!iik##$T^^#KK%%dnnV&<=GGLL
;	77>>)$KK**95T]]J?Iww~~i(..y9i		4>>&3IJK	O 	Ityy1I|4  D,B,BC  D,>,>?r?   c           
      	   g | _         t        t        j                  j	                  t
        | j                              }t        t        d| j                        }d}|j                         rt        j                  |      ng }|j                         rt        j                  |      ng }t        ||z         }	 t        | j                  d         dk7  }|D ]  }|dd  dk7  r|dd }	|s|	| j                  k7  r$|r`	 t        |	       d}
| j$                  j'                  d| j(                  z        }|D ]"  }t        |v s|	|j+                  d	      v s d
}
 n |
st-        t        j                  j	                  ||v r|n||      | j.                        }|	|_        t3        j4                  t2        j6                  j8                        }| j:                  j=                  ||	       ||	d}| j                   j?                  |       |jA                         }tC        tE        |jG                                     }	 |D ]  }|dk(  r	||   D ]  }|dv r$	 tI        | j                  ||   |         ||   |<   +|dv rQtJ        jM                         }||   |   }|D ]'  }||   dk(  r||   |tI        | j                  |      <   ) |||   |<   |dv s||   |   }|D ]  }tI        | j                  |d         |d<       	 |d   dk(  r| jO                  ||||       n| jQ                  ||||       | jR                  *|| _)        d|v r| jT                  jW                  |d          	 |dz  } |dk  r7| jX                  j[                  d
       | j\                  j[                  d
       y y # t        t        f$ r d}Y w xY w# t        t        f$ r t!        j"                          Y w xY w# t        t        f$ r t!        j"                          Y w xY w# |d   dk(  r| jO                  ||||       n| jQ                  ||||       | jR                  +|| _)        d|v r| jT                  jW                  |d          w w w xY w)Nz/.cinnamon/configs/r   zmax-instancesr[   F.jsonzenabled-%ss:Tr   )settingsr\   __md5__)r3   tooltipunitsoptionscustomcolumnstitlerh   layoutstack   )/rs   r   r   r   r   settings_dirr7   rL   r   listdirsortedr^   r   KeyErrorr`   r_   	traceback	print_excrl   get_strvrh   splitJSONSettingsHandlernotify_dbusr8   r   r   r   r   r   	add_namedr   get_settingsnextitervaluesrU   collectionsOrderedDictbuild_with_layoutbuild_from_orderri   r   	set_stackr   set_no_show_allr   )r;   r   old_path	instances	new_items	old_items	dir_itemsmulti_instanceitemr8   instance_existsenabled
deninitionr   instance_boxr<   settings_map	first_keysettingkeynew_opt_dataopt_dataoptioncolumns_datacolumns                            r>   rp   zMainWindow.load_instances   s   BGGLLtyy9:T499EF	(,BJJt$2	,4OO,=BJJx(2	9y01		# !@AQFN  H	DBCyG#q*K!kTYY&>$
 #(..11-$))2KL") Jz)kZ=M=Mc=R.R*.
 '*277<<	@QW_ae+fhlhxhxyH#.H 77s/G/GHL)),D (<D%%d+#002LT,"5"5"789I!E+ XG)+ +G4 X"EE6=FtyyR^_fRghkRl=mW 5c : !I-+6+B+B+DL'3G'<S'AH*2 ^#+F#3x#?$,MUV\M]Ytyy&-I J^ :FL1#6 I-+7+@+EL*6 X2;DIIvg2WwX!XX0 V$0**<|YW)),lIV))1-1D*$++55d7mDNIQH	T q=,,T2,,T2 [ *% 	#"N	# ":. '')B %-j#9 6 ) 3 3 56" V$0**<|YW)),lIV))1-1D*$++55d7mD ' 2s\   <N.  O=P"O07AP/P.OO#O-,O-0#P	PP	PA*Rc           
      n   |}t               }|j                  |ddd       | j                  j                          ||d<   |d   D ]  }||   }|d   dk(  r5| j	                  ||d         }	|	)t        |	t              st        d       Ft               }	|d	   D ]k  }
||
   }d
|v r=t        |d   |d
         }|	j                  t        | j                  |d         |      }n(|	j                  t        | j                  |d               }|d   D ]  }||   }|d   }|dk(  rt        || j                  |d         }n|dk(  r#t        t        | j                  |d               }nc|dk(  r5| j	                  |||d         }|st        |t              s5t        d       |t         v r  t#               t         |      ||d   |      }nd
|v r&t        |d   |d
         }|j%                  ||       |j'                  |        n |j)                  |	|t        | j                  |d                 y )NTr   r  pagesrh   r  r   z page is not of type SettingsPagesections
dependencyr  revealerkeysbuttonr\   r   r3   $widget is not of type SettingsWidget)SettingsStackr   r   r   create_custom_widget
isinstanceSettingsPager   JSONSettingsRevealeradd_reveal_sectionrU   r7   add_sectionr1   TextSettingsWidgetXLET_SETTINGS_WIDGETSglobalsadd_reveal_rowadd_row
add_titled)r;   r)  r<   boxr*  r  
page_stackpage_keypage_defpagesection_keysection_defr7  sectionr,  r$  settings_typer   s                     r>   r  zMainWindow.build_with_layout{  sd   "_
z4q1  ""Ww *	[Hh'H8+004
;KL<#D,7<=#~#+J#7 4K"("5K#{2#7Z8H+VbJc#d"&"9"9)DII{[bOc:dow"9"x"&"2"29TYYT[H\3]"^*62 4+C0(,V(H4%7diid%TF*g5%))DIItM?R*S%TF*h6%)%>%>tS$zJZ%[F%~ (%/%G %&L M (*.CC%TWY/D]/S%TUXZ^_iZjlp%qF$'4/';D<LdS_N`'aH#226H2M#OOF3/44> !!$)DIIxPWGX2YZU*	[r?   c                    t               }|j                  |ddd       |d   dvr'|j                  t        d      | j                  z        }|j                         D ]m  \  }}|dk(  rd|v s|d   }	|	dv rjd|v r=t        |d   |d         }
|j                  t        | j                  |d	         |

      }n(|j                  t        | j                  |d	               }|	dk(  rt        || j                  |d         }n|	dk(  r#t        t        | j                  |d	               }ne|	dk(  r6| j                  |||d         }|t        |t              s7t        d       |	t        v r  t!               t        |	      ||d   |      }n2d|v r't        |d   |d         }
j#                  ||

       ]j%                  |       p y )NTr   rh   )headerrP  zSettings for %sr   r5  r   r3   r6  r9  r\   r   r  r:  )r>  r   rA  rR   r7   itemsr?  r@  rU   r1   rB  r<  r=  rC  r   rD  rE  rF  rG  )r;   r)  r<   rI  r*  rM  rP  r,  r$  rQ  r7  r   s               r>   r  zMainWindow.build_from_order  s   ~tT4+ V$99&&q):';dii'GHG%++- !	,ICi~ $V $99#t+#7Z8H$|J\#]"&"9"9)DIItTaOb:cnv"9"w"&"2"29TYY]H[3\"] H,/diidLF"g-!)DIItM7J"KLF"h.!66tS$zBRSF~ '?DE "&;;LWY'<]'KLSRVWaRbdhiF4'3D4Dd<FXYH**6H*EOOF+C!	,r?   c                 l   |d   }|d   }t         j                  j                  t        | j                        |      }	 || j
                  vrt        j                  j                  | j                  j                  dd      dz   |j                  d      d   z   |      }t        j                  j                  |      }|j                  j                  |       || j
                  |<    t'        | j
                  |   |      |g| S # t        $ r" t!        j"                          t%        d       Y y w xY w)Nfiler   @ .r   zproblem loading custom widget)r   r   r   r	   r   rm   	importlibr   spec_from_file_locationr7   replacer  module_from_specloaderexec_moduler  r  r  r   getattr)r;   r<   args	file_namewidget_name	file_pathspecmodules           r>   r<  zMainWindow.create_custom_widget  s   L	8nGGLL!6t}}!EyQ	
	 3 33 ~~==dii>O>OPSUW>X[^>^ajapapqtauvwax>x  {D  E"88>''/17##I. Dwt**95{CDP4PP  	!12	s   B)D (D32D3c           	          t         j                  d| j                  |j                  |t	        j
                  |             y )Nz(ssss))rA   updateSettingr7   r8   r   dumps)r;   handlerr,  values       r>   r  zMainWindow.notify_dbus  s,    Hdii1D1Dc4::V[K\]r?   c                 :   | j                   j                  |d          d|v r| j                  j                  |d          |d   j	                         }t        |      dkD  rY| j                  t        t        |            v r"|d   j                  || j                            n|d   j                  |d          t        rTt        j                  d| j                  | j                  d   d       t        j                  d| j                  |d   d       || _        y )Nr\   r  r[   r   r   FT)r   set_visible_child_namer   r  get_childrenrb   r]   rangeset_visible_childrA   r   r7   ri   )r;   r<   childrens      r>   rt   zMainWindow.set_instance  s    224:>d?))$w-8G}113H8}q 88uS]33M33HTXX4FGM33HQK@D4J4J44PRWXDJE!%r?   c                     | j                   j                  t        j                  j                         | j
                  j                  | j                        }| j                  | j
                  |dz
            y )Nr[   )	r   set_transition_typer   StackTransitionType
OVER_RIGHTrs   indexri   rt   r;   ra  rv  s      r>   r   zMainWindow.previous_instance  s[    //0G0G0R0RS""(()?)?@$,,U1W56r?   c                 6   | j                   j                  t        j                  j                         | j
                  j                  | j                        }|t        | j
                        dz
  k(  rd}n|dz  }| j                  | j
                  |          y )Nr[   r   )
r   rs  r   rt  	OVER_LEFTrs   rv  ri   rb   rt   rw  s      r>   r   zMainWindow.next_instance  s}    //0G0G0Q0QR""(()?)?@C**+a//EAIE$,,U34r?   c           	         t        j                  t        d      d t         j                  j                  t         j
                  t         j                  j                  t         j                  t         j                  j                  f      }|j                  d       t        j                         }|j                  d       |j                  t        d             |j                  |       |j                         }|t         j                  j                  k(  r7|j!                         }d|vr|dz   }| j"                  d   j%                  |       |j'                          y )Nz!Select or enter file to export toT*.json
JSON filesr   r   )r   FileChooserDialogrR   FileChooserActionSAVESTOCK_CANCELResponseTypeCANCEL
STOCK_SAVEACCEPTset_do_overwrite_confirmation
FileFilteradd_patternset_name
add_filterrunget_filenameri   save_to_filer   r;   ra  dialogfilter_textresponsefilenames         r>   r   zMainWindow.backup  s   &&q)L'M'+'*'<'<'A'A(+(8(8#:J:J:Q:Q(+8H8H8O8O(QR
 	,,T2nn&)Q|_-+&::<s''...**,Hh&#g-"":.;;HEr?   c           	         t        j                  t        d      d t         j                  j                  t         j
                  t         j                  j                  t         j                  t         j                  j                  f      }t        j                         }|j                  d       |j                  t        d             |j                  |       |j                         }|t         j                  j                  k(  r.|j                         }| j                   d   j#                  |       |j%                          y )NzSelect a JSON file to importr{  r|  r   )r   r}  rR   r~  OPENr  r  r  
STOCK_OPENOKr  r  r  r  r  r  ri   load_from_filer   r  s         r>   r   zMainWindow.restore&  s    &&q)G'H'+'*'<'<'A'A(+(8(8#:J:J:Q:Q(+8H8H8K8K(MN
 nn&)Q|_-+&::<s''*****,H"":.==hGr?   c                 >    | j                   d   j                          y )Nr   )ri   reset_to_defaultsr;   ra  s     r>   r   zMainWindow.reset9  s    z*<<>r?   c                     t         r:t         j                  d| j                  | j                  j	                                y y )Nz(ss))rA   
ReloadXletr7   rh   upperr  s     r>   r   zMainWindow.reload_xlet<  s+    VTYY		0AB r?   c                     t         r/t         j                  d| j                  | j                  d   d       | j                  j                          t        j                          y )Nr   r\   F)rA   r   r7   ri   rq   r   r   	main_quitr  s     r>   r   zMainWindow.quit@  sB    D4J4J44PRWXr?   r   )rD   rE   rF   r6   r{   rn   ro   rp   r  r  r<  r  rt   r   r   r   r   r   r   r    r?   r>   rW   rW   ^   se    FPX
a@FY3v2[h),VQ&^&7
5,&?Cr?   rW   __main__zxlet-settingsrY   zError: requires type and uuidr[   )appletdesklet	extensionzError: Invalid xlet type %sr  )6re   binr   strip_syspath_localsgirequire_versionr   rc   r   configr   r   currentPathrJ   r   importlib.utilrZ  r  pathlibr   JsonSettingsWidgetsExtensionCorer	   gi.repositoryr   r
   r   r   install
expanduserrL   r   get_user_config_dirr	  old_settings_dirrI   rA   rD  r   r1   rU   objectrW   rD   signalrb   rd   r   r   r   r7   rq   SIGINTmainr  r?   r>   <module>r     s         	   5%     65 ! 	 
 %  ""V+ ,      ! / . . 
/ 0	ww#ww||4D446
HM*T1 /2 0 0	
 4 5 / 2 2 6 4 : 5 5 5  4!" .# (X X6g gR z!
388}q-.I::+SXXa[988A;D	47#((12,7FFMM&---CHHJ r?   