
    fT                       d Z ddlmZmZmZ ddlZddlZddlZddlm	Z	 ddl
mZmZ ddlmZ  e        ddlmZmZmZ ddlmZ dd	lmZmZmZmZmZmZmZ dd
lmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z& ddl'm(Z( ddl)m*Z*m+Z+ ddl,m-Z- ddl.Z. e.j^                  d      Z0dZ1dZ2dZ3dZ4dZ5dZ6dZ7dZ8dZ9dZ:dZ;dZ<dZ=dZ>dZ?dZ@dZAd ZBd!ZCd"ZDd#ZEd$ZFd%ZGd&ZHd#ZId$ZJd'ZKd'ZLd(ZMd)ZNd)ZOd*ZPd+ZQd,ZRd-ZSd.ZT eUe$j                        ZWd/ZX ed0d      ZY ed1d      ZZ ed1d0      Z[ ed1d1      Z\ ed1d2      Z]e]Z^ G d3 d4      Z_ G d5 de(      Z` G d6 d7e(      Za G d8 d9e(      Zb G d: d;e(      Zc G d< d=e(      Zd G d> d?e(      Ze G d@ dAe(      Zf G dB dCe(      Zg G dD dEe(      Zh G dF dGe(      Zi G dH dIe(      Zj G dJ dKe(      Zk G dL dMe(      Zl G dN dOe(      Zm G dP dQe(      Zny)Rz#
File containing Config singleton.
    )divisionprint_functionunicode_literalsN)copytree)OptionParserOptionGroup)require_gi_versions)GtkGioGLib)show_confirmation_dialog)Versionunicode_strXDGDirs	chmodtreeProcesshexcolor_to_rgba
TermColors)	DesktopEnvironmentEnumStatusIconProviderEnumInputEventSourceEnumTouchInputEnumLearningBehaviorRepositionMethodEnumHandleDockingEdgeDockingMonitor)ConfigObject)CSMousetweaks0CSMousetweaks1)SchemaErrorConfigzorg.onboardzorg.onboard.keyboardzorg.onboard.windowzorg.onboard.window.landscapezorg.onboard.window.portraitzorg.onboard.icon-palettez"org.onboard.icon-palette.landscapez!org.onboard.icon-palette.portraitzorg.onboard.auto-showzorg.onboard.universal-accesszorg.onboard.theme-settingszorg.onboard.lockdownzorg.onboard.scannerzorg.onboard.typing-assistancez.org.onboard.typing-assistance.word-suggestionszorg.gnome.desktop.screensaverzorg.gnome.desktop.interfacez#org.gnome.desktop.a11y.applicationscom.canonical.unity-greeterz/apps/gksu/disable-grabd   2   i     @   CompactzClassic Onboardzonboard --xidz/usr/share/onboardz/usr/local/share/onboardonboardzonboard-defaults.confK            c                       e Zd ZdZdZdZdZy)NumResizeHandlesr   r+   r,   r-   N)__name__
__module____qualname__NONENORESIZESOMEALL     0/usr/lib/python3/dist-packages/Onboard/Config.pyr/   r/   {   s    DHDCr8   r/   c                   T    e Zd ZdZ ed      \  ZZ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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) fd!Z* fd"Z+d# Z,d$ Z-d% Z.d& Z/d' Z0d( Z1d) Z2d* Z3 e4e2e3      Z5d+ Z6	 dzd,Z7d- Z8d. Z9d/ Z: e4e9e:      Z;d0 Z<d1 Z=d{d2Z>d3 Z?d4 Z@d5 ZAd6 ZBd7 ZCd8 ZDd9 ZEd: ZFd; ZGd< ZHd= ZId> ZJd? ZKd@ ZLdA ZMdB ZNdC ZOdD ZPdE ZQdF ZRdG ZSdH ZTdI ZUdJ ZVdK ZWdL ZXdM ZYdN ZZdO Z[dP Z\d{dQZ]dR Z^dS Z_dT Z`dU ZadV ZbdW ZcdX ZddY ZedZ Zfd[ Zgd\ Zhd] Zid^ Zjd_ Zkd` Zlda Zmendb        Zoendc        Zpdd Zqde Zrdf Zsdg Ztdh Zudi Zv e4ev      Zwdj Zx e4dk       Zydl Zzdm Z{dn Z|do Z}dp Z~dq Zdr Zds Zdt Zdu Zdv Zdw Zendx        Zdy Z xZS )|r"   zN
    Singleton Class to encapsulate the gsettings stuff and check values.
    r-   .onboardN)r+   r+         ?superg      @      @
   g?)      @r@   g333333?)r,   r,   )r<   r<   )      ?rA   r   TFrA   c                     t        | d      s8t        j                  | g|i || _        | j                  j	                          | j                  S )z"
        Singleton magic.
        self)hasattrobject__new__rC   	construct)clsargskwargss      r9   rF   zConfig.__new__   sA     sF#~~c;D;F;CHHH xxr8   c                      y)z
        This constructor is still called multiple times.
        Do nothing here and use the singleton constructor construct() instead.
        Don't call base class constructors.
        Nr7   rC   s    r9   __init__zConfig.__init__   s     	r8   c           	         t               }t        |d      }|j                  dddt        d| j                               |j                  ddd	t        d
             |j                  dddt        d             |j                  dddt        d             |j                  dddt        d             |j                  |       t        |d      }|j                  ddddt        d             |j                  dddd t        d!             |j                  d"d#d$t        d%      &       |j                  d'd(d)d*t        d+             |j                  d,d-dd.t        d/             |j                  d0d1d2t        d3             |j                  |       t        |d4      }|j                  d5d6d7d8d9d:;       |j                  d<d=d7d>d9d?;       |j                  d@dAddBdCdDE       |j                  |       |j                         dF   }|| _        |j                  | _	        |j                  | _
        |j                  | _        dG| _        |j                  | _        	 dG}dG}|j                  r7|j                  j'                  dH      }t)        |      dIk\  r	|dGdI \  }}n|dF   }| j+                  ||       g | _        | j/                  t0              | _        | j2                  r| j2                  j5                          | j6                  | _        | j                  r|j8                  rB|j8                  dJk(  r| j:                  | _        nk|j8                  dKk(  r\| j<                  | _        nJt?        j@                  dJ      r| j:                  | _        n#dLtB        jD                  v r| j<                  | _        | jG                         | _$        | jH                  rtJ        jM                  dM       yGyG)Nz
        Singleton constructor, runs only once.
        First intialization stage that runs before the
        single instance check. Only do the bare minimum here.
        zGeneral Optionsz-lz--layoutlayoutzLayout file ({}) or name)desthelpz-tz--themethemezTheme file (.theme) or namez-sz--sizesizezWindow size, widthxheightz-xintxzWindow x position)typerP   rQ   z-yyzWindow y positionzAdvanced Optionsz-ez--xid
