
    g
fi              	       h   d Z dZdZdZdZdZddlZddlZddlm	Z	m
Z
 d	d
lmZ d	dlmZ d	dlmZ d	dlmZ d	dlmZ d	dlmZ d	dlmZ 	 e	j,                  j/                  e	j0                  j2                  e	j4                  j6                  ddddd      Z G d de      Z e       Z d Z!y# e$ r dZY w xY w)z\Settings manager module. This will load/save user settings from a 
defined settings backend.z$Id$z
$Revision$z$Date$z2Copyright (c) 2010 Consorcio Fernando de los Rios.LGPL    N)GioGLib   )debug)	orca_i18n)settings)pronunciation_dict)ACSS)AXObject)
KeyBindingzorg.a11y.Busz/org/a11y/buszorg.freedesktop.DBus.Propertiesc                   ,   e Zd ZdZdZd Zd-dZdi fdZd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd.dZd Zd/dZd Zd Zd Zd Zd Zd/dZd Zd0dZd Zd Zd Zd.dZ d.dZ!d.d Z"d! Z#d" Z$d# Z%d$ Z&d% Z'd& Z(d1d'Z)d( Z*d2d)Z+d* Z,d1d+Z-d, Z.y)3SettingsManagerz^Settings backend manager. This class manages orca user's settings
    using different backendsNc                 p    dt        |       vrt        j                  | g|i || _        | j                  S )N
__instance)varsobject__new___SettingsManager__instance)clsargskwargss      7/usr/lib/python3/dist-packages/orca/settings_manager.pyr   zSettingsManager.__new__=   s2    tCy(#^^CA$A&ACN~~    c                    t        j                  t         j                  dd       d| _        d| _        d| _        || _        d| _        i | _        i | _	        i | _
        i | _        i | _        i | _        i | _        i | _        i | _        d| _        i | _        i | _        i | _        | j+                         st-        d      i | _        d| _        dg| _        t        j                  t         j                  dd       y)	zInitialize a SettingsManager Object.
        If backend isn't defined then uses default backend, in this
        case json-backend.
        backend parameter can use the follow values:
        backend='json'
        zSETTINGS MANAGER: InitializingTN z$SettingsManager._loadBackend failed.Fapp-settingszSETTINGS MANAGER: Initialized)r   printMessage
LEVEL_INFObackendModule_backendprofilebackendName	_prefsDirdefaultGeneraldefaultPronunciationsdefaultKeybindingsprofileGeneralprofilePronunciationsprofileKeybindingsgeneralpronunciationskeybindings
_activeApp_appGeneral_appPronunciations_appKeybindings_loadBackend	ExceptioncustomizedSettings_customizationCompletedsettingsPackagesselfbackends     r   __init__zSettingsManager.__init__B   s     	5++-MtT!"
 !%'""$
 !%'""$
  "$!  "BCC"$',$ "0 05++-LdSr   c                    t        j                  t         j                  dd       | j                  j	                  |       |xs2 t
        j                  j                  t        j                         d      | _
        | j                  j                  | j                        | _        | j                          | j                          | j!                          | j"                  j%                         | _        | j)                         s3| j&                  j	                  | j                  j+                                | j,                  j%                         | _        | j0                  j%                         | _        | j5                          t        j                  t         j                  dd       d| j6                  g}t        j8                  t         j                  |d       | j6                  V| j&                  j;                  d      d   | _        d| j6                  g}t        j8                  t         j                  |d       | j=                  | j6                         y )	NzSETTINGS MANAGER: ActivatingTorcazSETTINGS MANAGER: Activatedz$SETTINGS MANAGER: Current profile isstartingProfiler   z(SETTINGS MANAGER: Current profile is now)r   r   r   r4   updateospathjoinr   get_user_data_dirr$   r    Backendr!   _setDefaultGeneral_setDefaultPronunciations_setDefaultKeybindingsr%   copyr+   isFirstStart
