
    ?g                        d dl Z  e j                  dd        e j                  dd       d dlmZmZmZmZmZmZ d dl	m
Z
mZ d dl d dlZd	Zd
ZdZdZ ed      eddd ed      eddd ed      eddd ed      eddd ed      eddd ed      eddd ed       ed!d"d ed#      ed$d%d ed&      ed'd(d ed)      ed*d+d ed,      ed-d.d ed/      ed0d1d ed2      ed3d4dgZ ed5      d6d7d d d8g ed9      d:d;d d<d<g ed=      d>d?d d8d@g edA      dBdCd<d dDg edE      dFdGd<d<dHg edI      dJdKd<d8dLg edM      dNdOd8d8dPg edQ      dRdSd8d dTg edU      dVdWd8d<dXgg	ZdY Z G dZ d[ej,                        Z G d\ d]e      Z G d^ d_e      Z G d` dae      Z G db dce      Z G dd dee      Z G df dge      Z G dh diej>                        Z  G dj dk      Z!y)l    NCvcz1.0Gtkz3.0)r   r   Gdk	GdkPixbufGioPango)SidePageGSettingsSoundFileChooser)*zorg.cinnamon.soundszorg.cinnamon.desktop.soundzallow-amplified-volumeg333333?zStarting Cinnamonz
login-filezlogin-enabled)labelschemafileenabledzLeaving Cinnamonzlogout-filezlogout-enabledzSwitching workspacezswitch-filezswitch-enabledzOpening new windowszmap-filezmap-enabledzClosing windowsz
close-filezclose-enabledzMinimizing windowszminimize-filezminimize-enabledzMaximizing windowszmaximize-filezmaximize-enabledzUnmaximizing windowszunmaximize-filezunmaximize-enabledzTiling and snapping windowsz	tile-fileztile-enabledzInserting a devicez	plug-filezplug-enabledzRemoving a devicezunplug-filezunplug-enabledzShowing notificationsznotification-fileznotification-enabledzChanging the sound volumezvolume-sound-filezvolume-sound-enabledz
Front Leftz
front-leftzaudio-speaker-left   zFront Rightzfront-rightzaudio-speaker-right   zFront Centerzfront-centerzaudio-speaker-center   z	Rear Leftz	rear-leftzaudio-speaker-left-back   z
Rear Rightz
rear-rightzaudio-speaker-right-back   zRear Centerzrear-centerzaudio-speaker-center-back   	Subwooferlfezaudio-subwoofer   z	Side Leftz	side-leftzaudio-speaker-left-side
   z
Side Rightz
side-rightzaudio-speaker-right-side   c                     |rO| j                         s>| j                  t        j                  t        j                  j
                               y y y )Norientation)
get_header
set_headerr   	SeparatorOrientation
HORIZONTAL)rowbefore	user_datas      9/usr/share/cinnamon/cinnamon-settings/modules/cs_sound.pylist_header_funcr'   .   s4    cnn&s}}1K1KLM 'v    c                       e Zd Zd Zd Zy)SoundBoxc                    t         j                  j                  |        | j                  t         j                  j
                         | j                  d       t        j                         }|j                  d|z         |j                  d       | j                  |       t        j                         }|j                  t         j                  j                         |j                         }|j!                  d       | j#                  |ddd       t        j                  t         j                  j
                        }|j                  |       t        j$                         }d|_        |j)                  d       |j+                  t         j,                  j.                  t         j,                  j0                         |j                  t         j                  j2                         |j#                  |ddd       t        j                  t         j                  j
                        | _        |j                  | j4                         t        j6                         | _        | j8                  j;                  t         j<                  j2                         | j8                  j?                  t@        d        | j4                  j                  | j8                         y )	Nr   z	<b>%s</b>        viewTr   r   i  )!r   Box__init__set_orientationr!   VERTICALset_spacingLabel
set_markup
set_xalignaddFrameset_shadow_type
ShadowTypeINget_style_context	add_class
pack_startScrolledWindowexpandset_min_content_height
set_policy
PolicyTypeNEVER	AUTOMATICNONEboxListBoxlist_boxset_selection_modeSelectionModeset_header_funcr'   )selftitler   frameframe_stylemain_boxscws          r&   r/   zSoundBox.__init__3   s   S__556		u,-		cnn//0--/f%tT1-77s'?'?@		(  "
""C(s~~++S^^-E-EFCNN//0CtQ/77s'?'?@(():):)?)?@%%&6=T]]#r(   c                 :    | j                   j                  |       y N)rH   r6   )rL   r#   s     r&   add_rowzSoundBox.add_rowT   s    #r(   N)__name__
__module____qualname__r/   rT    r(   r&   r*   r*   2   s    $Br(   r*   c                   &     e Zd Zd fd	Zd Z xZS )Sliderc                    t         t        |           | j                  t        j
                  j                         | j                  d       | j                  d       |7t        j                  j                  t        j                  j                        }|||z
  dz  }|||z
  dz  }t        j                  j                  |	||||d      | _        t	        j                         }t	        j                         | _        t	        j                         | _        t        j                  j                  t        j                  j                        }|j%                  | j                          |j%                  | j"                         t	        j                  d      }|
