
    ?g@G                     J   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
 d dlmZmZmZ dZdad Z G d d	      Z G d
 de      ZdaddZ G d de      Z G d d      Z G d de      Z G d de      Z G d de      Z G d d      Zy#  Y xY w)    NGtkz3.0)GLibr   GioGObject)SettingsWidgetRangeSwitchSettingsc                  .    t         
t               a t         S N)ini_instanceGtkSettingsEditor     @/usr/share/cinnamon/cinnamon-settings/bin/CinnamonGtkSettings.pyget_ini_editorr      s     (*r   c                   $    e Zd Zd Zd Zd Zd Zy)r   c                     t         j                  j                  t        j                         dd      | _        t        j                  j                         | _	        y )Ngtk-3.0zsettings.ini)
ospathjoinr   get_user_config_dir_pathr   r
   get_defaultdefault_settingsselfs    r   __init__zGtkSettingsEditor.__init__   s>    WW\\$":":"<"+"02
 !$ 8 8 :r   c                     d }	 t        j                         }|j                  | j                  d       |S #  Y |S xY w# |c cY S xY w)Nr   )r   KeyFileload_from_filer   )r   keyfiles     r   _get_keyfilezGtkSettingsEditor._get_keyfile$   sF    	llnG""4::q1 N	N7Ns   06 ;> > Ac                     | j                         }	 |j                  t        |      }|S #  | j                  j	                  |      }Y |S xY wr   )r$   get_booleanSETTINGS_GROUP_NAMEr   get_property)r   keyr#   results       r   r&   zGtkSettingsEditor.get_boolean.   sQ    ##%	=(()<cBF 	=**77<Fs	   * A
c                     | j                         }|j                  t        ||       	 |j                         }t	        j
                  | j                  t        |d   d             y #   xY w)Nr   utf8)encoding)r$   set_booleanr'   to_datar   file_set_contentsr   bytes)r   r)   valuer#   datas        r   r.   zGtkSettingsEditor.set_boolean7   s]    ##%/e<	??$D""4::uT!Wv/NO	s   >A( (A+N)__name__
__module____qualname__r   r$   r&   r.   r   r   r   r   r      s    ;r   r   c                   (     e Zd Zd fd	ZddZ xZS )GtkSettingsSwitchc                     || _         t        t        |   |       t	               | _        | j                  j                  | j
                  j                  | j                                | j                  j                  d| j                         y )Nnotify::active)setting_namesuperr8   r   r   settingscontent_widget
set_activer&   connecton_switch_active_changedr   markupr;   	__class__s      r   r   zGtkSettingsSwitch.__init__B   sk    (/7&(&&t}}'@'@ARAR'ST##$4d6S6STr   c                     | j                   j                  | j                  | j                  j	                                y r   )r=   r.   r;   r>   
get_active)r   switchpspecr3   s       r   rA   z*GtkSettingsSwitch.on_switch_active_changedJ   s+    !!$"3"3T5H5H5S5S5UVr   r   )r4   r5   r6   r   rA   __classcell__rD   s   @r   r8   r8   A   s    UWr   r8   c                 0    t         t        |       a t         S r   )css_instanceGtkCssEditor)selectors    r   get_css_editorrO   O   s     #H-r   c                       e Zd Zy)CSSSettingsExceptionN)r4   r5   r6   r   r   r   rQ   rQ   W   s    r   rQ   c                   R    e Zd Zd Zd Zd Zd Zd Zd Zd Z	e
d        Zd	 Zd
 Zy)rM   c                    t         j                  j                  t        j                         dd      | _        || _        d| j                  z  | _        g }t        j                  j                  | j
                        }	 |j                  d       \  }}}|j                         | _        t        j                  | j                        }|D ]8  }t!        |t        j"                  j$                        r(|j'                  |       : || _        y # t        j*                  $ rK}	|	j,                  t        j.                  j0                  k(  rd| _        || _        nt3        d      Y d }	~	y d }	~	ww xY w)Nr   zgtk.cssz</***** %s - cinnamon-settings-generated - do not edit *****/ z@Could not load ~/.config/gtk-3.0/gtk.css file, check permissions)r   r   r   r   r   r   rN   rule_separatorr   Filenew_for_pathload_contentsdecode	_contentstinycss2parse_stylesheet