getGeneralr&   r,   r'   r-   _createDefaultsr"   printTokensget
setProfile)r8   prefsDircustomSettingstokenss       r   activatezSettingsManager.activatew   s   5++-KTR&&~6! >ww||D224f= 	 **224>>B!&&(##%**//1  "LL 8 8 :;"88==?22779 	5++-JDQ 9$,,G%**FD9<<<<++,=>qADL@$,,OFe..=%r   c                 z    	 d| j                    d}t        j                  |d      | _        y# t        $ r Y yw xY w)z.Load specific backend for manage user settingsz
.backends.r!   r<   TF)r#   	importlibimport_moduler    r3   r7   s     r   r2   zSettingsManager._loadBackend   sF    	"4#3#3"4H=G!*!8!8&!ID 		s   +. 	::c                    d }| j                   } ||       t        j                  j                  |d      } ||       t        j                  j                  |d      }t        j                  j	                  |      s8t        j
                  t        j                  |t        j                  d             t        j                  j                  |d      } ||       t        j                  j                  |d      } ||       t        j                  j                  |d      }t        j                  j	                  |      s8t        j
                  t        j                  |t        j                  d             t        j                  j                  |d      }t        j                  j	                  |      s8t        j
                  t        j                  |t        j                  d             | j                         r<| j                  j                  | j                  | j                  | j                         yy)	zLet the active backend to create the initial structure
        for storing the settings and save the default ones from
        orca.settingsc                 n    t         j                  j                  |       st        j                  |        y y N)r?   r@   isdirmakedirs)dirNames    r   
_createDirz3SettingsManager._createDefaults.<locals>._createDir   s#    77==)G$ *r   zorca-scriptsz__init__.pyi  r   soundszorca-customizations.pyN)r$   r?   r@   rA   existscloseopenO_CREATrH   r!   saveDefaultSettingsr%   r&   r'   )r8   r[   orcaDirorcaScriptDirinitFileorcaSettingsDirorcaSoundsDiruserCustomFiles           r   rJ   zSettingsManager._createDefaults   st   	% ..7 Wn==!77<<}=ww~~h'HHRWWXrzz59:'',,w??#Wh7=! 77<<7ww~~h'HHRWWXrzz59:g/GHww~~n-HHRWW^RZZ?@MM--d.A.A.2.H.H.2.E.EG r   c                     i | _         y)z4Get the pronunciations by default from orca.settingsN)r&   r8   s    r   rE   z)SettingsManager._setDefaultPronunciations   s
    %'"r   c                     i | _         y)z1Get the keybindings by default from orca.settingsN)r'   ri   s    r   rF   z&SettingsManager._setDefaultKeybindings   s
    "$r   c                     | j                          i | _        t        j                  D ]?  }| j                  j                  |      }|	 t        t        |      }|| j                  |<   A y# t        $ r Y w xY w)z6Get the general settings by default from orca.settingsN)_getCustomizedSettingsr%   r	   userCustomizableSettingsr4   rL   getattrr3   )r8   keyvalues      r   rD   z"SettingsManager._setDefaultGeneral   s}    ##% 44 	-C++//4E}#Hc2E (-D$	-
 ! s   	A++	A76A7c                 P   | j                   r| j                  S i }t        j                  j	                         D ]
  \  }}|||<    | j                         | _         |j	                         D ]9  \  }}t        j                  j                  |      }||k7  s+|| j                  |<   ; y rW   )r5   r4   r	   __dict__items_loadUserCustomizationsrL   )r8   originalSettingsro   rp   customValues        r   rl   z&SettingsManager._getCustomizedSettings   s    ''***"++113 	*JC$)S!	* (,'C'C'E$*002 	;JC"++//4K#/:'',	;r   c                 (   d}| j                   g}dg}|d   dz   }	 t        j                  j                  d|      }|Qt        j                  j	                  |      }|j
                  j                  |       |j                  d|dg       d	}n|j                  d|d
g       t        j                  t        j                  |d	       |S # t        $ r |j                  d|dg       Y Ft        $ r }d	}|j                  d|dg       Y d}~id}~ww xY w)zAttempt to load the user's orca-customizations. Returns a boolean
        indicating our success at doing so, where success is measured by the
        likelihood that the results won't be different if we keep trying.Fz5SETTINGS MANAGER: Attempt to load orca-customizationsr   z/orca-customizations.pyzorca-customizationsNfromz
succeeded.Tzfailed. Spec not found.zfailed. File not found.zfailed due to:z. Not loading customizations.)r$   rS   utilspec_from_file_locationmodule_from_specloaderexec_moduleextendFileNotFoundErrorr3   r   rK   	LEVEL_ALL)r8   successpathListrP   module_pathspecmoduleerrors           r   rt   z'SettingsManager._loadUserCustomizations   s   
 NN#IJqk$==	V>>99:OQ\]D"88>''/v{LABv{4MNO 	%//648 ! 	LMM6;0IJK 	VGMM+U4STUU	Vs   BC
 