5t        j&                  j)                  |
d      }|j+                  |ddd       n6|4t        j&                  j-                  |d      }|j+                  |ddd       t	        j.                  |      | _        |j+                  | j0                  ddd       |j3                  t        j4                  j6                         |j+                  | j                   ddd       |j+                  |ddd       |j+                  | j"                  ddd       t	        j                         }t        j8                  j                  t        j
                  j                  | j                        | _        d| j:                  j<                  _        t	        j.                         }t	        j.                         }|jA                  d	d
       |jA                  dd
       |jC                  d       |jE                  d       |jG                  d|z         |jG                  d|z         |j%                  |       |j%                  |       |j+                  |ddd       |j+                  | j:                  ddd       |j+                  |ddd       | j+                  |ddd       | j+                  |ddd       | jI                          y )Nr   d   r   r   )spacingr   FTg      ?g      ?r,   r   z<i><small>%s</small></i>)%superrZ   r/   r0   r   r!   r1   r2   set_margin_bottom	SizeGroupnewSizeGroupModer"   
Adjustment
adjustmentr.   leftBoxrightBox
add_widgetImagenew_from_giconr=   new_from_icon_namer3   r   
set_halignAlignCENTERScalesliderprops
draw_valueset_alignmentset_margin_rightset_margin_leftr4   show_all)rL   rM   minLabelmaxLabelminValuemaxValue	sizeGroupsteppagevaluegiconiconNametopBoxtopGrouplabelBoxappIcon	sliderBox	min_label	max_label	__class__s                      r&   r/   zSlider.__init__X   sV   fd$&S__556q!))#*;*;*F*FGI<x'3.D<x'2-D..,,UHhdTUVwwy	==$$S%6%6%A%ABDLL)DMM* 771%ii..ua8Gq9!ii228Q?Gq9YYu%
DJJua8CII,,-$,,ua8(D$2$--q9 GGI	iimmCOO$>$>P',$99;	IIK	T*T*""1%!!!$7(BC7(BCY'Y'Yua8T[[$a8Yua8ua0	5%3r(   c                 n    | j                   j                  |t        j                  j                  d       y )N )ro   add_markr   PositionTypeTOP)rL   vals     r&   setMarkzSlider.setMark   s$    S#"2"2"6"6;r(   )NNr   NN)rU   rV   rW   r/   r   __classcell__r   s   @r&   rZ   rZ   W   s    <|<r(   rZ   c                   d     e Zd Z ed      ddf fd	Zd Zd Zd Zd Zd Z	d	 Z
dd
Zd Z xZS )	VolumeBarzVolume: Nc                 B   || _         d| _        d| _        || _        d | _        d| _        d| _        t        t        | '  |t        d      t        d      d||ddd|
       | j                  d       | j                  d       | j                  d       | j                  d       | j                  j!                  d       t"        j$                  j'                  d	d      | _        t#        j*                         | _        | j,                  j/                  | j(                         | j,                  j1                  t"        j2                  j4                         | j,                  j7                  d       | j,                  j!                  d       | j8                  j;                  | j,                  ddd       |d
kD  r| j=                  d
       | j,                  j?                  d| j@                        | _!        | jD                  j?                  d| jF                        | _$        y )Nr   FSofterLouderr   r   r      audio-volume-muted-symbolicr\   clickedvalue-changed)%