store_truexid_modez0Start in XEmbed mode, e.g. for gnome-screensaver)actionrP   rQ   z-mz--allow-multiple-instancesallow_multiple_instancesz Allow multiple Onboard instancesz--not-show-innot_show_inDESKTOPSzSilently fail to start in the given desktop environments. DESKTOPS is a comma-separated list of XDG desktop names, e.g. GNOME for GNOME Shell.)rP   metavarrQ   z-Dz--startup-delayfloatstartup_delayzQDelay showing the initial keyboard window by STARTUP_DELAY seconds (default 0.0).z-az--keep-aspectkeep_aspect_ratioz*Keep aspect ratio when resizing the windowz-qz--quirksquirks_namezROverride auto-detection and manually select quirks
QUIRKS={metacity|compiz|mutter}zDebug Optionsz-dz--debugstrdebugARGz{Set logging level or range of levels 
ARG=MIN_LEVEL[-MAX_LEVEL]
LEVEL={all|event|atspi|debug|info|warning|error|
critical}
)rV   rP   r^   rQ    z--launched-bylaunched_byzSimulate being launched by certain XEmbed sockets. 
Use this together with option --xid.               
ARG={unity-greeter|gnome-screen-saver}
z-gz--log-learning	log_learnFz$log all learned text; off by default)rZ   rP   defaultrQ   r   N-r,   zgnome-screensaverunity-greeterUNITY_GREETER_DBUS_NAMEzGStarting in project directory, importing local packages and extensions.)'r   r   
add_option_formatLAYOUT_FILE_EXTENSION_add_option_group
parse_argsoptionsrY   rh   rb   quirksr`   rd   opensysstdoutstderrsplitlen_init_loggingchildrenadd_optional_child	ConfigGDA
gnome_a11yinit_from_gsettingsLAUNCHER_NONErg   LAUNCHER_GSSLAUNCHER_UNITY_GREETERr   was_launched_byosenviron_is_running_from_sourceis_running_from_source_loggerwarning)rC   parsergrouprs   logfilemin_level_namemax_level_namelevel_ranges           r9   rG   zConfig.construct   s    F$56z7!779 	 	: 	yw45 	 	7xf23 	 	5E!<O:PQE!<O:PQ&F$67w|*IJ 	 	L;#*D9: 	 	< 	}" H  	 	 	0? A B 	 	C 	|(CD 	 	F 	z 9 : 	 	; 	&FO4yu7!& 	 	  	_5}!&< 	 	= 	/%K= 	 	? 	& ##%a((( **"..$22  ==!----c2K;1$1<Ra.!,Q>>: 11)<??OO//1  --==""&&*=='+'8'8D$((O;'+'B'BD$**+>?'+'8'8D$."**<'+'B'BD$&*&B&B&D#&&OO G H 'r8   c                 <   	 t        j                  |        t        j                  dj                  | j                         j                               t        j                  t        j                        rt        j                  dt        t        j                         z          t#        j$                         }t        j                  dj                  |             t        j                  dj                  | j&                               | j)                         | _        | j-                         | _        g | _        t2        j4                  j7                  | j.                        st2        j4                  j9                  t2        j4                  j;                  d      d      }t2        j4                  j7                  |      s=t2        j4                  j9                  t2        j4                  j;                  d      d      }t2        j4                  j7                  |      rt        j=                  t?        d	|| j.                               	 tA        || j.                         tC        | j.                  d
d       	 d }tF        jH                  jK                  tL              } ||d         |d<    ||d         |d<   |d   jO                         D ci c]  \  }}| ||       c}}|d<   ddl*m+}	 |	jY                  d      }
t2        j4                  j7                  |
      r| j[                         }|	jY                  d|z         }|	j]                  |
      }|	j]                  |      }t        j=                  d       |
|g||gfD ]  \  }}t2        j4                  j7                  |      s&t2        j4                  j7                  |      r't        j=                  dj                  ||              n>t        j=                  dj                  ||             	 t3        j^                  ||        ta        jb                  td              | j*                  dgz   }|D cg c]&  }t2        j4                  j9                  |tf              ( }}| ji                  |       | jk                  | jl                        }| jo                          | jp                  js                         }d|vrd|d<   || _8        | jl                  jt                  r,d| jv                  _<        | j{                  | jt                         ddl>m?a? t        j=                  dj                  | j                                      | j                          t        | j                        | _D        | j                  r/| j                  j                  | j                  j                         dt2        j                  v | _J        | j                          | j                          t        j                  d        y# t        $ r=}t        j	                  t        |             t        j                          Y d}~Bd}~ww xY w# tD        $ r5}t        j	                  t?        d      t        |      z          Y d}~$d}~ww xY wc c}}w # tP        $ r,}t        jS                  dt        |      z          Y d}~d}~ww xY w# tD        $ r-}t        j	                  dt        |      z          Y d}~ d}~ww xY wc c}w )!zu
        Second initialization stage.
        Call this after single instance checking on application start.
        NzDesktop environment: {}zcommand line: zlauched by, process: '{}'zlauched by, detected: {}~r;   z.sokz&Migrating user directory '{}' to '{}'.i  Tz"failed to migrate user directory. c                     t         j                  j                  t         j                  j                  |             d   S Nr   )r   pathsplitextbasename)rU   s    r9   <lambda>zConfig.init.<locals>.<lambda>  s)    rww'7'78H8H8K'LQ'O r8   rO   rR   system-theme-associationsz"migrating gsettings paths failed: r   )
ModelCachezlm:user:userzlm:user:z0Starting migration, user.lm has been deprecated.z@Migration target already exists, skipping renaming '{}' to '{}'.z+Migrating user language model '{}' to '{}'.z'Failed to migrate user language model. z/etc/onboardDefaultrf   )ThemezTheme candidates {}RUNNING_UNDER_GDMzLeaving init)Mr   rM   r!   r   errorr   rv   exitrd   formatget_desktop_environmentnameisEnabledForloggingDEBUGrc   argvr   get_launch_process_cmdlinerg   _get_install_dirinstall_dir_get_user_diruser_dir_image_search_pathsr   r   existsjoin
expanduserinforn   r   r   OSErrorr   SettingsnewSCHEMA_ONBOARDitems	Exceptionr   Onboard.WPEnginer   get_filenameget_system_default_lang_idget_backup_filenamerenamer   get_all_config_dirsUSER_DIRSYSTEM_DEFAULTS_FILENAMEload_system_defaultsinit_propertiesrs   _update_xembed_background_rgbasystem_theme_associationscopyrR   	theme_keymodifiedremember_themeOnboard.Appearancer   _get_theme_candidates
load_themedictsnippets_last_snippetsmousetweaksinit_click_type_window_visibleuniversal_accesshide_click_type_windowr   running_under_gdmon_properties_initializedapply)rC   ecmdlineold_user_direxfilterskvr   old_fnlang_idnew_fnold_baknew_bakoldr   pathspused_system_defaultstheme_assocss                        r9   initzConfig.initX  s}   	!!$' 	/vd::<AAB	D .MM*S]:;88:GMM5<<WEFMM4;;D<L<LMN  002**,#%  ww~~dmm,77<<(:(:3(?LL77>>,/!ww||BGG,>,>s,CVLww~~l+W%M%14==B C3\4==9dmmUD9
5OF((8A"(8"5AhK!''
!3AgJ &''B%C%I%I%KM!Q VAY M 12 	0((877>>&!557G,,Z'-ABF 44V<G 44V<GLLKL$f-/AB S77>>#&ww~~c* &5 '-fS#&68 LL "4%+VC%57		#s+, ++H5!!>23DIJqa!9:JJ!!%(  $33DLLA++-
 55::<L(&(L#-9D* <<&*DNN#

+ 	-*fT779:	< #4==1 ;;%%<<> "5

!B 	&&( 	

n%K  	MM+a.)HHJJ	D  3MM'*N"O"-b/#2 3 33M  5OO$H$/O%4 5 55: #  '@(3B'8 9 	 Ksx   X 	-Y! 7AZ( Z""Z( [ +\	Y!2YY!	Z**ZZ"Z( (	[1![[ 	\)!\\c                 r    | j                          | j                  r| j                  j                          y y N)disconnect_notificationsr   cleanuprL   s    r9   r   zConfig.cleanup  s0     	%%'$$& r8   c                     | j                   r?| j                   j                  | j                  j                  xr | j                          y y r   )r   !restore_click_type_window_visibler    enable_click_type_window_on_exitrY   rL   s    r9   final_cleanupzConfig.final_cleanup  sB    >>%%FF "MM!# r8   c           
         dddt         j                  fdt         j                  fdt         j                  fdt         j                  fdt         j                  ft         j
                  ft         j                  fdd	d
	}|j                         D ]7  \  }\  }}t        j                  |      |k7  s"t        j                  ||       9  G fddt        j                        } G d dt              } G fddt        j                        }	d}
t        j                         }	 |j                  j!                         }|j#                   |	|
||             t        j$                         }|j'                  |       t        j(                  |       r|j+                  j-                                |r5|j-                         }||v r ||   \  }}|j/                   ||             y y y #  d}Y xY w)N      r%   (         r?   )r+   N)r   N)	CRITICALERRORWARNINGINFOr   ATSPIEVENTr6   NOTSETc                   .    e Zd Z fdZ fdZfdZy)*Config._init_logging.<locals>.CustomLoggerc                 b    | _         | _        t        j                  j                  | g|  y r   )LEVEL_ATSPILEVEL_EVENTr   LoggerrM   )rC   rI   r   r   s     r9   rM   z3Config._init_logging.<locals>.CustomLogger.__init__  s*    #. #. ''4t4r8   c                 T    | j                        r | j                  ||fi | y y r   r   _log)rC   msgrI   rJ   r   s       r9   atspiz0Config._init_logging.<locals>.CustomLogger.atspi  -    $$[1DIIk3?? 2r8   c                 T    | j                        r | j                  ||fi | y y r   r  )rC   r  rI   rJ   r   s       r9   eventz0Config._init_logging.<locals>.CustomLogger.event  r  r8   N)r0   r1   r2   rM   r  r	  )r   r   s   r9   CustomLoggerr     s    5
@@r8   r
  c                       e Zd Zd Zd Zy)*Config._init_logging.<locals>.CustomFilterc                     || _         y r   )
_max_level)rC   	max_levels     r9   rM   z3Config._init_logging.<locals>.CustomFilter.__init__  s	    "+r8   c                 4    |j                   | j                  k  S r   )levelnor  )rC   	logRecords     r9   r   z1Config._init_logging.<locals>.CustomFilter.filter  s     ((DOO;;r8   N)r0   r1   r2   rM   r   r7   r8   r9   CustomFilterr    s    ,<r8   r  c                   $    e Zd Zd Zd Z fdZy),Config._init_logging.<locals>.ColorFormatterc                     || _         || _        |r
t               nd | _        | j	                  ||      }t
        j                  j                  | |dd       y )Nz%H:%M:%S{)datefmtstyle)_log_levels_use_colorsr   _tcs_substitute_variablesr   	FormatterrM   )rC   msgfmt
log_levels
use_colorsr  s        r9   rM   z5Config._init_logging.<locals>.ColorFormatter.__init__"  sT    #- #- ,6JLD	00D!!**43=14 + 6r8   c                 :   |rt|j                  d| j                  j                  t        j                              }|j                  d| j                  j                  t        j
                              }|S |j                  dd      }|j                  dd      }|S )Nz{RESET}z{BOLD}rf   )replacer  getr   RESETBOLD)rC   r  r!  s      r9   r  zBConfig._init_logging.<locals>.ColorFormatter._substitute_variables,  s    ++i&*iimmJ4D4D&EGC++h&*iimmJOO&DFC
 
 ++i4C++h3C
r8   c                    |j                   }| j                  r<|| j                  v r.| j                  |   \  }}| j                  j	                  |      }nd}||j
                  d<   t              }|rdnd|j
                  d<   |rdnd|j
                  d<   |j                  |rdndz   |j
                  d	<   t        j                  j                  | |      S )
Nrf   
levelcolor   r+   
name_width   level_width:name_)	levelnamer  r  r  r$  __dict__boolr   r   r  formatMessage)rC   record
level_namelevelcolor	color_seqrd   r   s          r9   r2  z:Config._init_logging.<locals>.ColorFormatter.formatMessage7  s    #--
##!1!11#'#3#3J#?LE5 $		e 4I "I09-^,6;-6;.+1;;27BS,B(((66tVDDr8   N)r0   r1   r2   rM   r  r2  )r   s   r9   ColorFormatterr  !  s    6	Er8   r8  zp{asctime}.{msecs:03.0f} {levelcolor}{levelname:{level_width}}{RESET} {BOLD}{name_:{name_width}}{RESET} {message}F)r   REDYELLOWGREENBLUECYANMAGENTAr   r   getLevelNameaddLevelNamer  rE   r  StreamHandlerstreamisattysetFormatter	getLogger
addHandlersetLoggerClasssetLevelupper	addFilter)rC   r   r   levelsr   r5  r6  r
  r  r8  r  handleris_ttyrootr  r   r   s    `             @@r9   r{   zConfig._init_logging  s    z~~6z~~6z'8'89z'7'78z7 &z7%z'9'9:,,
 %+LLN 	2 D.5%##E*d2$$UD1	2	@7>> 	@	<6 	<$	EW.. $	EL
 '')	^^**,F 	^FFFCD  " |,MM...01+113N'#).#9 	5!!,y"9: ( 	Fs   +G1 1G7c                    t         | _        d| _        | j                  dd       | j                  dd       | j                  dt              | _        | j                  dt              | _        | j                  dd	       | j                  d
i d       | j                  di d       | j                  dd	       | j                  dt        j                  dddd       | j                  dd       | j                  dd	       | j                  dd       | j                  di d       | j                  dd       | j                  ddd       | j                  dddg       | j                  dd        | j                  d!d	       | j                  d"d#       t               | _        t               | _        t        |       | _        t!               | _        t%        |       | _        t)        |       | _        t-        |       | _        t1        |       | _        t5        |       | _        t9        |       | _        t=        |       | _        | xj@                  | j                  | j                  | j                  | j"                  | j&                  | j*                  | j.                  | j:                  | j>                  | j2                  | j6                  gz  c_         tB        tD        fD ]5  }	  |       | _#        | j@                  jI                  | jF                          n | jF                  tP        jW                  d%       d$| _,        | jZ                  | j\                  k(  r7	 t_        |       | _,        | j@                  jI                  | jX                         y$y$# tJ        tL        tN        f$ r/}tP        jS                  tU        |             d$| _#        Y d$}~d$}~ww xY w# tJ        tL        f$ r(}tP        jW                  tU        |             Y d$}~y$d$}~ww xY w)&z Create key descriptions mainzschema-versionrf   zuse-system-defaultsFrO   rR   zsystem-theme-tracking-enabledTr   a{ss}r   aszshow-status-iconzstatus-icon-providerr   r+   r,   )autoGtkStatusIconAppIndicatorenumzstart-minimizedzshow-tooltipskey-label-fontkey-label-overrideszcurrent-settings-pagezxembed-onboardonboard_xembed_enabledpropzxembed-aspect-change-range皙?zxembed-background-colorz	#0000007Fzxembed-background-image-enabledzxembed-unity-greeter-offset-xg     @U@NzImousetweaks GSettings schema not found, mousetweaks integration disabled.)0r   schemasysdef_sectionadd_keyDEFAULT_LAYOUT
layout_keyDEFAULT_THEMEr   r   rU  ConfigKeyboardkeyboardConfigWindowwindow	ConfigICPicpConfigAutoShow	auto_showConfigUniversalAccessr   ConfigThemetheme_settingsConfigLockdownlockdownConfigScannerscannerConfigTypingAssistancetyping_assistance	ConfigGSSgss	ConfigGDIgdir|   r    r   r   appendr!   ImportErrorRuntimeErrorr   r   r   r   unity_greeterrg   r   ConfigUnityGreeter)rC   _classr   s      r9   
_init_keyszConfig._init_keys_  sV    %$%r**E2X~. 	 	W}- 	4d;0"g>ZT*'.+-C-P-P<=EFDE34 	 	5
 	&._d+%r**B5,a0%u3KL1As8<.<6=4d;!/!1!-!*4!/!1!6t!<!,T!2!/!5!.t!4!7!=!*4!*4$--++((..//----((((,,00
2 
	2 &~6 	(F(#)8 $$T%5%56		( #OO @ A "t:::0%7%="$$T%7%78 ;  l; ([^,#'  (  - 0A//0s0   !1N5O O"%OOP#PPc                    t        j                  |        t        j                  | j                        }|t
        k  rtt        j                  d       | j                  dd       t        j                  | j                        }|t        k  r%t        j                  d       | j                          t        j                  | j                        }|t        k  r%t        j                  d       | j                          t        j                  | j                        }|t        k  r%t        j                  d       | j                          t        j!                         | _        y)zO
        Overloaded to migrate old dconf data to new gsettings schemas
        zGMigrating dconf values from before v0.98: /apps/onboard -> /org/onboardzapps.zorg.z)Migrating dconfs values from before v0.97z*Migrating dconf values from before v1.1.0 z*Migrating dconf values from before v1.2.0 N)r   r   r   from_stringschema_versionSCHEMA_VERSION_0_98r   r   migrate_dconf_treeSCHEMA_VERSION_0_97_migrate_to_0_97SCHEMA_VERSION_1_1_migrate_to_1_1SCHEMA_VERSION_1_2_migrate_to_1_2SCHEMA_VERSION	to_string)rC   r   s     r9   r   zConfig.init_from_gsettings  s    	((. $$T%8%89''LL 9 :##GV4 (()<)<=F++HI%%' $$T%8%89&&LLEF  " $$T%8%89&&LLEF  ",668r8   c                     | j                   }|j                          |j                  dd       |j                  dd       |j                          y)zn
        reposition-method split into reposition-method-floating
        and reposition-method-docked
        z(/org/onboard/auto-show/reposition-methodreposition-method-floatingreposition-method-dockedN)rk  delaymigrate_dconf_keyr   rC   cos     r9   r  zConfig._migrate_to_1_2  sG    
 ^^


G9	;
G7	9

r8   c                 Z    d } || j                   dd        || j                  dd       y)z= resize_handles renamed to window_handles and movement added c                 6   | j                  |      }| j                          | j                  ||       t        | |j                        d d  }t
        j                  |vr|t
        j                  fz  }t        | |j                  |       | j                          y r   )	find_keyr  migrate_dconf_valuegetattrr\  r   MOVEsetattrr   )r  