isinstanceast
ParseErrorappend
stylesheetErrorcodeIOErrorEnum	NOT_FOUNDPermissionError)
r   rN   rulesfilesuccesscontent_bytestagra   rses
             r   r   zGtkCssEditor.__init__[   s(   WW\\$":":"<"+"+-
 !\_c_l_llxx$$TZZ0	j*.*<*<T*B'G]C*113DN!224>>BJ  !b(,,"9"9:R ! $DOzz 	jvv222!#"'%&hii  	js    BD E,!AE''E,c                    | j                   j                  d      }g }d}d}|D ]c  }| j                  |v r nS|dk(  r|r|j                         j	                  | j
                        rd}G|s|j                  |       d}]d|v sbd}e dk(  rt        |      dkD  r|j                          dj                  |      | _         y )N
TFrT   }r   )
rZ   splitrU   strip
startswithrN   r`   lenpopr   )r   in_lines	out_linessofselector_foundlines         r   sanitize_contentszGtkCssEditor.sanitize_contentsx   s    >>''-	 	D""d*rzczz|&&t}}5!%!  &d{!&%	( 2:#i.1,MMO9-r   c                     d}t        |t        j                  j                        r|d|j                  z   z  }|| j                  |j                        z  }|S )NrT   @)r]   r[   r^   AtRule
at_keyword_serialize_preludeprelude)r   ruleat_csss      r   _serialize_selectorz GtkCssEditor._serialize_selector   sL    dHLL//0cDOO++F$))$,,77r   c                 j   d}|D ]  }t        |t        j                  j                        r|dz  }-t        |t        j                  j                        r|d|j
                  z   z  }dt        |t        j                  j                        rt         ||j
                  z  } |j                         S )NrT    #)	r]   r[   r^   WhitespaceToken	HashTokenr2   FunctionBlocknextrr   )r   r   r   cvs       r   r   zGtkCssEditor._serialize_prelude   s     	#B"hll::;#B 6 67#.(B : :;"(("	# ||~r   c                 ~   d}| j                   D ]_  }t        |t        j                  j                  t        j                  j
                  f      r| j                  |      |k(  r||fc S |dz  }a t        j                  |dz   d      }| j                   j                  |       |t        | j                         dz
  fS )z
        Gets the current ruleset for selector_css,
        If it isn't currently defined, returns an empty
        one.
        r      z {}F)
ra   r]   r[   r^   r~   QualifiedRuler   parse_one_ruler`   rt   )r   selector_cssidxrl   new_rulesets        r   get_rulesetzGtkCssEditor.get_ruleset   s     // 	B"x||22HLL4N4NOP++B/<?s7N1HC		 --lU.BEJ{+C01444r   c                 *   | j                  |      \  }}t        j                  |j                  dd      }|D ]Y  }||j                  k(  sd }|j
                  D ]3  }t        |t        j                  j                        s(|j
                  }5 |c S  y NT)	r   r[   parse_declaration_listcontentnamer2   r]   r^   DimensionToken)	r   rN   	decl_namerl   _declarationsdeclaration