normVolumevolumeisMuted	baseTitlestreammutedHandlerIdvolumeHandlerIdr^   r   r/   _r2   set_border_widthrt   rs   ro   set_sensitiver   rh   rj   	muteImageToggleButton
muteSwitch	set_image
set_reliefReliefStylerE   
set_activere   r=   r   connect
toggleMutemuteSwitchHandlerIdrd   onVolumeChangedadjustmentHandlerId)rL   r   
maxPercentrM   r~   rz   r   s         r&   r/   zVolumeBar.__init__   s   $ i'q{AhKJXacdfgijlqra R b!!!%(556SUVW**,!!$..1""3??#7#78""5)%%e,qALL#'??#:#:9doo#V #'??#:#:?DL`L`#a r(   c                     | j                   j                  d| j                        | _        | j                   j                  d| j                        | _        | j                  d d        y )Nznotify::is-mutedznotify::volume)r   r   	setVolumer   r   rL   s    r&   connectStreamzVolumeBar.connectStream   sL    "kk112DdnnU#{{223CT^^TtT"r(   c                     | j                   dkD  r,| j                  j                  | j                          d| _         | j                  dkD  r-| j                  j                  | j                         d| _        y y )Nr   )r   r   
disconnectr   r   s    r&   disconnectStreamzVolumeBar.disconnectStream   sc    "KK""4#6#67"#D!#KK""4#7#78#$D  $r(   c                     | j                   r|| j                   k7  r| j                          || _         | j                          | j                  j	                  d       | j
                  j	                  d       y )NT)r   r   r   ro   r   r   rL   r   s     r&   	setStreamzVolumeBar.setStream   sW    ;;6T[[0!!#!!$'%%d+r(   c                    | j                   j                         r
d}d| _        nIt        t	        | j                   j
                  j                  | j                  z  dz              }d| _        || _        | j                  j                  | j                         | j                  j                  |       | j                  j                  | j                         | j                          y )Nr   Tr\   F)r   get_is_mutedr   introundrp   r   r   rd   handler_blockr   	set_valuehandler_unblockupdateStatus)rL   ab	newVolumes       r&   r   zVolumeBar.setVolume   s    ;;##%IDLE$++"3"3":":T__"Ls"RSTI DL%%d&>&>?!!),''(@(@Ar(   c                    t        t        | j                  j                                     }|dk(  }|| _        | j
                  j                  | j                         | j
                  j                  || j                  z  dz         | j
                  j                          | j
                  j                  | j                         | j
                  j                         |k7  r| j                  |       | j                          y )Nr   r\   )r   r   rd   	get_valuer   r   r   r   
set_volumer   push_volumer   r   setMutedr   )rL   rd   r   muteds       r&   r   zVolumeBar.onVolumeChanged   s    doo779:;	Q!!$"6"67y4??:S@A!##D$8$89;;##%.MM% r(   c                 H    || _         | j                  j                  |       y rS   )r   r   change_is_muted)rL   r   s     r&   r   zVolumeBar.setMuted   s    ##E*r(   c                 <    | j                  | j                          y rS   )r   r   rL   r   s     r&   r   zVolumeBar.toggleMute   s    $,,&'r(   c                    | j                   j                  | j                         | j                   j                  | j                         | j                   j                  | j                         | j                  rr| j                  j                  dd       | j                  j                  | j                  t        d      z          | j                   j                  t        d             y | j                  j                  dd       | j                  j                  | j                  t        | j                        z   dz          | j                   j                  t        d             y )Nr   r   MutedzClick to unmutezaudio-volume-high-symbolic%zClick to mute)r   r   r   r   r   r   r   set_from_icon_namer   	set_labelr   r   set_tooltip_textstrr   r   s    r&   r   zVolumeBar.updateStatus   s    %%d&>&>?""4<<0''(@(@A<<NN--.KQOJJ  !G*!<=OO,,Q/@-ABNN--.JANJJ  #dkk2B!BS!HIOO,,Q-?@r(   rS   )rU   rV   rW   r   r/   r   r   r   r   r   r   r   r   r   r   s   @r&   r   r      s?    56z]$Z^ bB#
%	, "+(Ar(   r   c                   4     e Zd Zd fd	Zd ZddZd Z xZS )
BalanceBarc           
         || _         || _        d| _        |dk(  r"t        d      }t        d      }t        d      }nM|dk(  r"t        d      }t        d      }t        d	      }n&|d
k(  r!t        d      }t        d      }t        d      }t        t
        |   |d|d|z
  dz         | j                  d       d| j                  j                  _
        | j                  j                  d| j                         y )Nr   balanceBalanceLeftRightfadeFadeRearFrontr   r   SoftLoudr   g      4@Fr   )typenormr}   r   r^   r   r/   r   ro   rp   
has_originrd   r   onLevelChanged)	rL   settingTypeminValr   rz   rM   rv   rw   r   s	           r&   r/   zBalanceBar.__init__  s    		
)#iLEyHzHF"fIEyHzHE!kNEyHyHj$((FAy[\]c[cehZhiQ',$1D1DEr(   c                     || _         | j                   j                  d| j                         | j                   t	        | j                   d| j
                  z                       | j                          y )Nzvolume-changedcan_)
channelMapr   getLevelr   getattrr   )rL   r   s     r&   setChannelMapzBalanceBar.setChannelMap$  sS    $ 0$--@E74??F4994DEGHr(   c                    t         t        | j                  d| j                  z                d      }| j                  dk(  r|| j                  z  }|| j
                  k(  ry || _        | j                  j                  | j
                         y )Nget_r   r   )r   r   r   r   r   r}   rd   r   )rL   r   r   r}   s       r&   r   zBalanceBar.getLevel*  sn    @gdoovdii/?@BAF99DII%EDJJ