dconf_pathkeygskeyhandless        r9   migrate_resize_handlesz6Config._migrate_to_1_1.<locals>.migrate_resize_handles  su    KK$EHHJ"":u5 b%**-a0G;;')FKK>)B

G,HHJr8   z"/org/onboard/window/resize-handleswindow-handlesz(/org/onboard/icon-palette/resize-handlesN)rg  ri  )rC   r  s     r9   r  zConfig._migrate_to_1_1  s3    	 	t{{C/	1 	txxI/	1r8   c                 p   | j                   j                  }|j                  d   j                         r|j                  d   j                         r|j                  d   j                         r|j                  d   j                         r|j	                          |j                  d|j                  d          |j                  d|j                  d          |j                  d|j                  d          |j                  d|j                  d          |j                          | j                  j                  }|j                  d   j                         r|j                  d   j                         r|j                  d   j                         r|j                  d   j                         r|j	                          |j                  d	|j                  d          |j                  d
|j                  d          |j                  d|j                  d          |j                  d|j                  d          |j                          | j                   }|j                  dd       |j                  dd       |j                  dd       |j                  dd       |j                  dd       |j                  dd       |j                  dd       |j                  dd       | j                  }|j                  dd       |j                  dd        | j                  }|j                  d!d"       y )#NrU   rW   widthheightz/apps/onboard/xz/apps/onboard/yz/apps/onboard/widthz/apps/onboard/heightz/apps/onboard/icon-palette/xz/apps/onboard/icon-palette/yz /apps/onboard/icon-palette/widthz!/apps/onboard/icon-palette/heightz/apps/onboard/window-decorationwindow-decorationz/apps/onboard/force-to-topforce-to-topz$/apps/onboard/transparent-backgroundtransparent-backgroundz/apps/onboard/transparencytransparencyz%/apps/onboard/background-transparencybackground-transparencyz*/apps/onboard/enable-inactive-transparencyenable-inactive-transparencyz#/apps/onboard/inactive-transparencyinactive-transparencyz)/apps/onboard/inactive-transparency-delayinactive-transparency-delayz$/apps/onboard/hide-click-type-windowhide-click-type-windowz./apps/onboard/enable-click-type-window-on-exit enable-click-type-window-on-exitz /apps/onboard/show-click-buttonsshow-click-buttons)rg  	landscapegskeys
is_defaultr  r  r   ri  r  r   re  r  s     r9   r  zConfig._migrate_to_0_97  s    [[""99S>$$&99S>$$&99W((*99X))+HHJ""#4biinE""#4biinE""#8"))G:LM""#9299X;NOHHJ XX99S>$$&99S>$$&99W((*99X))+HHJ""#A299S>R""#A299S>R""#EryyQXGYZ""#F		RZH[\HHJ [[
>@ST
9>J
CE]^
9>J
DF_`
IKij
BD[\
HJgh ""
CE]^
MOqr ]]
?AUVr8   c                     t         | j                  |   |       | j                  }d|v rH|j	                  di       }|j	                  d      r| j
                  nd}dD ]  }|d   |f||<    ||d<   y y )Nsuperkey_labelkey_label_overridessuperkey_label_independent_sizerf   )LWINRWIN)r=   	__class___read_sysdef_sectionsystem_defaultsr$  SUPERKEY_SIZE_GROUP)rC   r   sds	overridesr   key_idr  s         r9   r  zConfig._read_sysdef_section)  s    dnnd8@ ""s"!6;I77<= ,,CE * C%()9%:E$B	&!C)2C%& #r8   c                 F    |dv r|S t         | j                  |   |||      S )N)zsuperkey-labelzsuperkey-label-independent-size)r=   r  _convert_sysdef_key)rC   r  sysdefvaluer  s       r9   r  zConfig._convert_sysdef_key7  s5     9 9L --2FEBCr8   c                 &    | j                  |d      S Nza{s[ss]}unpack_string_listrC   r  s     r9   _unpack_key_label_overridesz"Config._unpack_key_label_overridesB      &&uj99r8   c                 $    | j                  |      S r   pack_string_listr  s     r9   _pack_key_label_overridesz Config._pack_key_label_overridesE      $$U++r8   c                 &    | j                  |d      S )Nza{i[ss]}r  r  s     r9   _unpack_snippetszConfig._unpack_snippetsH  r  r8   c                 $    | j                  |      S r   r  r  s     r9   _pack_snippetszConfig._pack_snippetsK  r  r8   c                 $    | j                          y r   )(_invalidate_layout_resource_search_pathsrL   s    r9   _post_notify_layoutzConfig._post_notify_layoutN  s    557r8   c                 &    | j                  |       y r   )layout_notify_addrC   callbacks     r9   layout_filename_notify_addz!Config.layout_filename_notify_addT  s    x(r8   c                     | j                   }| j                  |j                  |j                  | j                  t
        j                  j                  | j                  dt        | j                  z               S Nlayouts)
rb  find_layout_filenamer  r  ro   r   r   r   r   ra  )rC   r  s     r9   get_layout_filenamezConfig.get_layout_filenameW  sb    ((eii%)%?%?%'WW\\$2B2B2;^262L2L>M&NO 	Or8   c                     |r't         j                  j                  |      r|| _        y t        j                  t        d|             y )Nz"layout '{filename}' does not existfilename)r   r   r   rO   r   r   rn   rC   r  s     r9   set_layout_filenamezConfig.set_layout_filename_  s4    x0"DKOOG$H-57 8r8   c                 D    | j                  t        d| j                        S )z? Layout file to fallback to when the initial layout won't load rO   )r  ra  ro   rL   s    r9   get_fallback_layout_filenamez#Config.get_fallback_layout_filenameh  s$    (()-)C)CE 	Er8   c                 B      j                  || fd fd|      S )z> Find layout file, either the root layout or an include file. c                 `    t         j                  j                  j                  d|       z   S r  r   r   r   r   rU   	extensionrC   s    r9   r   z-Config.find_layout_filename.<locals>.<lambda>s  s%    dmm	1=	I r8   c                 `    t         j                  j                  j                  d|       z   S r  r   r   r   r   r  s    r9   r   z-Config.find_layout_filename.<locals>.<lambda>u  s'    d..	1=	I r8   )r  descriptionuser_filename_funcsystem_filename_funcfinal_fallback)_get_user_sys_filename)rC   r  r  r  r  s   `  ` r9   r  zConfig.find_layout_filenamem  s2     **#&%J%J$2 + 4 	4r8   c                 &    | j                  |       y r   )theme_notify_addr  s     r9   theme_filename_notify_addz Config.theme_filename_notify_add|  s    h'r8   c                 f    | j                         }|D ]  }|s| j                  |      }|s|c S  y)Nrf   )r   _expand_theme_filename)rC   
candidatesrR   r  s       r9   get_theme_filenamezConfig.get_theme_filename  s?    //1
 	$E66u=#O		$
 r8   c                     |r1t         j                  j                  |      r| j                  |       y t        j                  t        d|             y )Nz!theme '{filename}' does not existr  )r   r   r   r   r   r   rn   r  s     r9   set_theme_filenamezConfig.set_theme_filename  s;    x0)OOG$G-57 8r8   c                 b    | j                  |t        j                  t        j                        S )z expand generic theme name )r  r  )_expand_user_sys_filenamer   build_user_filenamebuild_system_filename)rC   rR   s     r9   r  zConfig._expand_theme_filename  s0    --e$)$=$=$)$?$? . A 	Ar8   c                     | j                   rB| j                  r6| j                         }| j                  j	                         }|||<   || _        | j                  |       y r   )system_theme_tracking_enabledrx  get_gtk_themer   r   	set_theme)rC   theme_filename	gtk_themer   s       r9   r   zConfig.remember_theme  sR    --88**,I99>>@L&4L#-9D*~&r8   c                    |s| j                         }t        j                  t        d|             t        j                  |      }|s*t        j                  t        d|             t        |      S |j                          t        |      S )NzLoading theme from '{}'zUnable to read theme '{}')	r  r   r   rn   r   loadr   r   r1  )rC   r  rR   s      r9   apply_themezConfig.apply_theme  so    ..0HW6AB

8$MM'"=xHI E{ KKM E{r8   c                 $    | j                          y)z=
        Figure out which theme to load and load it.
        N)r  rL   s    r9   r   zConfig.load_theme  s     	r8   c                    g }| j                   rO| j                  }| j                         }||j                  |d      |j                  dd      | j                  gz  }n|dd| j                  gz  }| j
                  r| j
                  j                  dd      }nd}|j                  |       |j                  t               |S )zb
        Return a list of themes to consider for loading.
        Highest priority first.
        rf   r   rR   )r  r   r  r$  rR   r  ry  rc  )rC   r  r   r  rR   s        r9   r   zConfig._get_theme_candidates  s    
 
--99L**,I<++Ir:'++Ir:::' 'J 2::' 'J ((,,Wb9EE% -(r8   c                 j    t         j                  j                         }|r|j                  d      }|S y )Nzgtk-theme-name)r
   r   get_defaultget_property)rC   gtk_settingsr  s      r9   r  zConfig.get_gtk_theme  s1    ||//1$112BCIr8   c                     | j                   s| j                  d      | _         | j                  |d| j                         S )zv
        Returns an absolute path for a label image.
        This function isn't linked to any gsettings key.
        imagesimage)r   !_get_layout_resource_search_paths_get_resource_filename)rC   image_filenames     r9   get_image_filenamezConfig.get_image_filename  sE    
 ''66x@ $**>7+/+C+CE 	Er8   c                     g | _         y)z: Force re-generation of search paths at next opportunity. N)r   rL   s    r9   r  z/Config._invalidate_layout_resource_search_paths  s
    #% r8   c           	         t         j                  j                  | j                  d      }t         j                  j                  | j                  d      }|r@t         j                  j                  ||      }t         j                  j                  ||      }||g}| j                  | j                        rt         j                  j                  | j                        }|r t         j                  j                  |d      }	 t         j                  j                  |      xr  t         j                  j                  ||      xsA t         j                  j                  |      xr  t         j                  j                  ||      }|s|g|z   }|S # t        $ r:}t        j                  dj                  |t        |                   d}Y d}~Hd}~ww xY w)zs
        Look for files in directory of current layout, user- and
        system directory, in that order.
        r  r  zsamefile failed with '{}': {}TN)r   r   r   r   r   _is_valid_filenamerO   dirnameisdirsamefiler   r   r   r   r   )rC   subdirr   sys_dirr   dir_samer   s           r9   r  z(Config._get_layout_resource_search_paths  sX   
 77<<y9'',,t//;ww||Hf5Hggll7F3G7# ""4;;/77??4;;/Dww||D(3	ww}}X. 7ww''g68ww}}X. 8ww''h7    =%vdKO<>s   BF 	G0GGc                 V    t         j                  j                  | j                  d      S Nmodelsr  rL   s    r9   get_user_model_dirzConfig.get_user_model_dir  s    ww||DMM844r8   c                 V    t         j                  j                  | j                  d      S r!  r  rL   s    r9   get_system_model_dirzConfig.get_system_model_dir  s    ww||D,,h77r8   c                    | j                   j                  }|r8| j                  j                  d|       | j                  j	                  d       y | j                  j	                  d       | j                  j                  d|       y )NFT)r   r   r   allow_system_click_type_window
set_active)rC   enablehides      r9   enable_hover_clickzConfig.enable_hover_click  sj    $$;;;;E4H''-''.;;D$Gr8   c                 d    t        | j                        xr | j                  j                         S r   )r1  r   	is_activerL   s    r9   is_hover_click_activezConfig.is_hover_click_active"  s'    D$$%F$*:*:*D*D*FFr8   c                 j    | j                   xs& | j                   xr | j                  j                   S r   )rY   start_minimizedrk  enabledrL   s    r9   is_visible_on_startzConfig.is_visible_on_start%  s4    }} *''' *>>)))	*r8   c                 L    | j                    xr | j                  j                  S r   )rY   rk  r1  rL   s    r9   is_auto_show_enabledzConfig.is_auto_show_enabled*  s#    ==  &~~%%	&r8   c                 j    | j                         xs" | j                         xs | j                         S r   ) is_auto_hide_on_keypress_enabled is_tablet_mode_detection_enabled$is_keyboard_device_detection_enabledrL   s    r9   is_auto_hide_enabledzConfig.is_auto_hide_enabled.  s5    446 81138557	8r8   c                 R    | j                         xr | j                  j                  S r   )can_set_auto_hiderk  hide_on_key_pressrL   s    r9   r6  z'Config.is_auto_hide_on_keypress_enabled3  s%    %%' -NN,,	-r8   c                 R    | j                         xr | j                  j                  S r   )r;  rk  tablet_mode_detection_enabledrL   s    r9   r7  z'Config.is_tablet_mode_detection_enabled7  s%    %%' 9NN88	9r8   c                 R    | j                         xr | j                  j                  S r   )r;  rk  !keyboard_device_detection_enabledrL   s    r9   r8  z+Config.is_keyboard_device_detection_enabled;  s%    %%' =NN<<	=r8   c                 h    | j                         xr! | j                         t        j                  k7  S r   )r4  get_auto_show_reposition_methodr   r3   rL   s    r9   can_auto_show_repositionzConfig.can_auto_show_reposition?  s2    ((* P0026J6O6OO	Pr8   c                 z    | j                         r| j                  j                  S | j                  j                  S r   )is_docking_enabledrk  reposition_method_dockedreposition_method_floatingrL   s    r9   rB  z&Config.get_auto_show_reposition_methodC  s.    ""$>>:::>><<<r8   c                 F    | j                         xr | j                         S )z Allowed to change auto hide? )r4  is_event_source_xinputrL   s    r9   r;  zConfig.can_set_auto_hideI  s$    ((* -**,	-r8   c                 R    | j                   j                  xs | j                         S r   )rg  force_to_toprE  rL   s    r9   is_force_to_topzConfig.is_force_to_topN  s     {{''D4+B+B+DDr8   c                 \    | j                         xr | j                  j                  |       S r   )rL  rt   can_set_override_redirectrL   s    r9   is_override_redirectzConfig.is_override_redirectQ  s*    ##% ;{{44T:	;r8   c                 .    | j                   j                  S r   )rg  docking_enabledrL   s    r9   rE  zConfig.is_docking_enabledU  s    {{***r8   c                 J    | j                   j                  xr |j                  S r   )rg  rQ  dock_expandrC   orientation_cos     r9   is_dock_expandedzConfig.is_dock_expandedX  s    {{**I~/I/IIr8   c                 L    | j                   j                  xr | j                   S r   )word_suggestionsr1  rY   rL   s    r9   are_word_suggestions_enabledz#Config.are_word_suggestions_enabled[  s     $$,,BT]]1BBr8   c                 R    | j                         xr | j                  j                  S r   )rY  rX  spelling_suggestions_enabledrL   s    r9    are_spelling_suggestions_enabledz'Config.are_spelling_suggestions_enabled^  s)    002 B$$AA	Br8   c                     | j                         xs. | j                  j                  xs | j                  j                  S r   )r\  rt  auto_capitalizationauto_correctionrL   s    r9   is_spell_checker_enabledzConfig.is_spell_checker_enabledb  s;    446 6%%996%%55	6r8   c                 L    | j                   j                  xr | j                   S r   )rt  r^  rY   rL   s    r9   is_auto_capitalization_enabledz%Config.is_auto_capitalization_enabledg  s     %%99O$-->OOr8   c                 F    | j                         xs | j                         S r   )rY  rb  rL   s    r9   is_typing_assistance_enabledz#Config.is_typing_assistance_enabledj  s$    002 5224	5r8   c                 P    | j                   j                  t        j                  k(  S r   )re  input_event_sourcer   GTKrL   s    r9   is_event_source_gtkzConfig.is_event_source_gtkn  s    }}//3G3K3KKKr8   c                 P    | j                   j                  t        j                  k(  S r   )re  rf  r   XINPUTrL   s    r9   rI  zConfig.is_event_source_xinputq  s    }}//3G3N3NNNr8   c                     | j                   sS| j                  j                  s=t        d      }t	        ||| j                               }|dk(  syd| j                  _        y)NzEnabling auto-show requires Gnome Accessibility.

Onboard can turn on accessiblity now, however it is recommended that you log out and back in for it to reach its full potential.

Enable accessibility now?TF)rY   rx  toolkit_accessibilityrp   r   rL  )rC   parentquestionreplys       r9   check_gnome_accessibilityz Config.check_gnome_accessibilityt  s[    }}xx-- 5 6H
 -Xv-1-A-A-CEED=-1DHH*r8   c                     | j                   j                  d   j                  }|dk(  r-t        j                  j                         j                  d      }|S )Ndrag_thresholdzgtk-dnd-drag-threshold)r   r  r  r
   r   r  r  )rC   	thresholds     r9   get_drag_thresholdzConfig.get_drag_threshold  sL    ))001ABHH	?002$0L1I$J r8   c                 R    | j                   j                  xs | j                         S )z
        Show icon palette when there is no other means to unhide onboard.
        Unhiding by unity launcher isn't available in force-to-top mode.
        )ri  in_use"is_icon_palette_last_unhide_optionrL   s    r9   is_icon_palette_in_usezConfig.is_icon_palette_in_use  s     
 xxK$"I"I"KKr8   c                      y)z
        Is the icon palette the last remaining way to unhide onboard?
        Consider single instance check a way to always unhide onboard.
        Fr7   rL   s    r9   rx  z)Config.is_icon_palette_last_unhide_option  s    
 r8   c                 >    | j                         xs | j                  S )zu
        No native ui visible to unhide onboard?
        There might still be the launcher to unminimize it.
        )ry  show_status_iconrL   s    r9   has_unhide_optionzConfig.has_unhide_option  s    
 **,E0E0EEr8   c                 T    | j                   j                  xr | j                          S )z5 Force-to-top mode doesn't support window decoration )rg  window_decorationrL  rL   s    r9   has_window_decorationzConfig.has_window_decoration  s#    {{,,KT5I5I5K1KKr8   c                 p    | j                    xr( | j                  j                  xs | j                         S r   )rY   rg  window_state_stickyrL  rL   s    r9   get_sticky_statezConfig.get_sticky_state  s3    ==  K//I43G3G3I	Kr8   c                 `    | j                   j                  xr | j                  j                   S r   )rg  enable_inactive_transparencyrr  r1  rL   s    r9    is_inactive_transparency_enabledz'Config.is_inactive_transparency_enabled  s)    {{77 (<<'''	(r8   c                     | j                   j                  xs | j                  j                  xr  | j                   xr | j	                          S )z
        Keep aspect ratio of the whole keyboard window?
        Not recommended, no effect in MATE and elsewhere the
        keyboard tends to shrink with each interaction.
        )rg  ra   rs   rY   rE  rT  s     r9   #is_keep_window_aspect_ratio_enabledz*Config.is_keep_window_aspect_ratio_enabled  sM     .. 0//.MM!. ++--	/r8   c                 H    | j                         xs | j                  |      S )zi
        Keep aspect ratio of only the frame (keyboard area)
        inside the keyboard window?
        ))is_keep_xembed_frame_aspect_ratio_enabled*is_keep_docking_frame_aspect_ratio_enabledrT  s     r9   "is_keep_frame_aspect_ratio_enabledz)Config.is_keep_frame_aspect_ratio_enabled  s*     ::< L;;NK	Lr8   c                 P    | j                   xr | j                  | j                  k7  S r   )rY   rg   r   rL   s    r9   r  z0Config.is_keep_xembed_frame_aspect_ratio_enabled  s"    }}G!1!1T5G5G!GGr8   c                 f    | j                    xr# | j                         xr | j                  |      S r   )rY   rE  rV  rT  s     r9   r  z1Config.is_keep_docking_frame_aspect_ratio_enabled  s5    MM! 6'')6%%n5	7r8   c                 R    | j                   xr | j                   j                         S r   )r   r-  rL   s    r9   is_mousetweaks_activezConfig.is_mousetweaks_active  s"    @D$4$4$>$>$@@r8   c                 p    | j                   j                  |       | j                  j                  |       y r   )rg  window_handles_notify_addri  r  s     r9   r  z Config.window_handles_notify_add  s&    --h7**84r8   c                    t        |      dk(  rt        j                  S t        |      dk(  r&|d   t        j                  k(  rt        j
                  S t        |      dk(  rt        j                  S t        j                  S )z@ Translate array of handles to simplified NumResizeHandles enum r   r+   	   )rz   r/   r3   r   r  r4   r6   r5   )rC   r  s     r9   window_handles_to_num_handlesz$Config.window_handles_to_num_handles  se    w<1#(((w<1v{{!:#,,,w<5 #'''$$$r8   c                 2   |t         j                  k(  rt        t        j                        }|S |t         j
                  k(  rt        j                  g}|S |t         j                  k(  rg }|S t        t        j                  t        j                  fz         }|S r   )	r/   r6   listr   RESIZE_MOVEr4   r  r3   CORNERSrC   numr  s      r9   num_handles_to_window_handlesz$Config.num_handles_to_window_handles  s    "&&&6--.G  $---{{mG
 	 $)))G  6>>V[[O;<Gr8   c                     | j                  |      }|t        j                  k(  r t        j                  t        j
                  g}|S r   )r  r/   r5   r   