D)D1DDc                     | j                   S rW   )r$   ri   s    r   getPrefsDirzSettingsManager.getPrefsDir  s    ~~r   c                 *    | j                  ||i       y rW   )_setSettingsRuntime)r8   settingNamesettingValues      r   
setSettingzSettingsManager.setSetting  s      +l!;<r   c                 $    t        t        |d       S rW   )rn   r	   )r8   r   s     r   
getSettingzSettingsManager.getSetting  s    xd33r   c                     | j                  d      }t        |j                  |i             }|j                         }|j	                         }|r,t        t        |            dk(  r| d|j                          }|S )Nvoices   _)r   r   rL   	getLocale
getDialectlenstrupper)r8   voicer   vlangdialects         r   getVoiceLocalezSettingsManager.getVoiceLocale  sj    *E2&'{{},,.s3w<(A-V1W]]_-.Dr   c                 L   g }| j                  d      D ]U  }	 t        j                  d|       }|j                  |       d|g}t	        j
                  t        j                  |d       W |S # t        $ r, d|g}t	        j
                  t        j                  |d       Y w xY w)z/Imports all known SpeechServer factory modules.speechFactoryModuleszorca.z.SETTINGS MANAGER: Valid speech server factory:Tz0SETTINGS MANAGER: Invalid speech server factory:)r   rS   rT   appendr   rK   r   r3   )r8   	factories
moduleNamer   rP   s        r   getSpeechServerFactoriesz(SettingsManager.getSpeechServerFactories$  s     	//*@A 	BJB"0051EF  (JJW!!%"2"2FDA	B 	  BLjY!!%"2"2FDABs   AA..2B#"B#c                 d   d|dg}t        j                  t         j                  |d       || j                  }| j	                  |      xs i | _        | j                  |      xs i | _        | j                  |      xs i | _	        d|dg}t        j                  t         j                  |d       y)zGet from the active backend all the settings for the current
        profile and store them in the object's attributes.
        A profile can be passed as a parameter. This could be useful for
        change from one profile to another.z&SETTINGS MANAGER: Loading settings forr"   TNSETTINGS MANAGER: Settings forzprofile loaded)
r   rK   r   r"   getGeneralSettingsr(   getPronunciationsr)   getKeybindingsr*   )r8   r"   rP   s      r   _loadProfileSettingsz$SettingsManager._loadProfileSettings4  s     ;GYO%**FD9?llG"55g>D"%)%;%;G%D%J""&"5"5g">"D"2G=MN%**FD9r   c                 \   d}t        j                  t         j                  |d       | j                  j	                  | j
                         | j                  j	                  | j                         | j                  j	                  | j                         | j                  j	                  | j                         | j                  j	                  | j                         | j                  j	                  | j                         d}t        j                  t         j                  |d       y)z^Update the changed values on the profile settings
        over the current and active settingsz#SETTINGS MANAGER: Merging settings.Tz"SETTINGS MANAGER: Settings merged.N)r   r   r   r(   r>   r/   r)   r0   r*   r1   r+   r,   r-   )r8   msgs     r   _mergeSettingszSettingsManager._mergeSettingsF  s     45++S$7""4#3#34""))$*A*AB&&t';';<D//0""4#=#=> 7 7825++S$7r   c                 N    | j                         }|s| j                  d       | S )zEnables the GNOME accessibility flag.  Users need to log out and
        then back in for this to take effect.

        Returns True if an action was taken (i.e., accessibility was not
        set prior to this call).
        T)isAccessibilityEnabledsetAccessibility)r8   alreadyEnableds     r   _enableAccessibilityz$SettingsManager._enableAccessibilityX  s,     446!!$'!!!r   c                    d}t        j                  t         j                  |d       d}t        sd}|dz  }n%t        j	                  ddd      }|t        |      z  }t        j                  t         j                  |d       |S )	Nz7SETTINGS MANAGER: Checking if accessibility is enabled.Tz)SETTINGS MANAGER: Accessibility enabled: FError (no proxy)(ss)org.a11y.Status	IsEnabled)r   r   r   _proxyGetr   r8   r   rvs      r   r   z&SettingsManager.isAccessibilityEnabledf  st    G5++S$79B%%CF$5{CB3r7NC5++S$7	r   c                 h   d| d}t        j                  t         j                  |d       t        s(d}t        j                  t         j                  |d       yt	        j
                  d|      }t        j                  ddd	|       d