!!$**-r(   c                    t        | j                  j                         d      }| j                  |k(  ry || _        | j                  dk(  r|| j
                  z  } t        | j                  d| j                  z         |       y )Nr   r   set_)r   rd   r   r}   r   r   r   r   )rL   rd   r}   s      r&   r   zBalanceBar.onLevelChanged3  si    doo//115::
99DII%E2		!1259r(   )r   NNN)rU   rV   rW   r/   r   r   r   r   r   s   @r&   r   r   
  s    F2.:r(   r   c                   *     e Zd Z fdZd Zd Z xZS )VolumeLevelBarc                     t         t        |           | j                  t        j
                  j                         | j                  d       d| _        d | _	        d | _
        | j                  t	        j                  t        d            ddd       t	        j                         }t	        j                         | _        t	        j                         }|j#                  |       t	        j                         }|j#                  |       |j                  |ddd       |j                  | j                   ddd       |j                  |ddd       | j                  |ddd       | j                   j%                  d       y )Nr   r   zInput levelFT)r^   r   r/   r0   r   r!   r1   r2   lastPeak	monitorIdr   r=   r3   r   r.   LevelBarlevelBarrg   set_min_value)rL   rz   levelBoxleftPaddingrightPaddingr   s        r&   r/   zVolumeLevelBar.__init__=  s   nd,.S__556		!M"23UE1E779ggi[)wwy\*Kq9DMM4q9L%:%2##A&r(   c                 2   | j                   ?| j                   j                          | j                   j                  | j                         || _         | j                   j	                          | j                   j                  d| j                        | _        y )Nzmonitor-update)r   remove_monitorr   r   create_monitorr   updater   s     r&   r   zVolumeLevelBar.setStreamX  sf    ;;"KK&&(KK""4>>2""$,,-=t{{Kr(   c                     | j                   t        k\  r)|| j                   t        z
  k  r| j                   t        z
  }|| _         | j                  j                  |       y rS   )r   
DECAY_STEPr   r   )rL   r   r}   s      r&   r  zVolumeLevelBar.update`  sE    ==J&54==:3M+MMMJ.E&r(   )rU   rV   rW   r/   r   r  r   r   s   @r&   r   r   <  s    '6L'r(   r   c                   0     e Zd Z fdZd Zd Zd Z xZS )ProfileSelectorc                 b   t         t        |           || _        t	        j
                  t        t              | _        t	        j                         | _	        | j                  j                  | j                         t	        j                         }| j                  j                  |d       | j                  j                  |dd       | j                  j                  d       | j                  t	        j                  t!        d            ddd       t        j"                  j%                  t!        d            }| j'                  |ddd       | j'                  | j                  ddd       |j)                  d| j*                         | j                  j)                  d	| j,                         y )
NTtextr   r   zOutput profileFz
Test soundr   changed)r^   r  r/   
controllerr   	ListStorer   modelComboBoxcombo	set_modelCellRendererTextr=   add_attributeset_id_columnr3   r   Buttonnew_with_labelpack_endr   testSpeakersonProfileSelect)rL   r  renderbuttonr   s       r&   r/   zProfileSelector.__init__h  s%   ot-/$]]3,
\\^


TZZ(%%'

fd+

  3

  #		!$4"56uaH**1\?;feUA.djj%2y$"3"34

9d&:&:;r(   c                 J   || _         |j                         }| j                  j                          |D ]3  }| j                  j	                  |j
                  |j                  g       5 |j                         | _        | j                  j                  | j
                         y rS   )
deviceget_profilesr  clearappendprofilehuman_profileget_active_profiler  set_active_id)rL   r  profilesr!  s       r&   	setDevicezProfileSelector.setDevice|  s    &&(

 	HGJJw0E0EFG	H 002

  .r(   c                     | j                   j                         }|| j                  k7  r1|.|| _        | j                  j	                  | j
                  |       y y y rS   )r  get_active_idr!  r  !change_profile_on_selected_devicer  )rL   r   
newProfiles      r&   r  zProfileSelector.onProfileSelect  sM    ZZ--/
%**@%DLOO==dkk:V +A%r(   c                 h    t        |j                         | j                  j                                y rS   )	SoundTestget_toplevelr  get_default_sinkr   s     r&   r  zProfileSelector.testSpeakers  s     !.."DOO$D$D$FGr(   )rU   rV   rW   r/   r&  r  r  r   r   s   @r&   r  r  g  s    <(	/WHr(   r  c                        e Zd Z fdZ xZS )Effectc                    t         t        |   |d   |d   |d          |d   | _        t	        j
                         | _        | j                  | j                  ddd       | j                  | j                  d       |j                  | j                         | j                  j                  | j                  | j                  dt        j                  j                         y )	Nr   r   r   r   Fr   r   active)r^   r0  r/   enabled_keyr   Switchenabled_switchr  reorder_childrg   content_widgetsettingsbindr   SettingsBindFlagsDEFAULT)rL   inforz   r   s      r&   r/   zEffect.__init__  s    fd$T']DNDLQ	?!jjld))5%;4..2T0014++T-@-@(CLaLaLiLijr(   )rU   rV   rW   r/   r   r   s   @r&   r0  r0    s    k kr(   r0  c                   $    e Zd Zd Zd Zd Zd Zy)r,  c                    t         j                  j                  | t        d      |       || _        g | _        t        j                         }|j                  d       |j                  d       |j                  d       |j                  d       t        j                  t         j                  j                        }d}t        D ]  }t        j                         }t        j                          }|j#                  |       |j%                  t         j&                  j(                         t         j                  j+                  t         j,                  j.                  d      }	|j1                  |	       t         j2                  j5                  |d   t         j6                  j8                        }
|	j;                  |
ddd       |	j;                  t        j<                  |d         ddd       ||
|d}|j?                  d| j@                  |       |j1                  |       |jC                  ||d	   |d
   dd       |dz   }| j
                  jE                  |        | jG                         }|jI                  d       |j1                  |       t         j                   jK                  d      }|j?                  d| jL                         |j1                  |       | jO                          | jQ                          y )Nz
Test SoundK   Tr   r   F)indexiconr  r   r   r   r      z	gtk-close))r   Dialogr/   r   r   	positionsGridset_column_spacingset_row_spacingset_column_homogeneousset_row_homogeneousr`   rb   BOTHSOUND_TEST_MAPr.   r  rg   r   r   rE   ra   r!   r1   r6   rh   rj   IconSizeDIALOGr=   r3   r   testattachr   get_content_arear   new_from_stock_destroyru   setPositionHideState)rL   parentr   gridrz   r@  position	containerr  rF   rA  r<  content_areas                r&   r/   zSoundTest.__init__  s-   