SOUTH_EASTr  r  s      r9   #num_handles_to_icon_palette_handlesz*Config.num_handles_to_icon_palette_handles  s:    44S9"'''((&++6Gr8   c                     | j                         }g }|D ]5  }t        j                  j                  |      }|%|j	                  |       7 |S )z/ String of handle ids to array of Handle enums )ry   r   RIDSr$  ry  )stringidsr  idhandles        r9   _string_to_handleszConfig._string_to_handles  sM     lln 	'B[[__R(F>v&	' r8   c                 z    g }| D ]$  }|j                  t        j                  |          & dj                  |      S )z/ Array of handle enums to string of handle ids  )ry  r   IDSr   )r  r  r  s      r9   _handles_to_stringzConfig._handles_to_string  s;      	+FJJvzz&)*	+xx}r8   c                     |dk(  rt        d      |\  }}t        | j                        }t        j	                  d|||fz         ||f||<   || _        y)z
        Set a snippet in the snippet list.  Enlarge the list if not big
        enough.

        @type  index: int
        @param index: index of the snippet to set.
        @type  value: str
        @param value: Contents of the new snippet.
        NzSnippet text must be strz Setting snippet %d to '%s', '%s')	TypeErrorr   r   r   r   )rC   indexr  labeltextr   s         r9   set_snippetzConfig.set_snippet  s[     D=677t&75%:NNO $- r8   c                 r    t         j                  d|z         t        | j                        }||= || _        y)zt
        Delete a snippet.

        @type  index: int
        @param index: index of the snippet to delete.
        zDeleting snippet %dN)r   r   r   r   )rC   r  r   s      r9   del_snippetzConfig.del_snippet  s2     	*U23&UO r8   c                     |r)d| _         d| j                  _        | j                          y d| _         d| j                  _        y )NTF)rZ  rv  embedded_keyboard_enabled$set_xembed_command_string_to_onboard)rC   r)  s     r9   enable_gss_embeddingzConfig.enable_gss_embedding"  s9    *.D'15DHH.557*/D'16DHH.r8   c                 X    | j                   j                  j                  t              ryy)z
        Checks whether the gsettings key for the embeded application command
        contains the entry defined by onboard.
        Returns True if it is set to onboard and False otherwise.
        TF)rv  embedded_keyboard_command