| d}t        j                  t         j                  |d       y )Nz5SETTINGS MANAGER: Attempting to set accessibility to .Tz"SETTINGS MANAGER: Error (no proxy)Fbz(ssv)r   r   z4SETTINGS MANAGER: Finished setting accessibility to )r   r   r   r   r   VariantSet)r8   enabler   vEnables       r   r   z SettingsManager.setAccessibilityu  s    EfXQO5++S$76Cu//d;,,sF+

7-{GDDVHAN5++S$7r   c                     d}t         sd}|dz  }n%t         j                  ddd      }|t        |      z  }t        j                  t        j
                  |d       |S )zReturns True if the screen reader service is enabled. Note that
        this does not necessarily mean that Orca (or any other screen reader)
        is running at the moment.z4SETTINGS MANAGER: Is screen reader service enabled? Fr   r   r   ScreenReaderEnabledT)r   r   r   r   r   r   r   s      r   isScreenReaderServiceEnabledz,SettingsManager.isScreenReaderServiceEnabled  s[    
 EB%%CF$57LMB3r7NC5++S$7	r   c                 `    |t         j                  }| j                  j                  d|       y )Nr=   )r	   r"   r!   _setProfileKeyr8   r"   s     r   setStartingProfilez"SettingsManager.setStartingProfile  s'    ?&&G$$%6@r   c                     | j                   S rW   )r"   ri   s    r   
getProfilezSettingsManager.getProfile  s    ||r   c                     d|g}t        j                  t         j                  |d       | j                  d      }|| _        | j                  |       | j                          | j                  | j                         |sy| j                  d      }||k7  r?t        j                  |       t        j                  |       t        j                  |       d|g}t        j                  t         j                  |d       y)zSet a specific profile as the active one.
        Also the settings from that profile will be loading
        and updated the current settings with them.z%SETTINGS MANAGER: Setting profile to:TdefaultNz!SETTINGS MANAGER: Profile set to:)r   rK   r   r   r"   r   r   r   r+   r   setLocaleForNamessetLocaleForMessagessetLocaleForGUI)r8   r"   updateLocalerP   oldVoiceLocalenewVoiceLocales         r   rM   zSettingsManager.setProfile  s    
 :7C%**FD9,,Y7!!'*  .,,Y7^+''7**>:%%n55w?%**FD9r   c                 :    | j                   j                  |       y rW   )r!   removeProfiler   s     r   r   zSettingsManager.removeProfile  s    ##G,r   c                    d}t        j                  t         j                  |d       |j                         D ]  \  }}t	        t
        t        |      |       ! | j                          | j                  j                         D ]  \  }}t	        t
        t        |      |       ! d}t        j                  t         j                  |d       y )Nz+SETTINGS MANAGER: Setting runtime settings.Tz'SETTINGS MANAGER: Runtime settings set.)	r   r   r   rs   setattrr	   r   rl   r4   )r8   settingsDictr   ro   rp   s        r   r   z#SettingsManager._setSettingsRuntime  s    ;5++S$7&,,. 	/JCHc#h.	/##%11779 	/JCHc#h.	/ 85++S$7r   c                     i t         _         |j                         D ]!  \  }}|s	|st        j                  ||       # y rW   )r
   valuessetPronunciation)r8   pronunciationsDictro   rp   s       r   _setPronunciationsRuntimez)SettingsManager._setPronunciationsRuntime  s>    02-,335 	@JCu"33C?	@r   c                 8    | j                   j                  |      S )zReturn the current general settings.
        Those settings comes from updating the default settings
        with the profiles' ones)r!   rI   r   s     r   r   z"SettingsManager.getGeneralSettings  s     }}''00r   c                 8    | j                   j                  |      S )zReturn the current pronunciations settings.
        Those settings comes from updating the default settings
        with the profiles' ones)r!   r   r   s     r   r   z!SettingsManager.getPronunciations  s     }}..w77r   c                 8    | j                   j                  |      S )zReturn the current keybindings settings.
        Those settings comes from updating the default settings
        with the profiles' ones)r!   r   r   s     r   r   zSettingsManager.getKeybindings  s     }}++G44r   c                    d}t        j                  t         j                  |d       i | _        |j	                         D ]{  \  }}|dv r|dk(  r|| j                  |<    || j
                  j                  |      k7  r|| j                  |<   N| j                  j                  |      |k7  sm|| j                  |<   } d}t        j                  t         j                  |d       y)zRSet the changed general settings from the defaults' ones
        as the profile's.z6SETTINGS MANAGER: Setting general settings for profileT)r=   activeProfiler"   z2SETTINGS MANAGER: General settings for profile setN)r   r   r   r(   rs   r%   rL   r+   )r8   r+   r   ro   rp   s        r   _setProfileGeneralz"SettingsManager._setProfileGeneral  s     G5++S$7 !--/ 	1JC::	!+0##C($--11#66+0##C(!!#&%/+0##C(	1 C5++S$7r   c                    d}t        j                  t         j                  |d       | j                  j	                         | _        | j
                  j                  |       d}t        j                  t         j                  |d       y)zYSet the changed pronunciations settings from the defaults' ones
        as the profile's.z=SETTINGS MANAGER: Setting pronunciation settings for profile.Tz9SETTINGS MANAGER: Pronunciation settings for profile set.N)r   r   r   r&   rG   r)   r>   )r8   r,   r   s      r   _setProfilePronunciationsz)SettingsManager._setProfilePronunciations  sj     N5++S$7%)%?%?%D%D%F""")).9I5++S$7r   c                    d}t        j                  t         j                  |d       | j                  j	                         | _        | j
                  j                  |       d}t        j                  t         j                  |d       y)zVSet the changed keybindings settings from the defaults' ones
        as the profile's.z;SETTINGS MANAGER: Setting keybindings settings for profile.Tz7SETTINGS MANAGER: Keybindings settings for profile set.N)r   r   r   r'   rG   r*   r>   )r8   r-   r   s      r   _setProfileKeybindingsz&SettingsManager._setProfileKeybindings  sj     L5++S$7"&"9"9">">"@&&{3G5++S$7r   c                 0   i }| j                  | j                        }|j                         D ]  \  }}||j                  |      k7  s|||<   ! i }	| j	                  | j                        }
|j                         D ]  \  }}||
j                  |      k7  s||	|<   ! i }| j                  | j                        }|j                         D ]  \  }}||j                  |      k7  s|||<   ! | j                  j                  || j                  ||	|       y rW   )r   r"   rs   rL   r   r   r!   saveAppSettings)r8   appNamer+   r,   r-   
appGeneralr(   ro   rp   appPronunciationsr)   appKeybindingsr*   s                r   _saveAppSettingsz SettingsManager._saveAppSettings  s$   
00>!--/ 	(JC**3//"'
3	(  $ 6 6t|| D(..0 	/JC-11#66).!#&	/ !00>%++- 	,JC*..s33&+s#	, 	%%g&*ll&0&7&4		6r   c                 T   d|d|j                   dg}t        j                  t        j                  |d       |j                   }|r(| j	                  t        j                  |      |||       y|j                  dt        j                        }|d   }|| _	        |j                  d|      | j                  d<   | j                  |       | j                  |       | j                  |       d	| j                  g}t        j                  t        j                  |d       | j                  j                  | j                  | j                   | j"                  | j$                         d
|d|j                   dg}t        j                  t        j                  |d       | j'                         S )z3Save the settings provided for the script provided.z%SETTINGS MANAGER: Saving settings forz(app:)TNr"   r   r=   z$SETTINGS MANAGER: Saving for backendr   z) saved)appr   rK   r   r   r   get_namerL   r	   r"   r%   r   r   r   r!   saveProfileSettingsr(   r)   r*   r   )	r8   scriptr+   r,   r-   rP   r   _profilecurrentProfiles	            r   saveSettingszSettingsManager.saveSettings(  so    :67FJJX[\%**FD9jj!!("3"3C"8'>S^_ ;;y(*:*:;!!% 29=N>F2H-. 	(&&~6##K08$--H%**FD9))$,,*.*=*=*.*D*D*.*A*A	C
 3FGVZZQZ[%**FD9((**r   c                 b    |\  }}}}|sd}|S |t        |      t        |      t        |      f}|S )zAConverts the values of bindingTuple into KeyBinding-ready values.)r   r   r   r   )int)r8   bindingTuplekeysymmaskmodsclickss         r   _adjustBindingTupleValuesz)SettingsManager._adjustBindingTupleValuesL  sD     &2"dF(L  #CIs4y#f+FLr   c           
         | j                   }|j                         D ]  \  }}|j                  |      }|s|r|j                  |      s+d|dg}t	        j
                  t        j                  |d       Y|j                  |      s5d|j                  dg}t	        j
                  t        j                  |d       |j                  |      }	d }
|	D ]  }d|g}t	        j
                  t        j                  |d       |
:|j                         |
k7  r'd}t	        j                  t        j                  |d       |j                         }
|j                  |d        |D ]i  }| j                  |      }|\  }}}}t        ||||||
      }|j                  |       d|d| g}t	        j
                  t        j                  |d       k  |S )	NzSETTINGS MANAGER:z is not in the bindings provided.Tzis not enabled. Not overriding.z*SETTINGS MANAGER: Removing old binding forzESETTINGS MANAGER: Warning, different enabled values found for binding)enabledzis rebound to )r*   rs   rL   
hasHandlerr   rK   r   hasEnabledHandlerfunctiongetBindingsForHandler
is_enabledr   remover   r   add)r8   handlersbindingsenabledOnlykeybindingsSettingshandlerStringbindingTupleshandlerrP   oldBindings
wasEnabledr   r   r   r   r   r   r   
newBindings                      r   overrideKeyBindingsz#SettingsManager.overrideKeyBindingsW  s    #55,?,E,E,G $	B(M=ll=1G**7317<^_F%%e&6&6E11':173C3C?AF%%e&6&6E"88AKJ  	)FJ!!%"2"2FDA)alln
.JaC&&u'7'7dC\\^
4(	) !. B#==lK-9*dF'dGVU_`
Z(-w.8WX!!%"2"2FDAB=$	BL r   c                 6    | j                   j                         S )z,Check if the firstStart key is True or false)r!   rH   ri   s    r   rH   zSettingsManager.isFirstStart  s    }}))++r   c                 :    | j                   j                  |       y)zSet firstStart. This user-configurable setting is primarily
        intended to serve as an indication as to whether or not initial
        configuration is needed.N)r!   setFirstStart)r8   rp   s     r   r  zSettingsManager.setFirstStart  s     	##E*r   c                 6    | j                   j                         S )z*Get available profiles from active backend)r!   availableProfilesri   s    r   r  z!SettingsManager.availableProfiles  s     }}..00r   c                 ~   |sy | j                   j                  t        j                  |            }|j	                  di       }|j	                  | j
                  i       }|j	                  di       }|j	                  |      }|8|r6| j                   j                  | j
                        }|j	                  |      }|S )Nprofilesr+   )r!   getAppSettingsr   r   rL   r"   rI   )	r8   r   r   fallbackOnDefaultappPrefsr  profilePrefsr+   