D!L/6:xxz#R ##D)  &MM#"3"3"8"89	& 	(H	IZZ\F  (coo223''++coo66:CJJsO99//S\\=P=PQDNN4q1NN399Xa[15%C!$@DNN9dii6MM&!KK	8A;QBAIENN!!$''	(* ,,.%%b)**;7y$--0 !!#r(   c                 $    | j                          y rS   )destroy)rL   widgets     r&   rR  zSoundTest._destroy  s    r(   c                     t         |d      }|d   dk(  rd}nd|d   z   }	 t        j                  ||d          y # t        j                  $ r"}t        d|j                  z         Y d }~y d }~ww xY w)Nr@  r   r   zaudio-test-signalzaudio-channel-zCould not play test sound: %s)rK  utilplay_sound_nameGLibErrorprintmessage)rL   r   r<  rV  soundes         r&   rN  zSoundTest.test  sq    !$w-0A;%'E$Xa[0E	?  4zz 	?1AII=>>	?s   ; A0A++A0c                     | j                   j                         }| j                  D ]I  }|d   }|j                  t        |   d         r|d   j                          7|d   j                          K y )Nr@  r   r  )r   get_channel_maprD  has_positionrK  showhide)rL   maprV  r@  s       r&   rS  zSoundTest.setPositionHideState  sk    kk))+ 	*HW%Eu 5a 89"'')"'')	*r(   N)rU   rV   rW   r/   rR  rN  rS  rX   r(   r&   r,  r,    s    ,$\?*r(   r,  c                       e Zd ZdZdZ ed      Zd Zd Zd Z	ddZ
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd ZddZd Zd Zd Zy)Modulerc  hardwarezManage sound settingsc                     t        d      }t        t        d      d|||       | _        t        j                  t
              | _        y )Nz;sound, media, music, speakers, audio, microphone, headphoneSoundzcs-sound)module)r   r	   sidePager   SettingsCINNAMON_DESKTOP_SOUNDSsound_settings)rL   content_boxkeywordss      r&   r/   zModule.__init__  s8    RS 7Z;W[\!ll+BCr(   c                    | j                   st        d       t        j                  t        t        t
        t        t        j                        | _	        t        j                  t        t        t
        t        t        j                        | _
        i | _        | j                          | j                          | j                          | j                          y )NzLoading Sound module)loadedra  r   r  r   boolr   r   PixbufoutputDeviceListinputDeviceListappListinializeControllerbuildLayoutcheckAppStatecheckInputStater   s    r&   on_module_selectedzModule.on_module_selected  s    {{()$'MM#2526252;2B2B	%DD! $'==1415141:1A1A	$CD  DL##%r(   c                    t               | j                  _        | j                  j                  | j                  j                         t	               }| j                  j                  j                  |dt        d             | j                  d| j                        | _	        |j                  t        d            }|j                  | j                         |j                  t        d            }t        | j                        | _        |j                  | j                         t        j                   j#                  t        j$                  j&                        }| j                  j                  j)                         | _        t-        | j                  j/                         d|      | _        |j                  | j0                         t3        d|      | _        |j                  | j4                         t3        d|      | _        |j                  | j6                         t3        d	d
| j                  j/                         |      | _        |j                  | j8                         t;        t        d      t<        t>              }|jA                  t        d             |j                  |       t	               }| j                  j                  j                  |dt        d             t        jB                         | _"        |jG                  | jD                  ddd
       t        jH                  t        jJ                  jL                  d      }| j                  d| jN                        | _(        tS        d      }|jG                  |ddd
       |j                  | jP                         tS        t        d            }|jG                  |ddd
       t        j                   j#                  t        j$                  j&                        }t-        | j                  j/                         d|      | _*        |j                  | jT                         tW        |      | _,        |j                  | jX                         | jD                  j[                  |d       t        jH                         }t        jH                  t        jJ                  jL                  d      }	t        j\                  j_                  dt        j`                  jb                        }