startswithSTART_ONBOARD_XEMBED_COMMANDrL   s    r9   #is_onboard_in_xembed_command_stringz*Config.is_onboard_in_xembed_command_string+  s#     88--889UVr8   c                 .    t         | j                  _        y)zk
        Write command to start the embedded onboard into the corresponding
        gsettings key.
        N)r  rv  r  rL   s    r9   r  z+Config.set_xembed_command_string_to_onboard6  s    
 .J*r8   c                     t        | j                         t        t        j                  | j                     | j
                        S r   )
__import___kbd_render_mixin_modr  rv   modules_kbd_render_mixin_clsrL   s    r9   _get_kbd_render_mixinzConfig._get_kbd_render_mixin=  s7    4--.s{{4#=#=>**, 	,r8   c                      y r   r7   r  s     r9   modeless_gksu_notify_addzConfig.modeless_gksu_notify_addE  s    r8   c                      y)NFr7   rL   s    r9   r   zConfig.<lambda>G  s    r8   c                     d}| j                   | j                  k(  r| j                  dd      }|s| j                  dd      }|S )Nrf   r#   
backgroundzorg.gnome.desktop.backgroundzpicture-uri)rg   r   ,_get_desktop_background_filename_from_schema)rC   fns     r9   get_desktop_background_filenamez&Config.get_desktop_background_filenameJ  sS     t:::BB2LBB
 BB3]DB	r8   c           
      B   	 t         j                  j                  |      }|j                  |      }|r8	 t        j                  |      dk(  r	 t        j                  |      \  }}|rd}|S |S # t        $ r;}d}t
        j                  dj                  ||t        |                   Y d }~{d }~ww xY w# t        $ r t        j                  |d      }d}Y rw xY w# t        $ r9}t
        j                  dj                  |t        |                   Y d }~|S d }~ww xY w)Nrf   z0failed to read desktop background from {} {}: {}filez6failed to unescape URI for desktop background '{}': {})r   r   r   
get_stringr   r   r   r   r   r   uri_parse_schemefilename_from_urir  )rC   r^  r  r   r  r   r   s          r9   r  z3Config._get_desktop_background_filename_from_schemaZ  s   	A  (Ac"B
 : ((,6#$($:$:2$>	E 
 	r	+  	ABMML!6&#{2?A A	A % #!33B; "#
  : )#VBB8: : 		:sR   0A. C B5 &C .	B271B--B25!CC CC 	D%.DDc                 F    | j                   d   j                  }|dk  rd }|S )Nxembed_unity_greeter_offset_xr   )r  r  r  s     r9   !get_xembed_unity_greeter_offset_xz(Config.get_xembed_unity_greeter_offset_xu  s(    ;<BB19Er8   c                     | j                   S r   )_xembed_background_rgbarL   s    r9   get_xembed_background_rgbaz!Config.get_xembed_background_rgba{  s    +++r8   c                 <    | j                   }t        |      | _        y r   )xembed_background_colorr   r  r  s     r9   r   z%Config._update_xembed_background_rgba~  s    ,,'7'>$r8   c                 4    t        | j                               S r   )r1  _get_source_pathrL   s    r9   r   zConfig._is_running_from_source  s    D))+,,r8   c                 ^   | j                   t        j                  j                  t        j                  j                        t        j                  j                  t        j                  j                  t        j                  j                  t                          g}d| _         |D ]u  }t        j                  j                  |d      }t        j                  j                  |d      }t        j                  j                  |      sc|| _          | j                   S  | j                   S )Nrf   datazorg.onboard.gschema.xml)	_source_pathr   r   abspathcurdirr  __file__r   isfile)rC   r  r   	data_pathr  s        r9   r  zConfig._get_source_path  s    $ /0I JKJ
 !#D" GGLLv6	WW\\)-FG77>>"%(,D%       r8   c                    d }| j                         rbt        j                  j                         }| j	                         }t
        j                  j                  |d      }|j                  |       |}nSt
        j                  j                  t              rt        }n)t
        j                  j                  t              rt        }|sJ |S )Nicons)r   r
   	IconThemer  r  r   r   r   append_search_pathr  LOCAL_INSTALL_DIRINSTALL_DIR)rC   result