appSettings	            r   getAppSettingzSettingsManager.getAppSetting  s    ==//0A0A#0FG<<
B/||DLL"5""9b1[[-
"3mm..t||<G [1Jr   c                    |r|j                   sy| j                  j                         D ]  }| j                  j	                  |        | j
                  j                  t        j                  |j                               }|j                  di       }|j                  | j                  i       }|j                  di       | _        |j                  di       | _        |j                  di       | _        t        j                  |j                         | _        | j                          | j                          | j!                  | j"                         | j%                  | j                         y)zLoad the users application specific settings for an app.

        Arguments:
        - script: the current active script.
        Nr  r+   r-   r,   )r   r0   keysr,   popr!   r  r   r   rL   r"   r/   r1   r.   r   r   r   r+   r   )r8   r   ro   prefsr  r  s         r   loadAppSettingszSettingsManager.loadAppSettings  s    6::**//1 	)C##C(	) ,,X->->vzz-JK99Z,||DLL"5'++Ir:+//rB"."2"23CR"H"++FJJ7!!#  .&&t':':;r   )json)r   rW   )r   F)T)F)/__name__
__module____qualname____doc__	_instancer   r:   rQ   r2   rJ   rE   rF   rD   rl   rt   r   r   r   r   r   r   r   r   r   r   r   r   r   rM   r   r   r   r   r   r   r   r   r   r   r   r   r  rH   r  r  r  r$   r   r   r   r   8   s     I
3Tj !%R #&J)GV(%-;:=4 :$8$"8"A
:4-8@1858,8862"+H	+Z,+1
<r   r   c                      t         S rW   )_managerr+  r   r   
getManagerr.    s    Or   )"r)  __id____version____date____copyright____license__rS   r?   gi.repositoryr   r   r   r   r   r	   r
   acssr   	ax_objectr   r-   r   	DBusProxynew_for_bus_syncBusTypeSESSIONDBusProxyFlagsNONEr   r3   r   r   r-  r.  r+  r   r   <module>r=     s   , D  	 #        #
]]++)FC
<f C
<J W  Fs   A	B' 'B10B1