|
je                  d       |	jG                  |
ddd
       |	jg                  t        jh                  jj                         t        jl                  t        d            }|	jG                  |ddd
       |jG                  |	ddd
       | jD                  j[                  |d       | jD                  jo                          t	               }| j                  j                  j                  |dt        d             |j                  t        d            }t-        | j                  j/                         d      | _8        |j                  | jp                         ts        t        d            }|jG                  |ddd
       t        j                   j#                  t        j$                  j&                        }tt        D ]  }|j                  tw        ||              t	               }| j                  j                  j                  |dt        d             t        jB                         | _<        |jG                  | jx                  ddd
       t        jH                  t        jJ                  jL                        }	ts        t        d            | _=        |	jG                  | jz                  ddd
       | jx                  j[                  |	d       t        jH                         }t        jH                  t        jJ                  jL                  d      }	t        j\                  j_                  dt        j`                  jb                        }
|
je                  d       |	jG                  |
ddd
       |	jg                  t        jh                  jj                         t        jl                  t        d             }|	jG                  |ddd
       |jG                  |	ddd
       | jx                  j[                  |d!       | j|                  j                  d"t>         | j                         | j                          y )#NoutputOutputDevicezDevice settingsr\   )rz   r   r   r   r   Overamplificationz<Allow the volume to exceed 100%, with reduced sound quality.inputInputT   )r   r]   FinputBoxrB  zaction-unavailable-symbolic`   z*No inputs sources are currently available.noInputsMessagesoundsSoundszSounds VolumeapplicationsApplicationsr   appSettingsz7No application is currently playing or recording audio.noAppsMessagez	changed::)ASettingsStackrq  stackrg   SettingsPage