icon_themesrc_pathsrc_icon_paths        r9   r   zConfig._get_install_dir  s     '')224J,,.HGGLL7;M))-8FWW]],-&FWW]];' Fvr8   c                 4    t        j                  t              S r   )r   get_data_homer   rL   s    r9   r   zConfig._get_user_dir  s    $$X..r8   c                 V    t         j                  j                  | j                  d      S )Nzlayouts/r  rL   s    r9   get_user_layout_dirzConfig.get_user_layout_dir  s    ww||DMM:66r8   c                 <    t        j                         d   }|sd}|S )Nr   en_US)localegetdefaultlocale)rC   r   s     r9   r   z!Config.get_system_default_lang_id  s"    ))+A.Gr8   c                 \    | j                   s| j                         | _         | j                   S )z5
        Return current desktop environment.
        )_desktop_environment_detect_desktop_environmentrL   s    r9   r   zConfig.get_desktop_environment  s*     (((,(H(H(JD%(((r8   c                  |   t         j                  j                  dd      t         j                  j                  dd      d fd}  | d      s | d      rt        j                  S  | d      rt        j
                  S  | d	      rt        j                  S  | d
      rt        j                  S  | d      rt        j                  S  | d      rt        j                  S  | d      rt        j                  S  | d      rt        j                  S  | d      rt        j                  S t        j                  S )zG
        Detect current desktop environment. Extend as needed.
        XDG_CURRENT_DESKTOPrf   DESKTOP_SESSIONc                     t         j                  dk  r!| j                         |j                         k(  S | j                         |j                         k(  S )N)r-   r-   )rv   version_infolowercasefold)s1s2s     r9   istrcmpz3Config._detect_desktop_environment.<locals>.istrcmp  s>    %'xxzRXXZ//;;=BKKM11r8   c                 ,     |       xs	  |       S r   r7   )r  desktopr   xdg_desktops    r9   	isdesktopz5Config._detect_desktop_environment.<locals>.isdesktop  s    ;+Cww/CCr8   z
X-CinnamoncinnamonGNOMEzGNOME-Classic:GNOMEKDElxdeLXQtmateUnityxfce)r   r   r$  r   CinnamonGNOME_ShellGNOME_Classicr  LXDELXQTMATEr  XFCEUnknown)r  r  r   r  s    @@@r9   r  z"Config._detect_desktop_environment  s   
 jjnn%:B?**..!2B7	2	D \"i
&;)222W)555*+)777U)---V)...V)...V)...W)///V)...%---r8   c                     t         j                  }| j                         }|t        j                  fv rd}|S |t        j
                  t        j                  t        j                  fv rt         j                  }|S )zF
        Auto-detect if we should fall back to GtkStatusIcon.
        N)	r   rU  r   r   r  r  r  r  rT  )rC   r  des      r9   !get_preferred_statusicon_providerz(Config.get_preferred_statusicon_provider  s     (44))+ (4477F0 -  #++ #'' #''
 
( ,99Fr8   )rf   rf   r   )r0   r1   r2   __doc__ranger   r   r   ro   r   LABEL_MARGINDEFAULT_LABEL_X_ALIGNDEFAULT_LABEL_Y_ALIGNr  UNDECORATED_FRAME_WIDTHPOPUP_FRAME_WIDTHCORNER_RADIUSDISH_KEY_Y_OFFSETDISH_KEY_BORDERUNPRESS_DELAYWORDLIST_LABEL_MARGINWORDLIST_BUTTON_SPACINGWORDLIST_ENTRY_SPACINGactive_layer_indexdrag_protectionallow_iconifyingwindow_scaling_factorr  r  r  rF   rM   rG   r   r   r   r{   r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  propertylayout_filenamer  r  r  r  r  r  r  r   r  r   r   r  r  r  r  r#  r%  r+  r.  r2  r4  r9  r6  r7  r8  rC  rB  r;  rL  rO  rE  rV  rY  r\  r`  rb  rd  rh  rI  rp  ru  ry  rx  r}  r  r  r  r  r  r  r  r  r  r  r  r  staticmethodr  r  r  r  r  r  r  r  kbd_render_mixinr  modeless_gksur  r  r  r  r   r   r  r   r   r  r   r   r  r  __classcell__)r  s   @r9   r"   r"      sG     %Qx] ' N L     " "  M  !O M # ) (  O   "LtHnN&`'#g;RM0^ 9D101Wh3C:,:,8)O8 24GHOE FH
4(8 02DENA',:	E&!F58HG*
&8
-9=P=-
E;+JCB6
P5LO"LFLK(	/LH7
A5%	    !&
!7	J,   56/0M 6,?-!$*/7) #. #.J#r8   c                   Z    e Zd ZdZdZdZej                  Ze	j                  Zd Zd Zd Zy)rd  Window configuration r+   r   c           	         t         | _        d| _        | j                  dd       | j                  dd       | j                  dd       | j                  dd	d
id       | j                  dd       | j                  d| j                  ddd       | j                  d| j
                  ddddd       | j                  d| j                  dddd       | j                  d| j                  ddd       | j                  dd       | j                  dd       | j                  dd       | j                  dd       | j                  dd       | j                  d d       | j                  d!d"       | j                  d#d$d%id       y )&Nre  r  Fzsticky-key-release-delay        z sticky-key-release-on-hide-delayr>   zsticky-key-behaviorallcyclerQ  zlong-press-delayr<   zdefault-key-actionr   r+   )zsingle-strokezdelayed-strokerV  z	key-synthr,   r-   )rS  XTestuinputzAT-SPIztouch-input)nonesinglemultizinput-event-source)rg  XInputztouch-feedback-enabledztouch-feedback-sizezaudio-feedback-enabledzaudio-feedback-place-in-spacezshow-secondary-labelszinter-key-stroke-delayzmodifier-update-delayrA   zkey-press-modifiersbutton3SHIFT)SCHEMA_KEYBOARDr^  r_  r`  DEFAULT_KEY_ACTIONDEFAULT_KEY_SYNTHDEFAULT_TOUCH_INPUTDEFAULT_INPUT_EVENT_SOURCErL   s    r9   r  zConfigKeyboard._init_keys  s   %()51/57=*UW,=wG'-)4+B+BCDDE12 	 	3 	[$"8"8:;;<<=<=12 	 	3 	]D$<$<:;<=;<12 	 	3
 	)4+J+J9:<=12 	 	3 	-u5*A.-u54e<,e4-s3,c2*Y,A7Kr8   c                 d    | j                   }|sydt        |      z   }|j                  |      dk(  S )NFbuttonr=  )key_press_modifiersrc   r$  )rC   rD  kpmsr  s       r9   can_upper_case_on_buttonz'ConfigKeyboard.can_upper_case_on_button:  s4    ''V$xx}''r8   c                     dt        |      z   }t        | j                        }|rd||<   || _        y ||v r||= || _        y )NrD  r=  )rc   r   rE  )rC   rD  onr  valuess        r9   set_upper_case_on_buttonz'ConfigKeyboard.set_upper_case_on_buttonA  sN    V$d../!F3K $*  f}3K#) r8   N)r0   r1   r2   r  r?  r@  r   MULTIrA  r   rj  rB  r  rG  rK  r7   r8   r9   rd  rd    s:    (..!5!<!<%LN(*r8   rd  c                       e Zd ZdZej
                  Zej                  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 G d de      Z G d de      Zy)rf  r1  c                    t         | _        d| _        | j                  dd       | j                  dd       | j                  dd       | j                  dd       | j                  dd       | j                  d	d
       | j                  dd       | j                  dd       | j                  dd       | j                  dd       | j                  dt               | j                  dd       | j                  d| j
                  t        j                  t        j                  d       | j                  d| j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                   t        j"                  t        j$                  t        j&                  t        j(                  t        j*                  d       | j                  dd       | j                  dddgd       t,        j/                  |       | _        t,        j3                  |       | _        | j0                  | j4                  g| _        y )Nrg  zwindow-state-stickyTr  Fr  zkeep-aspect-ratior  r  r3  r  g      $@r  r  g      I@r  rA   r  zdocking-enabledzdocking-edge)topbottomrV  zdocking-monitor)activeprimarymonitor0monitor1monitor2monitor3monitor4monitor5monitor6monitor7monitor8zdocking-shrink-workareazdocking-aspect-change-ranger   r]  ad)SCHEMA_WINDOWr^  r_  r`  DEFAULT_WINDOW_HANDLESDEFAULT_DOCKING_EDGEr   TOPBOTTOMDEFAULT_DOCKING_MONITORr   ACTIVEPRIMARYMONITOR0MONITOR1MONITOR2MONITOR3MONITOR4MONITOR5MONITOR6MONITOR7MONITOR8rf  	Landscaper  Portraitportraitr|   rL   s    r9   r  zConfigWindow._init_keysQ  s   #&*D1(%0^U+(%0-u5^S).53U;,d32C8%'=>&.^T%>%>6Aoo6A6H6H+, 	 	- 	&(D(D6D6K6K7E7M7M8F8O8O8F8O8O8F8O8O8F8O8O8F8O8O8F8O8O8F8O8O8F8O8O8F8O8O+, 	 	- 	.52QHdC%//5$--d37r8   c                 p    |dk(  s|dk(  rt         j                  |      S t        j                  | |||      S Nzresize-handlesr  r"   r  r   r  rC   r  r  r  s       r9   r  z ConfigWindow._convert_sysdef_key{  <    %%%%,,U3333D%OOr8   c                 ,    t         j                  |      S r   r"   r  r  s     r9   _unpack_window_handlesz#ConfigWindow._unpack_window_handles      ((//r8   c                 ,    t         j                  |      S r   r"   r  r  s     r9   _pack_window_handlesz!ConfigWindow._pack_window_handles  ry  r8   c                     | j                   j                  |       | j                   j                  |       | j                  j                  |       | j                  j                  |       y r   r  x_notify_addy_notify_addrp  r  s     r9   position_notify_addz ConfigWindow.position_notify_add  J    ##H-##H-""8,""8,r8   c                     | j                   j                  |       | j                   j                  |       | j                  j                  |       | j                  j                  |       y r   r  width_notify_addheight_notify_addrp  r  s     r9   size_notify_addzConfigWindow.size_notify_add  J    ''1((2&&x0''1r8   c                     | j                   j                  |       | j                   j                  |       | j                  j                  |       | j                  j                  |       y r   )r  dock_width_notify_adddock_height_notify_addrp  r  s     r9   dock_size_notify_addz!ConfigWindow.dock_size_notify_add  sJ    ,,X6--h7++H5,,X6r8   c                     | j                  |       | j                  |       | j                  |       | j                  |       | j                  j                  |       | j                  j                  |       y r   )docking_enabled_notify_adddocking_edge_notify_adddocking_monitor_notify_add"docking_shrink_workarea_notify_addr  dock_expand_notify_addrp  r  s     r9   docking_notify_addzConfigWindow.docking_notify_add  s^    ''1$$X.''1//9--h7,,X6r8   c                 &    d| j                   dz  z
  S NrA         Y@)r  rL   s    r9   get_active_opacityzConfigWindow.get_active_opacity  s    T&&...r8   c                 &    d| j                   dz  z
  S r  )inactive_transparencyrL   s    r9   get_inactive_opacityz!ConfigWindow.get_inactive_opacity  s    T//%777r8   c                 R    t        | j                         | j                               S r   )minr  r  rL   s    r9   get_minimal_opacityz ConfigWindow.get_minimal_opacity  s!    4**,d.G.G.IJJr8   c                 &    d| j                   dz  z
  S r  )background_transparencyrL   s    r9   get_background_opacityz#ConfigWindow.get_background_opacity  s    T11E999r8   c                       e Zd Zd Zy)ConfigWindow.Landscapec                 T   t         | _        d| _        | j                  dt               | j                  dt
               | j                  dt               | j                  dt               | j                  dt               | j                  dt               | j                  dd	       y )
Nzwindow.landscaperU   rW   r  r  
dock-widthdock-heightdock-expandT)SCHEMA_WINDOW_LANDSCAPEr^  r_  r`  	DEFAULT_X	DEFAULT_YDEFAULT_WIDTHDEFAULT_HEIGHTrL   s    r9   r  z!ConfigWindow.Landscape._init_keys  ss    1DK"4DLLi(LLi(LL-0LL>2LL}5LL7LL-r8   Nr0   r1   r2   r  r7   r8   r9   rn  r        
	.r8   rn  c                       e Zd Zd Zy)ConfigWindow.Portraitc                 T   t         | _        d| _        | j                  dt               | j                  dt
               | j                  dt               | j                  dt               | j                  dt               | j                  dt               | j                  dd	       y )
Nzwindow.portraitrU   rW   r  r  r  r  r  T)SCHEMA_WINDOW_PORTRAITr^  r_  r`  r  r  r  r  rL   s    r9   r  z ConfigWindow.Portrait._init_keys  ss    0DK"3DLLi(LLi(LL-0LL>2LL}5LL7LL-r8   Nr  r7   r8   r9   ro  r    r  r8   ro  N)r0   r1   r2   r  r   ra  r_  r   rc  rb  r  r  rx  r|  r  r  r  r  r  r  r  r  r   rn  ro  r7   r8   r9   rf  rf  L  st    &--,33'8TP00-277/8K:.L ..< .r8   rf  c                   `    e Zd ZdZd Zd Zd Zd Zd Zd Z	 G d d	e
      Z G d
 de
      Zy)rh  z Icon palette configuration c                    t         | _        d| _        | j                  dd       | j                  dt               t
        j                  |       | _        t
        j                  |       | _	        | j                  | j                  g| _
        y )Nzicon-palettezin-useFr  )