decl_valuecomponent_values	            r   get_declarationzGtkCssEditor.get_declaration   s      *A66rzz4N' 	"KK,,,!
'2'8'8 ;O!/8<<3N3NO%4%:%:
; "!	" r   c                 >   | j                  ||       | j                  |      \  }}d}|j                  r|j                  d   j                  }t	        j
                  ||z   dz   |z   dz         }|D ]*  }| j                  |   j                  j                  |       , y )Nz
	r   z: ;)remove_declarationr   r   r2   r[   parse_component_value_listra   r`   )	r   rN   r   value_as_strrl   r   prefixcomponent_valuesr   s	            r   set_declarationzGtkCssEditor.set_declaration   s     	)4""8,C::ZZ]((F#>>v	?Q?C@DFR@SUX@Y Z/ 	AOOOC ((//@	Ar   c                    d}d}d}d}g }|D ]a  }|dz  }t        |      |k7  rht        ||   t        j                  j                        rA||   j
                  | j                  k(  r%t        |t        j                  j                        rt        |t        j                  j                        r|j
                  | j                  k(  rd}|rt        |t        j                  j                        r
|dk(  s|rd}t        | j
                        dz
  |k(  r|| j
                  |   k(  rd} || j
                  |   k(  r||   | j
                  |dz      k(  r|dz  }Q|j                  |       d |S )Nr   Fr   T)
rt   r]   r[   r^   
IdentTokenr2   r   r   LiteralTokenr`   )r   r   r   	ident_idxfound_identdonenew_contentr   s           r    _remove_declaration_from_contentz-GtkCssEditor._remove_declaration_from_content   s`   	& 	0O1HC7|s"z'#,@W@W'Xs|!![%5%55/8<<+G+GH/8<<+B+BC$$(8(88"ox||/H/HI A~$ {(()A-:"k&7&7	&BBD"k&7&7	&BB3<;#4#4Y]#CCNI//	02 r   c                 B   | j                  |      \  }}|sy t        j                  |j                  dd      }|D ]b  }||j                  k(  s| j                  ||j                        }|s| j                  j                  |        y || j                  |   _         y  y r   )r   r[   r   r   r   r   ra   remove)r   rN   r   rl   r   r   r   r   s           r   r   zGtkCssEditor.remove_declaration   s    ""8,C66rzz4N' 		KK,,,"CCKQSQ[Q[\"OO**2./:$,		r   c                    | j                          d}| j                  j                  d      }|D ]  }| j                  |v r n
||dz   z  } | j                  r@dk7  r|dz  }|| j                  dz   z  }| j                  D ]  }||j                         z  } || _        	 t        | j                  d      5 }|j                  |       d d d        y # 1 sw Y   y xY w# t        $ r}t        |       Y d }~y d }~ww xY w)NrT   ro   zw+)r{   rZ   rq   rU   ra   	serializeopenr   writerf   print)r   outlinesrz   rl   frm   s          r   save_stylesheetzGtkCssEditor.save_stylesheet  s     $$T* 	D""d*4$;C		 ??rzt4&&--Coo &r||~%& 	djj$' 1   	!HH	s6   !C 7C	C CC C 	C<'C77C<N)r4   r5   r6   r   r{   r   r   r   r   r   staticmethodr   r   r   r   r   r   rM   rM   Z   sF    j:.>5$A   B&r   rM   c                         e Zd Zd fd	Z xZS )CssOverrideSwitchc                 p    || _         t        t        |   |       | j                  j                  d       y )NF)r;   r<   r   r   r>   r?   rB   s      r   r   zCssOverrideSwitch.__init__-  s/    (/7&&u-r   r   )r4   r5   r6   r   rI   rJ   s   @r   r   r   ,  s    . .r   r   c                   :     e Zd Zd fd	Zd ZddZd Zd Z xZS )CssRangec	                     || _         || _        t        t        |   ||||d|       || _        d| _        |j                  | _        || _	        || _
        y )Nr   )unitsminimaxisteptooltipr   )r   r   r<   r   r   r   timerr>   switch_widgetrN   
decl_names)
r   rC   rN   r   r   r   r   r   r   rD   s
            r   r   zCssRange.__init__4  sY    		h&vUDWXbi&j

*99 $r   c                    t        | j                        }d}| j                  D ]"  }|j                  | j                  |      r d} n d}|rD|j                  | j                  | j                  d         }| j                  j                  |       | j                  j                  |       | j                  j                  d| j                         | j                  j                  |       y )NTF
   r   r:   )rO   rN   r   r   r>   	set_valuer   r?   r@   rA   revealerset_reveal_child)r   editorall_existingr   starting_values        r   sync_initial_switch_statez"CssRange.sync_initial_switch_stateC  s    . 	I%%dmmY? L	 #33DMM4??STCUVN)).9%%l3""#3T5R5RS&&|4r   c                    |j                         }|rG| j                  j                  d       | j                  j	                  d       | j                          nP| j                  D ]&  }t               j                  | j                  |       ( | j                  j                  d       t               j                          y )NTr   F)rF   r   r   r>   r   apply_laterr   rO   r   rN   r   )r   rG   rH   r3   activer   s         r   rA   z!CssRange.on_switch_active_changed[  s    ""$ MM**40))"-  I 33DMM4HI MM**51((*r   c                     d }| j                   dkD  rt        j                  | j                          t        j                  d||       | _         y )Nc                    t               }| j                  D ]Q  }dt        | j                  j	                               | j
                  fz  }|j                  | j                  ||       S |j                          d| _	        y )Nz%d%sr   )
rO   r   intr>   	get_valuer   r   rN   r   r   )r   r   r   r   s       r   applyz#CssRange.apply_later.<locals>.applyp  sq    #%F J%T-@-@-J-J-L)Mtzz(ZZ&&t}}dLIJ ""$DJr   r   ,  )r   r   source_removetimeout_add)r   argsr   s      r   r   zCssRange.apply_latero  s<    	 ::>tzz*%%c5$7
r   c                 2    | j                   | j                  gS r   )r   r   r   s    r   	get_rangezCssRange.get_range|  s    		499%%r   )rT   rT   Nr   )	r4   r5   r6   r   r   rA   r   r   rI   rJ   s   @r   r   r   3  s    %50+(8&r   r   c                   ,     e Zd Z fdZd ZddZ xZS )PreviewWidgetc                    t         t        |           t        j                         | _        | j
                  j                  d       | j
                  j                  d       | j
                  j                  d      | _	        | j                  j                  t        j                  j                         | j
                  j                  d      | _        | j                  | j                  ddd       t        j                   d      | _        | j"                  j%                  d	| j&                         | j)                          y )
NcinnamonzE/usr/share/cinnamon/cinnamon-settings/bin/scrollbar-test-widget.gladecontent_boxscrolled_windowTr   zorg.cinnamon.desktop.interface	schema_idzchanged::gtk-overlay-scrollbars)r<   r   r   r   Builderbuilderset_translation_domainadd_from_file
get_objectr>   
set_valignAlignCENTERr   
pack_startr   r
   interface_settingsr@   on_overlay_scrollbars_changedupdate_overlay_state)r   rD   s    r   r   zPreviewWidget.__init__  s    mT+-{{}++J7""#jk"ll55mD&&syy'7'78#||667HI++T4;"%,,9Y"Z''(I4KmKmn!!#r   c                     | j                   j                  d      r| j                  j                  d       y | j                  j                  d       y )Nzgtk-overlay-scrollbarsTF)r   r&   r   set_overlay_scrollingr   s    r   r   z"PreviewWidget.update_overlay_state  s?    ""../GH  66t<  66u=r   c                 $    | j                          y r   )r   )r   r=   r)   r3   s       r   r   z+PreviewWidget.on_overlay_scrollbars_changed  s    !!#r   r   )r4   r5   r6   r   r   r   rI   rJ   s   @r   r   r     s    $ >$r   r   c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)Gtk2ScrollbarSizeEditorc                    t        j                  d      }|r|j                  d      d   | _        n7t        j
                  j                  t        j                         d      | _        t        j                  j                  | j                        | _        t        j                  d      | _        || _        d| _        d| _        d| _        d| _        	 | j                  j'                  d       \  }}}|j)                         | _        | j7                          y # t         j*                  $ rJ}|j,                  t        j.                  j0                  k(  rnt3        d|j4                  z         Y d }~id }~ww xY w)	NGTK2_RC_FILES:r   z
.gtkrc-2.0zorg.cinnamon.themer   rT   z"Could not load .gtkrc-2.0 file: %s)r   getenvrq   r   r   r   r   get_home_dirr   rV   rW   _filer
   	_settingsui_scale
timeout_id
number_endstyle_prop_startrZ   rX   rY   rb   rc   rd   re   r   messageparse_contents)r   r  rcpathri   rj   rk   rm   s          r   r   z Gtk2ScrollbarSizeEditor.__init__  s   _-c*1-DJd&7&7&9<HDJXX**4::6
0DE  !	H*.***B*B4*H'G]C*113DN 	 zz 	Hvv222:QYYFG		Hs   4D E8.A E33E8c                    | j                   dkD  rt        j                  | j                          | j                  j	                  d      }t        ||z  | j                  z        }t        j                  d| j                  |      | _         y )Nr   z gtk-version-scrollbar-multiplierr   )	r  r   r   r  
get_doubler   r  r   on_set_size_timeout)r   size
multipliercomped_values       r   set_sizez Gtk2ScrollbarSizeEditor.set_size  si    ??Qt/^^../QR
4*,t}}<=**30H0H,Wr   c                    | j                   }|dkD  r(d|z  }|d | j                   |z   || j                  d  z   }n| j                   }	 | j                  j                         j	                         s(| j                  j                         j                          | j                  j                  |j                  d      d ddd        d| _        y# t        j                  $ r)}t        d|j                  z         Y d }~d| _        yd }~ww xY w)Nr   zGtkScrollbar::slider-width = %dzutf-8Fz"Could not save .gtkrc-2.0 file: %s)rZ   r  r  
get_parentquery_existsmake_directory_with_parentsreplace_contentsencoder   rb   r   r  r  )r   r  c
style_propfinal_contentsrm   s         r   r  z+Gtk2ScrollbarSizeEditor.on_set_size_timeout  s    NN!8:TAJ5 5 56CaH]H]H^F__N!^^N
	D::((*779

%%'CCEJJ''(=(=g(F(,(-()(,	. 	 zz 	D6BCC		Ds   A>C D	 DD	c                      d| _         d| _        y )Nz
###############################################
# Created by cinnamon-settings - please do not edit or reformat.
#
style "cs-scrollbar-style" {

}

class "GtkScrollbar" style "cs-scrollbar-style"
###############################################
   )rZ   r  r   s    r   make_default_contentsz-Gtk2ScrollbarSizeEditor.make_default_contents  s    
 !$r   c                 X   d}| j                   }||v r|j                  |      t        |      z   }|t        |      k  rm||   dk(  rQ|dz  }|}|t        |      k  r<||   dk(  r |}|d | dz   ||d  z   | _         |dz   | _        y|dz  }|t        |      k  r<|dz  }|t        |      k  rmy)Nzcs-scrollbar-style{r   rp   z

TF)rZ   indexrt   r  )r   markerr  iopen_bracketclose_brackets         r   !check_preexisting_cs_modificationz9Gtk2ScrollbarSizeEditor.check_preexisting_cs_modification  s    %NNQ;#f+-Ac!f*Q43;FA#$Lc!f*Q43;,-M-.}-=-F=>IZ-ZDN4@14DD1#'Q c!f* Q c!f* r   c                    | j                         ry d}| j                  s| j                          y | j                  }t        |      }d}d}||k  r)||d  j	                  |      r
|| _        d}n|dz  }||k  r)|s| j                          y |t        |      z  }d}||k  r||   dk(  rd}n|dz  }||k  r|s| j                          y |dz  }d}||k  rI||   j                         rn5||   j                         r|dz  }2||   j                         rd}n||k  rI|s| j                          y |dz  }||k  r!||   j                         r|dz  }|| _	        	 |d | j
                   || j                  d  z   | _        y )NzGtkScrollbar::slider-widthr   FTr   =)
r$  rZ   r  rt   rs   r  isalphaisspaceisdigitr  )r   r  r  lengthr!  founds         r   r  z&Gtk2ScrollbarSizeEditor.parse_contents  s   1131
~~&&(NNQ&ju
+()%FA &j &&(	S_&jts{FA	 &j &&(	Q&jt||~t||~Qt||~ &j &&(	Q&jt||~Q"#1D112Qt7G5HHr   N)	r4   r5   r6   r   r  r  r  r$  r  r   r   r   r   r     s#    4X4$2CIr   r   r   )os.pathr   signalr[   girequire_versiongi.repositoryr   r   r   r   xapp.SettingsWidgetsr   r   r	   r'   r   r   r   r8   rL   rO   	ExceptionrQ   rM   r   r   r   r   r   r   r   <module>r3     s     	 
   5%   1 1 > >  " "H
W 
W 	9 	P Pd. .J&u J&X$N $4hI hIc	s   B B"