add_titledr   buildDeviceSelectr{  outputSelectoradd_sectionrT   r  r  r!  r   r`   ra   rb   r"   get_scale_factorscaler   get_vol_max_norm	outVolumer   r   r   wooferGSettingsSwitchrs  OVERAMPLIFICATION_KEYr   Stack
inputStackr=   r.   r!   r1   r|  inputSelectorSettingsSectioninVolumer   inLevel	add_namedrh   rj   rL  rM  set_pixel_size
set_valignrl   rm   r3   ru   soundsVolumer*   EFFECT_LISTr0  appStackr  rt  r   onOverAmplificationChanged)rL   r|   outputSectiondevSettingsrz   switchr  deviceSectionr  rF   imager   soundsVolumeSectionsoundsSectioneffectr  s                   r&   r  zModule.buildLayout  s   +o  !4!45 ~&&tXq{C"44Xt?T?TU((85d112&&q):';< 't7DLL)MM%%c&7&7&B&BC	]]((99;
 #4??#C#C#EsV_`DNN+ ")yADLL)v;	DII& 4??+K+K+MYbcDKK( !#6!79PRgh"` abF# ~&&tWajA))+tQ777s'?'?L!33GT=Q=QR'1M5%;d001%a(9&:;Kq9MM%%c&7&7&B&BC	 "$//"B"B"DcU^_DMM* &i0DLL)!!(J7'')gg#//":":BG		,,-JCLLL_L_`R ueUA.syy''(		!HIJueUA.""3dA6!!/3DE  " ~&&tXq{C"..q/AB%doo&F&F&H#N##D$5$56 8-tT15MM%%c&7&7&B&BC	! 	=F!!&";<	= ~&&t^Q~=NO		tT15gg#//":":;#An$56t''tQ7]3	gg#//":":BG		,,-JCLLL_L_`R ueUA.syy''(		!UVWueUA.  dD!4?##i0E/F$GIhIhi'')r(   Nc                 Z   | j                   j                  t              }| j                  j                  j                          |rA| j                  j                  j                  d       | j                  j                  d       y | j                  j                  j                  d       y )N   r\   )	rt  get_booleanr  r  ro   clear_marksrd   	set_upperr   )rL   r8  keyoveramplifications       r&   r  z!Module.onOverAmplificationChanged~  su     //;;<QR))+NN%%//4NN""3'NN%%//4r(   c                    t        j                  d      | _        | j                  j                  d| j                         | j                  j                  d| j
                  d       | j                  j                  d| j
                  d       | j                  j                  d| j                  d       | j                  j                  d	| j                  d       | j                  j                  d
| j                         | j                  j                  d| j                         | j                  j                  d| j                         | j                  j                  d| j                         | j                  j                  d| j                         | j                  j                  d| j                         | j                  j                          y )Ncinnamon)namezstate-changedzoutput-addedr  zinput-addedr  zoutput-removedzinput-removedzactive-output-updatezactive-input-updatezdefault-sink-changedzdefault-source-changedzstream-addedzstream-removed)r   MixerControlr  r   r   deviceAddeddeviceRemovedactiveOutputUpdateactiveInputUpdatedefaultSinkChangeddefaultSourceChangedstreamAddedstreamRemovedopenr   s    r&   r~  zModule.inializeController  sP   ***=1C1CD0@0@(Kt/?/?I 0$2D2DhO1C1CWM 68O8OP 5t7M7MN 68O8OP 8$:S:ST0@0@A 0$2D2DEr(   c                     |j                  |d      }t        j                  || j                        }|j	                  d|       y )Nr   surface)r   r    cairo_surface_create_from_pixbufr  set_property)rL   columncellr  iter_argspixbufr  s           r&   data_func_surfacezModule.data_func_surface  s8    *66vtzzJ)W-r(   c                    t         j                  j                  |      }|j                  d       |j	                  d       t        j
                         }|j                  |d       |j                  || j                         t        j                         }|j                  |d       |j                  |dd       |j                  dt        j                  j                         |j                  dd       |j                  dt        j                  j                          |j                  dd	       |j#                  d
| j$                  |       |S )Nr   Fr
  z	wrap-modez
wrap-widthx   	alignmentxaligng      ?zselection-changed)r   IconViewnew_with_model
set_marginrF  CellRendererPixbufr=   set_cell_data_funcr  r  r  r  r   WrapModeWORD	Alignmentrm   r   setActiveDevice)rL   	directionr  selectrens        r&   r  zModule.buildDeviceSelect  s
   ,,U3!!!!$ $$&#u%!!#t'='=> ""$#u%S&!,enn&9&9:s+eoo&<&<=3'*D,@,@)Lr(   c                    |j                         }t        |      dk(  ry |j                         }|j                  |j	                  |d         d      } t        | j                  d|z   dz         |      }|N|t        | |dz         k7  r; t        | j                  d|z         |       | j                  j                  |       y y y )Nr   r   lookup__idIdchange_)	get_selected_itemslen	get_modelr   get_iterr   r  r!  r&  )rL   r-   r  selectedr  newDeviceId	newDevices          r&   r  zModule.setActiveDevice  s    **,x=A ooennXa[&A1EGGDOOYy-@-FGT	 [GD)D.4Q%Q9GDOOYy%89)DLL""9- &R r(   c                     t        | j                  d|z   dz         |      }d| j                  z  }t        j                  j                         }|j                         }|j                         }d }	|%|j                  ||d      }