SCHEMA_ICPr^  r_  r`  r^  rh  rn  r  ro  rp  r|   rL   s    r9   r  zConfigICP._init_keys  sg     ,Xu%%'=>",,T2!**407r8   c                 p    |dk(  s|dk(  rt         j                  |      S t        j                  | |||      S rr  rs  rt  s       r9   r  zConfigICP._convert_sysdef_key  ru  r8   c                 ,    t         j                  |      S r   rw  r  s     r9   rx  z ConfigICP._unpack_window_handles  ry  r8   c                 ,    t         j                  |      S r   r{  r  s     r9   r|  zConfigICP._pack_window_handles  ry  r8   c                     | j                   j                  |       | j                   j                  |       | j                  j                  |       | j                  j                  |       y r   r~  r  s     r9   r  zConfigICP.position_notify_add  r  r8   c                     | j                   j                  |       | j                   j                  |       | j                  j                  |       | j                  j                  |       y r   r  r  s     r9   r  zConfigICP.size_notify_add  r  r8   c                       e Zd Zd Zy)ConfigICP.Landscapec                     t         | _        d| _        | j                  dt               | j                  dt
               | j                  dt               | j                  dt               y )Nzicon-palette.landscaperU   rW   r  r  )SCHEMA_ICP_LANDSCAPEr^  r_  r`  DEFAULT_ICP_XDEFAULT_ICP_YDEFAULT_ICP_WIDTHDEFAULT_ICP_HEIGHTrL   s    r9   r  zConfigICP.Landscape._init_keys  sK    .DK":DLLm,LLm,LL"34LL#56r8   Nr  r7   r8   r9   rn  r        	7r8   rn  c                       e Zd Zd Zy)ConfigICP.Portraitc                     t         | _        d| _        | j                  dt               | j                  dt
               | j                  dt               | j                  dt               y )Nzicon-palette.portraitrU   rW   r  r  )SCHEMA_ICP_PORTRAITr^  r_  r`  r  r  r  r  rL   s    r9   r  zConfigICP.Portrait._init_keys  sK    -DK"9DLLm,LLm,LL"34LL#56r8   Nr  r7   r8   r9   ro  r    r  r8   ro  N)r0   r1   r2   r  r  r  rx  r|  r  r  r   rn  ro  r7   r8   r9   rh  rh    s<    &
8P00-27L 77< 7r8   rh  c                   4    e Zd ZdZej
                  Zd Zd Zy)rj  z auto_show configuration c                 r   t         | _        d| _        | j                  dd       dt        j
                  t        j                  d}| j                  d| j                  |       | j                  d| j                  |       | j                  d	d
d       | j                  dd       | j                  dd       | j                  dd       | j                  dd       | j                  dd       | j                  dd       | j                  dd       | j                  dd       | j                  dg        y )Nz	auto-showr1  Fr   )r8  zprevent-occlusionzreduce-travelr  rV  r  zwidget-clearance)      9@g     K@r  g      D@z(dddd)zhide-on-key-pressTzhide-on-key-press-pauseg      @ztablet-mode-detection-enabledztablet-mode-enter-keyztablet-mode-leave-keyztablet-mode-state-filerf   ztablet-mode-state-file-pattern1z!keyboard-device-detection-enabledz$keyboard-device-detection-exceptions)SCHEMA_AUTO_SHOWr^  r_  r`  r   PREVENT_OCCLUSIONREDUCE_POINTER_TRAVELDEFAULT_REPOSITION_METHOD)rC   rW  s     r9   r  zConfigAutoShow._init_keys  s   &)Y& "6"H"H 4 J J

 	143Q3Q 	 	!/1O1O 	 	!')A8L($/.74d;,a0,a0-r25s;8%@;R@r8   c                 j    | j                  |       | j                  |       | j                  |       y r   )(tablet_mode_detection_enabled_notify_add tablet_mode_enter_key_notify_add tablet_mode_leave_key_notify_addr  s     r9    tablet_mode_detection_notify_addz/ConfigAutoShow.tablet_mode_detection_notify_add+  s,    55h?--h7--h7r8   N)	r0   r1   r2   r  r   r  r  r  r  r7   r8   r9   rj  rj  	  s    # 4 F FA:8r8   rj  c                       e Zd ZdZd Zd Zy)rl  z  universal_access configuration c                     t         | _        d| _        | j                  dd       | j                  dd       | j                  dd       y )Nzuniversal-accesszdrag-thresholdrs  r  Tr  )SCHEMA_UNIVERSAL_ACCESSr^  r_  r`  rL   s    r9   r  z ConfigUniversalAccess._init_keys4  s>    -0%r*-t47>r8   c                 l    | j                   j                  }|r|j                  | j                         yy)z7 called when changed in gsettings (preferences window) N)rm  r   !on_hide_click_type_window_changedr   )rC   r   s     r9   #_post_notify_hide_click_type_windowz9ConfigUniversalAccess._post_notify_hide_click_type_window<  s0    kk--99++- r8   N)r0   r1   r2   r  r  r  r7   r8   r9   rl  rl  1  s    *?-r8   rl  c                   H    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y	)rm  z Theme configuration c                    t         | _        d| _        | j                  dt        d       | j                  dd       | j                  dd       | j                  d	d       | j                  d
d       | j                  dd       | j                  dd       | j                  dd       | j                  dd       | j                  dd      | _        | j                  di d      | _        | j                  dd       | j                  dd       y )Nztheme-settingszcolor-schemecolor_scheme_filenamer[  zbackground-gradientr3  z	key-styleflatzroundrect-radiuszkey-sizer  zkey-stroke-widthzkey-fill-gradientzkey-stroke-gradientzkey-gradient-directionrX  rf   rY  rR  zkey-shadow-strengthg      4@zkey-shadow-sizer>   )SCHEMA_THEMEr^  r_  r`  DEFAULT_COLOR_SCHEMEkey_label_font_keykey_label_overrides_keyrL   s    r9   r  zConfigTheme._init_keysG  s    ".^%91 	 	3*C0[&)'-Z''/(#.*C0-s3%r* 	 	*B5 	$*D1&,r8   c                    | j                  |       | j                  |       | j                  |       | j                  |       | j	                  |       | j                  |       | j                  |       | j                  |       | j                  |       | j                  |       | j                  |       | j                  |       | j                  |       y r   )background_gradient_notify_addkey_style_notify_addroundrect_radius_notify_addkey_size_notify_addkey_stroke_width_notify_addkey_fill_gradient_notify_addkey_stroke_gradient_notify_add!key_gradient_direction_notify_addkey_label_font_notify_addkey_label_overrides_notify_addkey_shadow_strength_notify_addkey_shadow_size_notify_addr  s     r9   theme_attributes_notify_addz'ConfigTheme.theme_attributes_notify_add]  s    ++H5!!(+((2  *((2))(3++H5..x8&&x0++H5!!(+++H5''1r8   c                     t         j                  j                  |      s!t        j	                  t        d|             yy)Nz(color scheme '{filename}' does not existr  FT)r   r   r   r   r   rn   r  s     r9   _can_set_color_scheme_filenamez*ConfigTheme._can_set_color_scheme_filenamel  s1    ww~~h'OOG$N-57 8r8   c                 &    | j                  |d      S r  r  r  s     r9   r  z'ConfigTheme._unpack_key_label_overridess  r  r8   c                 $    | j                  |      S r   r  r  s     r9   r  z%ConfigTheme._pack_key_label_overridesv  r  r8   c                     | j                   }t        | j                  j                        }|j	                  |j
                         |S r   )r  r   rm  r  updater  )rC   r  r  s      r9   get_key_label_overridesz#ConfigTheme.get_key_label_overridesy  s8    ,, T[[445U[[!r8   )bolditalic	condensedNc                     d | _         y r   )_cached_key_label_fontrL   s    r9   _post_notify_key_label_fontz'ConfigTheme._post_notify_key_label_font  s
    &*#r8   c                    | j                   | j                  }|j                  }|r|j                         }|r|d   | j                  v rt| j
                  j                  j                         }|rN|d   | j                  vr=|j                  d|d          dj                  |      }n| j
                  j                  }|| _         | j                   S )Nr   r  )	r  r  r  ry   _font_attributesrm  key_label_fontinsertr   )rC   r  r  r   system_itemss        r9   get_key_label_fontzConfigTheme.get_key_label_font  s    &&.++EKKEQx4#8#88'+{{'A'A'G'G'I'$Qt/D/DD!LLLO<$'HHUOE 22*/D'***r8   )r0   r1   r2   r  r  r  r  r  r  r  r  r  r  r  r7   r8   r9   rm  rm  D  s;    -,2:, 7!++r8   rm  c                       e Zd ZdZd Zd Zy)ro  z# Lockdown/Kiosk mode configuration c                 ,   t         | _        d| _        | j                  dd       | j                  dd       | j                  dd       | j                  dd       | j                  dd       | j                  dd       | j                  d	g d
gd       y )Nrp  zdisable-click-buttonsFzdisable-hover-clickzdisable-dwell-activationzdisable-preferenceszdisable-quitzdisable-touch-handleszdisable-keys)CTRLLALTzF[0-9]+aas)SCHEMA_LOCKDOWNr^  r_  r`  rL   s    r9   r  zConfigLockdown._init_keys  s~    %(,e4*E2/7*E2^U+,e4^&A%BEJr8   c                     | j                  |       | j                  |       | j                  |       | j                  |       y r   ) disable_click_buttons_notify_adddisable_hover_click_notify_adddisable_preferences_notify_adddisable_quit_notify_addr  s     r9   lockdown_notify_addz"ConfigLockdown.lockdown_notify_add  s:    --h7++H5++H5$$X.r8   N)r0   r1   r2   r  r  r  r7   r8   r9   ro  ro    s    -
K/r8   ro  c                       e Zd ZdZd Zy)ru  z& gnome-screen-saver configuration keysc                 p    t         | _        d| _        | j                  dd       | j                  dd       y )Nzgnome-screen-saverzembedded-keyboard-enabledTzembedded-keyboard-commandrf   )
SCHEMA_GSSr^  r_  r`  rL   s    r9   r  zConfigGSS._init_keys  s/     20$70"5r8   Nr0   r1   r2   r  r  r7   r8   r9   ru  ru    s
    06r8   ru  c                       e Zd ZdZd Zy)rw  z" Key to enable Gnome Accessibilityc                 t    t         | _        d| _        | j                  dd       | j                  ddd       y )Nzgnome-desktop-interfaceztoolkit-accessibilityFz	gtk-themerf   writable)
SCHEMA_GDIr^  r_  r`  rL   s    r9   r  zConfigGDI._init_keys  s2     7,e4["u5r8   Nr  r7   r8   r9   rw  rw    s
    ,6r8   rw  c                       e Zd ZdZd Zy)r~   z* Key to check if a11y keyboard is enabled c                 P    t         | _        d| _        | j                  ddd       y )Nzgnome-desktop-a11y-applicationszscreen-keyboard-enabledFr  )
SCHEMA_GDAr^  r_  r`  rL   s    r9   r  zConfigGDA._init_keys  s&     ? 	.Fr8   Nr  r7   r8   r9   r~   r~     s    4Gr8   r~   c                       e Zd ZdZd Zy)r}  z6 Key to hide onboard when embedded into unity-greeter c                 L    t         | _        d| _        | j                  dd       y )Nrk   zonscreen-keyboardF)SCHEMA_UNITY_GREETERr^  r_  r`  rL   s    r9   r  zConfigUnityGreeter._init_keys  s     *-(%0r8   Nr  r7   r8   r9   r}  r}    s
    @1r8   r}  c                   H    e Zd ZdZdZdZdZdZdZdZ	dZ
dZi Zddd	Zd
Zd Zy)rq  z Scanner configuration g333333?g?r   r,   r   Fr   )r+   r-   Tc           	         t         | _        d| _        | j                  dd       | j                  d| j                  ddddd	
       | j                  d| j
                         | j                  d| j                         | j                  d| j                         | j                  d| j                         | j                  d| j                         | j                  d| j                         | j                  d| j                         | j                  dd       | j                  d| j                  d       | j                  d| j                  d       | j                  d| j                         y )Nrr  r1  Fmoder   r+   r,   r-   )AutoscanOverscanStepscanDirectedrV  intervalzinterval-fastcycles	backtrack	alternatez	user-scanzdevice-namezdevice-detachzdevice-key-mapza{ii}zdevice-button-mapzfeedback-flash)SCHEMA_SCANNERr^  r_  r`  DEFAULT_MODEDEFAULT_INTERVALDEFAULT_INTERVAL_FASTDEFAULT_CYCLESDEFAULT_BACKTRACKDEFAULT_ALTERNATEDEFAULT_USER_SCANDEFAULT_DEVICE_NAMEDEFAULT_DEVICE_KEY_MAPDEFAULT_DEVICE_BUTTON_MAPDEFAULT_FEEDBACK_FLASHrL   s    r9   r  zConfigScanner._init_keys  s(   $'Y&VT..1CDCDCD6F 	G 	Z!6!67_d&@&@AXt223[$"8"89[$"8"89[$"8"89]D$<$<=_e,%t'B'BGL($*H*H'R%t'B'BCr8   N)r0   r1   r2   r  r+  r,  r*  r-  r.  r/  r0  r1  r2  r3  r4  r  r7   r8   r9   rq  rq    sO    ! $ $ !L !N ! % % ) "%&1 $Dr8   rq  c                       e Zd ZdZdZd Zy)rs  z% typing-assistance configuration keysr   c                    t         | _        d| _        | j                  dd       | j                  dg d       | j                  dd       | j                  d| j                  d	d
d       | j                  dd       | j                  dd       t        |       | _        | j                  g| _        | j                  | j                         _	        | j                  | j                         _        y )Nztyping-assistancezactive-languagerf   zrecent-languagesrR  zmax-recent-languagesr   zspell-check-backendr   r+   )hunspellaspellrV  zauto-capitalizationFzauto-correction)
SCHEMA_TYPING_ASSISTANCEr^  r_  r`  DEFAULT_BACKENDConfigWordSuggestionsrX  r|   get_rootwprL   s    r9   r  z!ConfigTypingAssistance._init_keys  s    .1&+'T2+Q/*D,@,@HIHI;K 	 	L 	*E2&. 5d ;../ "22+/+@+@(r8   N)r0   r1   r2   r  r:  r  r7   r8   r9   rs  rs    s    /OAr8   rs  c                       e Zd ZdZdZdZdZdZdZeeeeegZ	d Z
d Zd	 Zd
 Zd Zd Zd Zd Zd Zed        Zd Zd Zd Zd Zy)r;  z$ word-suggestions configuration keyszprevious-predictionsznext-predictionslanguagezpause-learningr*  c                    t         | _        d| _        | j                  dd       | j                  dd       | j                  dd       | j                  dd       | j                  dd       | j                  d	d
       | j                  dd       | j                  d| j                  | j
                  | j                  | j                  g       | j                  dd       | j                  dt        j                  t        j                  t        j                  d       d| _        | j                  dd       | j                  dd       y )Nzword-suggestionsr1  Fz
auto-learnTzpunctuation-assistancezdelayed-word-separators-enabledzaccent-insensitivezmax-word-choicesr   zspelling-suggestions-enabledzwordlist-buttonszpause-learning-lockedzlearning-behavior-paused)nothingz
known-onlyrV  r   zstealth-modezshow-context-line)SCHEMA_WORD_SUGGESTIONSr^  r_  r`  KEY_ID_PREVIOUS_PREDICTIONSKEY_ID_NEXT_PREDICTIONSKEY_ID_LANGUAGEKEY_ID_HIDEr   NOTHING
KNOWN_ONLY_pause_learningrL   s    r9   r  z ConfigWordSuggestions._init_keys/  s    -0Y&\4(-t46>)40'+3T:'6622**&&(	)
 	,e4/1A1I1I'7'?'?*:*E*EG 	 	H
  ! 	^U+(%0r8   c                 j    | j                  |       | j                  |       | j                  |       y r   )auto_learn_notify_add!punctuation_assistance_notify_addstealth_mode_notify_addr  s     r9   word_prediction_notify_addz0ConfigWordSuggestions.word_prediction_notify_addK  s,    ""8,..x8$$X.r8   c                     | j                   xrM | j                  xr? | j                          xs | j                  t        j
                  k7  xr | j                   S r   )r1  
auto_learnis_learning_pausedlearning_behavior_pausedr   rG  stealth_moderL   s    r9   can_auto_learnz$ConfigWordSuggestions.can_auto_learnP  s]    || %%++-- ---$,,-%
 $$$	%r8   c                 (    | j                         dkD  S r   )get_pause_learningrL   s    r9   rQ  z(ConfigWordSuggestions.is_learning_pausedX  s    &&(1,,r8   c                 4    | j                   ry| j                  S Nr,   pause_learning_lockedrI  rL   s    r9   rV  z(ConfigWordSuggestions.get_pause_learning[  s    %%'''r8   c                 &    || _         |dk(  | _        y rX  )rI  rZ  r  s     r9   set_pause_learningz(ConfigWordSuggestions.set_pause_learninga  s    $%*aZ"r8   c                 :    | j                   rd| _        y d| _        y )Nr,   r   rY  rL   s    r9   "_post_notify_pause_learning_lockedz8ConfigWordSuggestions._post_notify_pause_learning_lockede  s    $($>$>qAr8   c                     g }| j                   D ]3  }|| j                  k7  s| j                         s#|j                  |       5 |S r   )wordlist_buttonsKEY_ID_PAUSE_LEARNINGcan_show_pause_learning_buttonry  )rC   r  	button_ids      r9   get_shown_wordlist_button_idsz3ConfigWordSuggestions.get_shown_wordlist_button_idsh  sI    .. 	)ID666224i(	) r8   c                 B   | j                   dd }|rq||vrl| j                  |      }|dk\  rNt        |      D ]/  \  }}| j                  |      }||k  s|j                  ||        n |j	                  |       || _         yy||v r|j                  |       || _         yy)a	  
        Doctests:
        >>> co = ConfigWordSuggestions()
        >>> ConfigWordSuggestions.wordlist_buttons = []

        >>> co.wordlist_buttons = []
        >>> co.show_wordlist_button(co.KEY_ID_HIDE, True)
        >>> print(co.wordlist_buttons)
        ['hide']

        >>> co.wordlist_buttons = []
        >>> co.show_wordlist_button(co.KEY_ID_LANGUAGE, True)
        >>> print(co.wordlist_buttons)
        ['language']

        >>> co.wordlist_buttons = []
        >>> co.show_wordlist_button("notabutton", True)
        >>> print(co.wordlist_buttons)
        []

        >>> co.wordlist_buttons = [co.KEY_ID_PAUSE_LEARNING, co.KEY_ID_HIDE]
        >>> co.show_wordlist_button(co.KEY_ID_LANGUAGE, True)
        >>> print(co.wordlist_buttons)
        ['pause-learning', 'language', 'hide']

        >>> co.wordlist_buttons = [co.KEY_ID_LANGUAGE, co.KEY_ID_HIDE]
        >>> co.show_wordlist_button(co.KEY_ID_PAUSE_LEARNING, True)
        >>> print(co.wordlist_buttons)
        ['pause-learning', 'language', 'hide']

        Nr   )r`  _get_button_priority	enumerater   ry  remove)rC   r  showbuttonspriorityirD  r   s           r9   show_wordlist_buttonz*ConfigWordSuggestions.show_wordlist_buttonp  s    @ ''*W$44V<q=%.w%7 /	6 55f=#a<#NN1f5!	/  v.(/% %  v&(/% !r8   c                 `    	 t         j                  j                  |       S # t        $ r Y yw xY w)Nrs  )r;  	KEY_ORDERr  
ValueError)r  s    r9   rf  z*ConfigWordSuggestions._get_button_priority  s0    	(2288@@ 		s   ! 	--c                 2    | j                   | j                  v S r   )rE  r`  rL   s    r9   can_show_language_buttonz.ConfigWordSuggestions.can_show_language_button  s    ##t'<'<<<r8   c                 N    | j                   xr | j                  | j                  v S r   )rP  ra  r`  rL   s    r9   rb  z4ConfigWordSuggestions.can_show_pause_learning_button  s)     @&&$*?*??	@r8   c                 2    | j                   | j                  v S r   )rD  r`  rL   s    r9    can_show_more_predictions_buttonz6ConfigWordSuggestions.can_show_more_predictions_button  s    ++t/D/DDDr8   c                 $    | j                          S r   )rQ  rL   s    r9   can_learn_new_wordsz)ConfigWordSuggestions.can_learn_new_words  s    **,,,r8   N)r0   r1   r2   r  rC  rD  rE  ra  rF  ro  r  rN  rT  rQ  rV  r\  r^  rd  rm  r,  rf  rr  rb  ru  rw  r7   r8   r9   r;  r;     s    . #90 O,K,(& 	I18/
%-(0F10f  =@E-r8   r;  )or  
__future__r   r   r   r   rv   r  shutilr   optparser   r   Onboard.Versionr	   gi.repositoryr
   r   r   Onboard.WindowUtilsr   Onboard.utilsr   r   r   r   r   r   r   Onboard.definitionsr   r   r   r   r   r   r   r   r   Onboard.ConfigUtilsr   Onboard.ClickSimulatorr   r    Onboard.Exceptionsr!   r   rE  r   r   r>  r]  r  r  r  r  r  r  r  r  r  r)  r9  rB  r  r  r  r  MODELESS_GKSU_KEYr  r  r  r  r  r  r  r  ra  rc  r  r  r  r  r   r   r  r  r^  DEFAULT_FREQUENCY_TIME_RATIOr  r  SCHEMA_VERSION_0_99r  r  r  r/   r"   rd  rf  rh  rj  rl  rm  ro  ru  rw  r~   r}  rq  rs  r;  r7   r8   r9   <module>r     so  . B A 	 
   . /   ( ( ;I I IG G G 0 A . 
'

H
% )1/9 8 5
? > 2 9 710: K :
8
@
8 -  !		   !  &.. . 17 &4 !&"4"45 ! %am %am %am %am %am 0 H\ HV,=*\ =*@|.< |.~;7 ;7|%8\ %8P-L -&Y+, Y+x/\ /,6 66 6G G1 1"DL "DJA\ A4U-L U-r8   