|
|
j                         }	|	R|d|v r|j                  d|d      }	n8|j                  d      r|j                  d|d      }	n|j                  d|d      }	t        | |dz         j                  |j                         d	z   |j                         z   d
d||	g       |dk(  r| j                          y y )Nr  r      r   	bluetoothz
audio-cardrc  
DeviceList
r   Fr  )r   r  r  r   	IconThemeget_default	get_giconget_icon_namelookup_by_gicon	load_iconhas_iconr   get_description
get_originr  )rL   cdeviceIdr  r  	icon_size	iconThemer~   r   rA  lookups              r&   r  zModule.deviceAdded  s[   D)I*=e*CDXNO	MM--/	  "'')..uiCF!'')<#x(? **;	1E##L1 **<AF **7IqAi,-44f6L6L6NQU6UY_YjYjYl6lnprw  zB  DH  6I  	J  "  r(   c                     t        | |dz         }|D ]<  }|d   |k(  s|j                  |j                         |dk(  r| j                           y  y )Nr  r   r  )r   removeiterr  )rL   r  r   r  storer#   s         r&   r  zModule.deviceRemoved  sU    i45 	C1v!SXX&'((*	r(   c                     t        | j                        dk(  r| j                  j                  d       y | j                  j                  d       y )Nr   r  r  )r  r|  r  set_visible_child_namer   s    r&   r  zModule.checkInputState  s:    t##$)OO223DEOO22:>r(   c                 `   || _         | j                  j                  |      }| j                  j	                  |       d}| j
                  D ]P  }|d   |k(  rA| j                  j                  t        j                  j                  t        |                   |dz   }R | j                          y Nr   r   r   )outputIdr  lookup_output_idr!  r&  r{  r  select_pathr   TreePathnew_from_stringr   r   )rL   r  r   r  ir#   s         r&   r  zModule.activeOutputUpdate  s     11(;v& (( 	C1v!##//0L0LSQRV0TUAA	
 	r(   c                     || _         d}| j                  D ]P  }|d   |k(  rA| j                  j                  t        j
                  j                  t        |                   |dz   }R y r  )inputIdr|  r  r  r   r  r  r   )rL   r  r   r  r#   s        r&   r  zModule.activeInputUpdate  sb     '' 	C1v!""..s||/K/KCPQF/STAA	r(   c                     | j                   j                         }|y | j                  j                  |       | j	                          y rS   )r  r.  r  r   r   )rL   r  r   defaultSinks       r&   r  zModule.defaultSinkChanged  s;    oo668  -r(   c                     | j                   j                         }|y | j                  j                  |       | j                  j                  |       y rS   )r  get_default_sourcer  r   r  )rL   r  r   defaultSources       r&   r  zModule.defaultSourceChanged	  sA    ::< .}-r(   c                 b   | j                   j                         t        j                  j                  k(  rz| j                   j                         j                         }| j                  j                  |       | j                  j                  |       | j                  j                  |       y y rS   )r  	get_stater   MixerControlStateREADYr.  rf  r   r   r   r  )rL   r   r   r   s       r&   r   zModule.setChannelMap  sz    ??$$&#*?*?*E*EE99;KKMJLL&&z2II##J/KK%%j1	 Fr(   c                 $   | j                   j                  |      }|| j                   j                         v r|j                  j                  }|dv ry || j
                  j                         v ry |t        d      }d|z  }t        | j                   j                         d||j                               | j
                  |<   | j
                  |   j                  |       | j                  j                  | j
                  |          | j                  j                  j                          | j                  j!                          n8|| j                   j#                         k(  r| j$                  j                  |       | j'                          y )N)zcinnamon-settings.pyzspeech-dispatcherzspeech-dispatcher-dummylibcanberraMuffinUnknownz%s: r\   )r  lookup_stream_idget_sink_inputsrp   r  r}  keysr   r   r  r  r   r  rT   rH   invalidate_headersru   get_event_sink_inputr  r  )rL   r  r   r   r  r   s         r&   r  zModule.streamAdded  sF   11(;T__4466<<$$D  " " 4<<,,..||TME%.t/O/O/Q),).)/)9)9);&=DLL" LL",,V4$$T\\(%;<%%88:%%'t;;==''/r(   c                     || j                   v rm| j                   |   j                         j                          | j                  j                  j                          | j                   |= | j                          y y rS   )r}  
get_parentrZ  r  rH   r$  r  )rL   r  r   s      r&   r  zModule.streamRemoved@  sa    t||#LL"--/779%%88:X& 	 $r(   c                     t        | j                        dk(  r| j                  j                  d       y | j                  j                  d       y )Nr   r  r  )r  r}  r  r	  r   s    r&   r  zModule.checkAppStateG  s7    t||!MM00AMM00?r(   r   )rU   rV   rW   r  categoryr   commentr/   r  r  r  r~  r  r  r  r  r  r  r  r  r  r  r   r  r  r  rX   r(   r&   rl  rl    s{    DH'(GD
0t*l5.
.
.#8?.2'R!@r(   rl  )"girequire_versiongi.repositoryr   r   r   r   r   r   SettingsWidgetsr	   r
   xapp.GSettingsWidgetsr]  CINNAMON_SOUNDSrs  r  r  r   r  rK  r'   r.   r*   SettingsWidgetrZ   r   r   r   r  r0  rC  r,  rl  rX   r(   r&   <module>r2     s   
   5%     5%   > > ? # '6 0 
 #$/[g  |K  L"#/[h  |L  M%&/[h  |L  M%&/[e  |I  J!"/[g  |K  L$%/[j  |N  O$%/[j  |N  O&'/[l  |P  Q-./[f  |J  K$%/[f  |J  K#$/[h  |L  M'(/[n  |R  S+,:Q[n  |R  S$ |_*>QUVW}*?QUVW~*@QUVW{^*CQUVW|_*DQUVW}*EQUVW{^*;QUVW{^*CQUWX|_*DQUWXN#sww #J@<^ @<DoA oAb0: 0:d)'^ )'V'Hn 'HRk& kF*

 F*Pe@ e@r(   