[pkg-kde-commits] rev 2762 - trunk/packages/kdemultimedia/debian/patches

Christopher Martin chrsmrtn at costa.debian.org
Sat Jan 7 17:38:01 UTC 2006


Author: chrsmrtn
Date: 2006-01-07 17:38:00 +0000 (Sat, 07 Jan 2006)
New Revision: 2762

Added:
   trunk/packages/kdemultimedia/debian/patches/01_kdemultimedia_branch_r495293.diff
Log:
New kdemultimedia branch pull.


Added: trunk/packages/kdemultimedia/debian/patches/01_kdemultimedia_branch_r495293.diff
===================================================================
--- trunk/packages/kdemultimedia/debian/patches/01_kdemultimedia_branch_r495293.diff	2006-01-07 16:50:06 UTC (rev 2761)
+++ trunk/packages/kdemultimedia/debian/patches/01_kdemultimedia_branch_r495293.diff	2006-01-07 17:38:00 UTC (rev 2762)
@@ -0,0 +1,2399 @@
+#DPATCHLEVEL=0
+--- noatun/modules/voiceprint/voiceprint.plugin	(revision 490463)
++++ noatun/modules/voiceprint/voiceprint.plugin	(revision 495293)
+@@ -46,6 +46,7 @@
+ Comment[cy]=Gweledydd argraff lais
+ Comment[da]=En voiceprint-visualisering
+ Comment[de]=Klangvisualisierung
++Comment[el]=Μια αναπαράσταση αποτυπώματος φωνής
+ Comment[en_GB]=A voiceprint visualiser
+ Comment[es]=Un visualizador de huellas de voz
+ Comment[et]=Signaali visualiseerimise plugin
+--- noatun/modules/winskin/winskin.plugin	(revision 490463)
++++ noatun/modules/winskin/winskin.plugin	(revision 495293)
+@@ -70,6 +70,7 @@
+ Comment[cy]=Llwythydd Crwyn Winamp
+ Comment[da]=En Winamp-forsideindlæser
+ Comment[de]=Import von Winamp-Optiken (Skins)
++Comment[el]=Φόρτωση θεμάτων Winamp
+ Comment[es]=Un cargador de pieles de Winamp
+ Comment[et]=Winampi rüüde laadija
+ Comment[eu]=Winamp azal kargatzailea
+--- noatun/modules/winskin/mimetypes/interface/x-winamp-skin.desktop	(revision 490463)
++++ noatun/modules/winskin/mimetypes/interface/x-winamp-skin.desktop	(revision 495293)
+@@ -13,7 +13,7 @@
+ Comment[cy]=Croen Winamp cywasgedig
+ Comment[da]=Komprimeret Winamp-forside
+ Comment[de]=Komprimierte Winamp-Oberfläche
+-Comment[el]=Συμπιεσμένο Winamp Skin
++Comment[el]=Συμπιεσμένο θέμα Winamp
+ Comment[es]=Piel comprimida de Winamp
+ Comment[et]=Winampi pakitud kest (skin)
+ Comment[eu]=Winamp azal konprimitua
+--- noatun/modules/kjofol-skin/kjofolui.plugin	(revision 490463)
++++ noatun/modules/kjofol-skin/kjofolui.plugin	(revision 495293)
+@@ -19,6 +19,7 @@
+ Comment[cy]=Llwythydd croen ar gyfer crwyn K-Jofol
+ Comment[da]=Forsideindlæser for K-Jöfol-forsider
+ Comment[de]=Importprogramm für K-Jöfol-Optiken (Skins)
++Comment[el]=Φόρτωση θέματος για θέματα K-Jofol
+ Comment[es]=Cargador de pieles de K-Jofol
+ Comment[et]=K-Jöfoli rüüde laadija
+ Comment[eu]=Azal kargatzailea K-Jöfol azalentzat
+--- noatun/modules/infrared/infrared.plugin	(revision 490463)
++++ noatun/modules/infrared/infrared.plugin	(revision 495293)
+@@ -67,6 +67,7 @@
+ Comment[cy]=Rheoli Noatun efo'ch Rheolydd Isgoch
+ Comment[da]=Kontrollér Noatun med din fjernbetjening
+ Comment[de]=Kontrollieren Sie Noatun mit Ihrer Infrarot-Fernbedienung
++Comment[el]=Έλεγχος του Noatun με το IR τηλεκοντρόλ σας
+ Comment[es]=Controle Noatun con su mando a distancia
+ Comment[et]=Noatun juhtimine IR puldi abil
+ Comment[eu]=Kontrolatu Noatun urruneko infragorriekin
+--- noatun/modules/kaiman/kaiman.plugin	(revision 490463)
++++ noatun/modules/kaiman/kaiman.plugin	(revision 495293)
+@@ -70,7 +70,7 @@
+ Comment[cy]=Rhyngwyneb croen GQMpeg wedi'i droi o Kaiman
+ Comment[da]=En GQMpeg-forsidegrænseflade porteret fra Kaiman
+ Comment[de]=Eine Schnittstelle zur GQMpeg-Optik, aus Kaiman übernommen
+-Comment[el]=Ένα περιβάλλον με βάση το skin GQMpeg προσαρμοσμένο από το Kaiman
++Comment[el]=Μια διασύνδεση βασισμένη στο θέμα GQMpeg προσαρμοσμένο από το Kaiman
+ Comment[eo]=GQMpeg-etosinterfaco portita de Kajmano
+ Comment[es]=Un interfaz de pieles GQMpeg portado de Kaiman
+ Comment[et]=Kaimanist porditud GQMpeg skinnide toetus
+--- doc/kscd/index.docbook	(revision 490463)
++++ doc/kscd/index.docbook	(revision 495293)
+@@ -14,9 +14,15 @@
+ <authorgroup>
+ 
+ <author>
++<firstname>Mike</firstname>
++<surname>McBride</surname> 
++<affiliation><address>&Mike.McBride.mail;</address></affiliation>
++</author>
++
++<author>
+ <firstname>Jonathan</firstname>
+ <surname>Singer</surname>
+-<affiliation><address><email>jsinger at leeta.net</email></address></affiliation>
++<affiliation><address>&Jonathan.Singer.mail;</address></affiliation>
+ </author>
+ 
+ <author>
+@@ -30,7 +36,7 @@
+ <firstname>Bernd</firstname>
+ <othername>Johannes</othername>
+ <surname>Wuebben</surname>
+-<affiliation><address><email>wuebben at kde.org</email></address></affiliation>
++<affiliation><address>&Bernd.Johannes.Wuebben.mail;</address></affiliation>
+ <contrib>Developer</contrib>
+ </othercredit>
+ 
+@@ -51,7 +57,7 @@
+ <othercredit role="reviewer">
+ <firstname>Lauri</firstname>
+ <surname>Watts</surname>
+-<affiliation><address><email>lauri at kde.org</email></address></affiliation>
++<affiliation><address>&Lauri.Watts.mail;</address></affiliation>
+ <contrib>Reviewer</contrib>
+ </othercredit>
+ <!-- TRANS:ROLES_OF_TRANSLATORS -->
+@@ -60,17 +66,22 @@
+ <copyright>
+ <year>2000</year><year>2004</year>
+ <holder>J Singer</holder>
++
+ </copyright>
++<copyright>
+ 
++<year>2005-2006</year>
++<holder>Mike McBride</holder>
++</copyright>
+ <legalnotice>&FDLNotice;</legalnotice>
+ 
+ 
+-<date>2002-10-07</date>
+-<releaseinfo>1.4</releaseinfo>
++<date>2005-12-22</date>
++<releaseinfo>1.5</releaseinfo>
+ 
+ <abstract>
+ <para>&kscd; is a small, fast, <abbrev>CDDB</abbrev> enabled audio
+-<abbrev>CD</abbrev> player for &UNIX; platforms.</para>
++<abbrev>&CD;</abbrev> player for &UNIX; platforms.</para>
+ </abstract>
+ 
+ <keywordset>
+@@ -96,9 +107,9 @@
+ 
+ <para>I hope you will enjoy this &CD; player.</para>
+ 
+-<para>Bernd Johannes Wuebben</para>
++<para>&Bernd.Johannes.Wuebben;</para>
+ 
+-<para><email>wuebben at kde.org</email></para>
++<para>&Bernd.Johannes.Wuebben.mail;</para>
+ 
+ <sect1 id="supported-platforms">
+ <title>Supported Platforms</title>
+@@ -106,7 +117,7 @@
+ <para>&kscd; explicitly supports the following platforms:</para>
+ 
+ <itemizedlist>
+-<listitem><para>Linux</para></listitem>
++<listitem><para>&Linux;</para></listitem>
+ <listitem><para>FreeBSD</para></listitem>
+ <listitem><para>NetBSD</para></listitem>
+ <listitem><para>BSD386</para></listitem>
+@@ -216,7 +227,7 @@
+ <para>The menu provides several tools to help you search for information about the artist on the
+ Internet. You can find out about performance dates, purchase information, and
+ other information by pressing this button and choosing the appropriate option in
+-the pop-up menu that appears.</para>
++the popup menu that appears.</para>
+ <para>This menu also allows you to open this help document, report bugs, learn more 
+ about &kscd; and &kde; and to quit &kscd;.</para>
+ </sect2>
+@@ -245,19 +256,18 @@
+ 
+ 
+ <sect2>
+-<title>The Volume button</title>
++<title>The Volume slider</title>
+ 
+ <screenshot>
+-<screeninfo>The Volume button</screeninfo>
++<screeninfo>The Volume slider</screeninfo>
+ <mediaobject>
+ <imageobject><imagedata fileref="kscd9.png" format="PNG"/></imageobject>
+ <textobject><phrase>The Volume slider</phrase></textobject>
+ </mediaobject>
+ </screenshot>
+ 
+-<para> This button pops up a slider which controls the volume of the audio output 
+-of the &CD;. Right is
+-louder, left is quieter. If you are playing your &CD; through your sound card,
++<para> This slider controls the volume of the audio output 
++of the &CD;. Moving it to the right makes the music louder, left makes it quieter. If you are playing your &CD; through your sound card,
+ the sound card mixer will affect the playback volume as well.</para>
+ </sect2>
+ 
+@@ -273,8 +283,8 @@
+ </mediaobject>
+ </screenshot>
+ 	    
+-<para>This combo box shows you the current track and lets you directly select
+-a track to play. </para>
++<para>This combo box shows you the current track number, the name of the track and the time (in minutes and seconds).  You can use this drop down box to directly select
++any track on the &CD;.  </para>
+ </sect2>
+ 
+ </sect1>
+@@ -285,31 +295,35 @@
+ <sect1 id="configuration-intro">
+ <title>The primary configuration window</title>
+ 
+-<para>The primary configuration window for &kscd; is a tabbed dialog with three
++<para>You configure &kscd; by clicking on the <guibutton>Extras</guibutton> button.  This will bring up a menu, select 
++<guilabel>Configure &kscd;...</guilabel>.  This will open a new window.</para>
++<para>The primary configuration window for &kscd; is divided into two 
+ major sections. </para>
+ 
+ <itemizedlist>
+ <listitem><para><link linkend="kscd-options-tab"><guilabel>CD
+-Player</guilabel></link></para></listitem>
+-<listitem><para><link linkend="freedb-tab"><guilabel>Freedb Lookup</guilabel></link></para></listitem>
+-<listitem><para><link linkend="smtp-options"><guilabel>Freedb Submit</guilabel>
+-</link></para></listitem>
++Player</guilabel></link> to determine the look and behavior of &kscd;.</para></listitem>
++<listitem><para><guilabel>CDDB</guilabel> which is used to configure the CDDB lookup features of &kscd;.</para></listitem>
+ </itemizedlist>
++
++<para>You can switch between these two sections using the icons on the left side of the dialog.</para>
+ </sect1>
+ 
+ <sect1 id="kscd-options-tab">
+-<title>The <guilabel>CD Player</guilabel> tab</title>
++<title>The <guilabel>CD Player</guilabel> dialog</title>
+ 
+ <screenshot>
+-<screeninfo>The <guilabel>CD Player</guilabel> tab</screeninfo>
++<screeninfo>The <guilabel>CD Player</guilabel> dialog</screeninfo>
+ <mediaobject>
+ <imageobject><imagedata fileref="kscd12.png" format="PNG"/></imageobject>
+-<textobject><phrase>The <guilabel>KSCD Configuration</guilabel> tab</phrase></textobject>
++<textobject><phrase>The <guilabel>KSCD Configuration</guilabel> dialog</phrase></textobject>
+ </mediaobject>
+ </screenshot>
+ 
+-<para>The <guilabel>LCD Color</guilabel> and <guilabel>Background
+-Color</guilabel> fields show the color selected for the foreground and
++<para>The <guilabel>LCD font:</guilabel> text box lists the currently selected font to display all information in the &kscd; status display.  To change the font, click the <guibutton>Choose...</guibutton> button.</para>
++
++<para>The <guilabel>LCD color:</guilabel> and <guilabel>Background
++color:</guilabel> fields show the color selected for the foreground and
+ background of the status display. Press the color bars to change
+ these colors.</para>
+ 
+@@ -323,7 +337,7 @@
+ non-local systems if you want to submit <acronym>CDDB</acronym>
+ entries, especially if you access the Internet through a dial-up
+ connection. Check the documentation for your &Linux; distribution for
+-details. Some Linux distributions that use sendmail to deliver e-mail
++details. Some Linux distributions that use sendmail to deliver email
+ require only that you enter your mail host into the
+ <option>&quot;Smart&quot; relay host</option> field in
+ <filename>/etc/sendmail.cf</filename>. In addition, the
+@@ -342,25 +356,35 @@
+ <option><replaceable>openURL %s</replaceable></option></userinput>.</para>
+ -->
+ 
+-<para><guilabel>Show icon in system tray</guilabel> causes a &kscd; control to
++<para>Placing a mark in the checkbox labeled <guilabel>Show icon in system tray</guilabel> causes a &kscd; control to
+ appear in the &kicker; panel.</para>
+ 
++<para>Placing a mark in the checkbox labeled <guilabel>Show track announcement</guilabel> causes a small information window to appear on 
++top of the kicker window each time the &CD; track changes.  This window will automatically disappear in 5 seconds.</para>
++
++<screenshot>
++<screeninfo>Sample track announcement</screeninfo>
++<mediaobject>
++<imageobject><imagedata fileref="kscdannounc.png" format="PNG"/></imageobject>
++<textobject><phrase>Sample track announcement</phrase></textobject>
++</mediaobject>
++</screenshot>
++
++
+ <para>Set the <guilabel>Skip interval</guilabel> box to the desired number of 
+ seconds to move ahead or behind when the <guibutton>forward skip</guibutton> 
+ or <guibutton>reverse skip</guibutton> buttons in the Control Panel are pressed.</para>
+ 
+-<para><guilabel>Autoplay when CD inserted</guilabel> causes &CD; play to
+-start when the tray is closed, with no need to press the
++<para><guilabel>Autoplay when CD inserted</guilabel> causes &kscd; to start playing the &CD; 
++when the tray is closed, with no need to press the
+ <guibutton>Play</guibutton> button.</para>
+ 
+ <para><guilabel>Eject CD when finished playing</guilabel> causes the
+-&CD; to be ejected when playback ends.</para>
++&CD; to be automatically ejected when playback ends.</para>
+ 
+ <para><guilabel>Stop playing CD on exit</guilabel> causes &CD; playback to stop
+ when &kscd; is closed.</para>
+ 
+-
+-
+ <para>The <guilabel>CD-ROM Device</guilabel> field contains the name
+ of the &CD-ROM; device to be used to play audio &CD;s. The default
+ value is <filename>/dev/cdrom</filename>. The permissions on this
+@@ -369,8 +393,30 @@
+ superuser privileges and can be done from the command line, or in the
+ Super User Mode of &konqueror;.</para>
+ 
++<note><para>Before we discuss the options that follow, it is important to understand that there are two 
++ways that personal computers can play a &CD;.</para>
++
++<para>The first method (which &kscd; refers to as direct digital playback), is performed by reading the digital data from the 
++&CD; using Digital Audio Extraction (DAE).  This data is sent to your machines CPU which converts the digital data to sound.  This method requires 
++a &CD; drive that is capable of DAE (most new drives are) and it requires some CPU processing time to generate the sounds you hear.</para>
++
++<para>The second method uses the internal circuitry available on most &CD; drives to read the data and generate the sounds you will hear 
++without using your computers CPU.  This data is transmitted by a dedicated cable directly to the sound card in your computer.  This method requires 
++less CPU proccessing time, but it does require that the dedicated cable be connected inside your computer.  Not all computers have this connection.</para></note>
++
++<para>The checkbox labeled <guilabel>Use direct digital playback</guilabel> determines which method &kscd; uses to read the audio tracts.  If there is a mark in the checkbox, the first method is used.  If there is no mark in the checkbox, the second method is utilized.</para>
++
++<para>If you have selected direct digital playback, a dropdown box labeled <guilabel>Select audio backend:</guilabel> will let you select which 
++sound backend the digital information should be sent to.  The contents of the dropdown box will vary depending on your system. 
++Most users should select <guilabel>arts</guilabel>.  You can also select the device the audio backend uses by entering the device location in 
++the text box labeled <guilabel>Select audio device:</guilabel>.  A full discussion of audio devices and audio backends is beyond the scope of this manual.</para>
++
++<para>If a mark is placed in the checkbox labeled <guilabel>Allow encoding selection</guilabel>, you can select the text encoding for the results of a CDDB request.</para>
++<tip><para>The standard describes CDDB results as being strictly Latin 1.  If you are not having problems with your CDDB information, leave this box unchecked.</para></tip>
++
++
+ <para>The <guibutton>Help</guibutton> button opens the &kscd; help contents
+-page. <guibutton>OK</guibutton> saves the current settings and exits;
++page. The <guibutton>Defaults</guibutton> button restores the default values of all entries in this dialog; <guibutton>OK</guibutton> saves the current settings and exits;
+ <guibutton>Apply</guibutton> saves the current settings without exiting;
+ <guibutton>Cancel</guibutton> exits without saving. </para>
+ </sect1>
+@@ -393,33 +439,27 @@
+ are performed. Setting <guilabel>Cache only</guilabel> means that only information already 
+ on your computer will be used. <guilabel>Cache and remote</guilabel> will look up 
+ information you do not already have while <guilabel>Remote only</guilabel> looks up 
+-every disc over the Internet.  The time allowed before the
+-lookup attempt times out can be set.</para>
++every disc over the Internet.</para>
+ 
+ 
+-<para>The <guilabel>CDDB Server:</guilabel> list box allows you to specify your 
+-freedb server. Enter a server address and port number. Select an entry from this list and it will
+-appear in the text field above the selection box. The form of connection (CDDB or HTTP) can also 
+-be set. (You are unlikely to want to change any of this from the default.) The <guilabel>Cache 
+-Folders:</guilabel> text field lets you choose the folder where you want 
+-<acronym>CDDB</acronym> entries to be stored locally.</para>
++<para>The <guilabel>CDDB Server:</guilabel> section determines which CDDB mirror site is used by &kscd; to 
++get album information.  You can enter a server name, port number and protocol using the text boxes and drop 
++down boxes or you can click the <guibutton>Show Mirror List</guibutton> button.  Clicking this button will 
++open a new window with a list of CDDB mirrors and their locations.  Simply select the server you want from 
++the list and click <guibutton>OK</guibutton>.</para>
+ 
+-<!--
+-<para>The <guilabel>Send freedb submissions to:</guilabel> field contains the
+-e-mail address to which to submit <abbrev>CDDB</abbrev> entries. The default address
+-is <email>freedb-submit at freedb.org</email>. As of version 0.8,
+-<acronym>CDDB</acronym> entries from &kscd; are accepted for inclusion in the
+-database. Enter servers manually by entering the address in the upper box and hitting the
+-<guiicon>+</guiicon> button. Hit the <guiicon>-</guiicon> button to delete the selected entry
+-from the list. The <guibutton>Defaults</guibutton> button restores all settings
+-to the default values.The <guibutton>Help</guibutton> button opens the &kscd;
+-help home page (this document).</para>
++<para>The section labeled <guilabel>Cache locations</guilabel> lets you determine where &kscd; saves CDDB information 
++on your computer.  To add a folder, enter the folder location in the text box at the top of the section and click 
++<guibutton>Add</guibutton>.  You can also select a 
++folder by clicking on the blue file folder to the right of the text box. To delete a folder, click on the folder name 
++once with the &LMB; and click <guibutton>Remove</guibutton>. You can change the order that &kscd; searches the folders by 
++clicking on the folder name and clicking on the <guibutton>Move Up</guibutton> and <guibutton>Move Down</guibutton> buttons.</para>
+ 
+ <para>The <guibutton>Help</guibutton> button opens the &kscd; help contents
+-page. <guibutton>OK</guibutton> saves the current settings and exits;
++page. The <guibutton>Defaults</guibutton> button restores the default values of all entries in this dialog; <guibutton>OK</guibutton> saves the current settings and exits;
+ <guibutton>Apply</guibutton> saves the current settings without exiting;
+ <guibutton>Cancel</guibutton> exits without saving. </para>
+--->
++
+ </sect1>
+ 
+ <sect1 id="smtp-options">
+@@ -433,33 +473,40 @@
+ </screenshot>
+ 
+ <para>The freedb Submit tab sets up connection to a mail
+-server to submit new <acronym>CDDB</acronym> entries. This is useful
+-if you do not have your own system configured as a server. Check
+-<guilabel>Enable submission via SMTP</guilabel> to use this
+-feature.</para>
++server or a web server to submit new <acronym>CDDB</acronym> entries. This is useful
++if you do not have your own system configured as a server. </para>
+ 
+-<para>You may choose to <guilabel>Use email addresses from control
+- center</guilabel> if you wish.  If you would like to open the
+- &kcontrol; module to configure this email address, click on the text
+- labelled <guilabel>Open the email address control panel</guilabel>.
+- Changing the address there will change the default address for all
+- &kde; applications that use this setting, not just for &kscd;, so do
+- this with caution.</para>
+- 
+-<para>Otherwise, provide your preferred email profile in the 
+-<guilabel>Use the following email addresses</guilabel> box. Enter your 
+-email address, a reply to address, if desired, and the address of the
+-<acronym>SMTP</acronym> server server in the field labelled
+-<guilabel>Host:</guilabel>. You may also need to provide a username for 
+-authentication, and the port number (typically
+-<userinput>25</userinput>) in the field labelled
+-<guilabel>Port:</guilabel>.</para>
++<para>If you plan to submit a CDDB entry, first you must decide between submitting between HTTP 
++and submitting the entry as an email (via SMTP).  </para>
+ 
++<tip><para>It is simpler to submit new entries using &HTTP;.  Some firewalls block this traffic.  If your 
++firewall prevents you from sending new entries using &HTTP;, you can use SMTP.</para></tip>
+ 
++<para>First select either <guilabel>&HTTP;</guilabel> or <guilabel>SMTP (Email)</guilabel> to determine which 
++protocol to use.</para>
++
++<sect2 id="http-options">
++<title>Using &HTTP; to send CDDB information</title>
++<para>You can enter a server name or port number in the text boxes provided.  If 
++you want to send this information to the international servers, you do not need to 
++change anything.</para>
++</sect2>
++
++<sect2 id="smtp2-options">
++<title>Using SMTP (Email) to send CDDB information</title>
++<para>To prepare to submit information using email, enter your email address in the 
++textbox labeled <guilabel>Reply-To:</guilabel>, your email server in the textbox 
++labeled <guilabel>SMTP-server:</guilabel> and select the port number in the dropdown box 
++labeled <guilabel>Port:</guilabel>.</para>
++<para>If you need to use a password to send email using the email server, place a mark in the 
++checkbox labeled <guilabel>Server needs authentication</guilabel> and enter your 
++username in the textbox labeled <guilabel>Username:</guilabel>.</para>
++
+ <para>The <guibutton>Help</guibutton> button opens the &kscd; help contents
+-page. <guibutton>OK</guibutton> saves the current settings and exits;
++page. The <guibutton>Defaults</guibutton> button restores the default values of all entries in this dialog; <guibutton>OK</guibutton> saves the current settings and exits;
+ <guibutton>Apply</guibutton> saves the current settings without exiting;
+ <guibutton>Cancel</guibutton> exits without saving. </para>
++</sect2>
+ </sect1>
+ 
+ 
+@@ -469,10 +516,10 @@
+ <title>The <guilabel>CD Database Editor</guilabel></title>
+ 
+ <screenshot>
+-<screeninfo>The CD Database Editor</screeninfo>
++<screeninfo>The &CD; Database Editor</screeninfo>
+ <mediaobject>
+ <imageobject><imagedata fileref="kscd13.png" format="PNG"/></imageobject>
+-<textobject><phrase>The CD Database Editor</phrase></textobject>
++<textobject><phrase>The &CD; Database Editor</phrase></textobject>
+ </mediaobject>
+ </screenshot>
+ 
+@@ -515,7 +562,7 @@
+ linkend="freedb-tab"><guilabel>freedb</guilabel> tab</link> of the &kscd;
+ Configuration window.</para>
+ 
+-<para>The <guilabel>Total Time:</guilabel> display shows the total play time of
++<para>The <guilabel>Length:</guilabel> display shows the total play time of
+ the &CD;.</para>
+ 
+ <para>Press the <guibutton>Fetch Info</guibutton> button to download 
+@@ -538,8 +585,7 @@
+ </screenshot>
+ 
+ <para>When the <guilabel>Show icon in system tray</guilabel> box is checked, a
+-small &kscd; applet is also displayed in the <application>KDE
+-panel</application>. Unlike the main &kscd; window, this applet is available on
++small &kscd; applet is also displayed in the &kicker;. Unlike the main &kscd; window, this applet is available on
+ any desktop. <mousebutton>Right</mousebutton> click on the applet to pop up a
+ menu to control &CD; playback. A <mousebutton>left</mousebutton> click on the
+ applet hides the main &kscd; window. If the main window is hidden, a second
+@@ -603,6 +649,160 @@
+ 
+ </chapter>
+ 
++<chapter id="troubleshooting">
++<title>Troubleshooting the CD player</title>
++
++<para>This section of the manual provides a step by step guide to troubleshooting your CD drive if the CD player will not play an audio &CD;</para>
++
++<sect1 id="ts-begin">
++<title>Begin troubleshooting</title>
++<para>To begin, place an audio CD in your CD drive.  Close the CD drive door and press play on the &kscd; window.  Watch the CD drive on your computer and select the link below that best describes the problem.</para>
++<para>When I pressed <guilabel>Play</guilabel>:</para>
++<itemizedlist>
++<listitem><para><link linkend="ts-errorbox">An error box appeared</link></para></listitem>
++<listitem><para><link linkend="ts-playing">No error box appeared</link></para></listitem>
++</itemizedlist>
++</sect1>
++<sect1 id="ts-playing">
++<title>I did not get an error box, but no sound is coming out of my speakers</title>
++<para>First, we will check to make sure the volume is turned up in &kscd;.</para>
++<para>Near the upper right corner of the &kscd; window, locate the volume slider.  The volume slider looks like this:</para>
++<screenshot>
++<screeninfo>The Volume slider</screeninfo>
++<mediaobject>
++<imageobject><imagedata fileref="kscd9.png" format="PNG"/></imageobject>
++<textobject><phrase>The Volume slider</phrase></textobject>
++</mediaobject>
++</screenshot>
++<para>Click once on the vertical yellow bar and drag the bar all the way to the right end of the slider.</para>
++<para>If you can hear music now, the problem is solved.  If you still can not hear the music, click 
++<link linkend="ts-kmixlevels">here</link> to continue.</para>
++</sect1>
++<sect1 id="ts-kmixlevels">
++<title>Determining if the mixer volume levels are up</title>
++<para>The next step is to determine if &kmix; volume levels are appropriate.</para>
++<note><para>&kmix; is a sound mixer panel that is included in &kde;.  This mixer allows you to adjust the relative volume levels of many sound components.</para></note>
++<para>To start &kmix;, select 
++<menuchoice><guimenu>K-Button</guimenu><guimenuitem>Multimedia</guimenuitem>
++<guimenuitem>&kmix;</guimenuitem></menuchoice>.</para>
++<para>Once &kmix; has started, you will be presented with a new window with a number of volume sliders.  Depending on the configuration, the sliders may have lables, or the labels may be hidden.  If you do not see any labels for the sliders, you should make the labels visible before continuing.  To make the labels visible, select 
++<menuchoice><guimenu>Settings</guimenu><guimenuitem>Configure &kmix;...</guimenuitem></menuchoice> from the &kmix; window.  This will open a small window with a few check boxes. To 
++turn the labels on, place a mark in the checkbox labeld <guilabel>Show labels</guilabel> and click <guibutton>OK</guibutton>.</para>
++<para>Each slider controls the volume of a different audio device.  There are two parts to each device that may need to be altered.  If you look at a slider, there is a green 
++light above each slider.  If you click on this light you can toggle between bright green and dark green.  If the light is dark green, that audio device is muted and will not produce any sound.  If the light is light green, the device is not muted.  Once you have verified that the device is not muted, you increase the volume of the device by draging the yellow bar up the slider.  The volume of an audio device is decreased by dragging the yellow bar down the slider.</para>
++<note><para>Some sliders will have a red light as well.  This light is not important for playback of compact discs so you can ignore them for now.</para></note>
++<para>Click on the tab labeled <guilabel>Output</guilabel>.</para>
++<para>Please make sure the sliders are not muted (bright green light) and that the yellow bar is all the way at the top of the slider for the following audio devices:</para>
++<itemizedlist>
++<listitem><para><guilabel>Master</guilabel></para></listitem>
++<listitem><para><guilabel>Master Mono</guilabel></para></listitem>
++<listitem><para><guilabel>PC Speaker</guilabel></para></listitem>
++<listitem><para><guilabel>PCM</guilabel></para></listitem>
++</itemizedlist>
++
++<para>If you still do not hear the &CD;, click on the tab labeled <guilabel>Input</guilabel></para>
++<para>Now make sure the slider labeled <guilabel>CD</guilabel> is not muted (bright green light) and that the yellow bar is all the way at the top of the slider.</para>
++<para>If you can hear the &CD; now, you can stop troubleshooting.  If not, click <link linkend="ts-othersounds">here</link> to continue</para>
++</sect1>
++<sect1 id="ts-othersounds">
++<title>Determine if other sounds are audible on my computer</title>
++<para>In this section, we are going to test to see if other types of sounds are audible on your computer. We will do this by playing a sound over the speakers that is stored on your hard drive.  </para>
++<para>First we must locate an appropriate test file.  This will be done using the command line.</para>
++<para>Select <menuchoice><guimenu>K-Button</guimenu><guimenuitem>System</guimenuitem>
++<guimenuitem>&konsole;</guimenuitem></menuchoice>.  A new window will appear with a command prompt.  At the prompt type:</para>
++<para><screen><prompt>$</prompt> <userinput><command>locate -n1 KDE_Window_Open.wav</command></userinput></screen></para>
++<para>When you press return, there will be a pause, and a single line with a file location will be printed below your typed command.</para>
++<para><screen><prompt>$</prompt> <userinput><command>locate -n1 KDE_Window_Open.wav</command></userinput>
++/usr/local/kde/share/sounds/KDE_Window_Open.wav</screen></para>
++
++<para>Now you are going to ask &kde; to play this short sound file. Type the text <command>noatun</command> followed by a space. Then copy the full location of the file you just located with the previous command.  For example: </para>
++<para><screen><prompt>$</prompt> <userinput><command>noatun /usr/local/kde/share/sounds/KDE_Window_Open.wav</command></userinput></screen></para>
++<para>If you heard a short sound, <link linkend="ts-othersoundsplay">click here</link>.</para>
++<para>If you did not hear a short sound, your sound system is not configured correctly.  Click <link linkend="ts-noothersounds">here</link> to proceed.</para>
++</sect1>
++
++<sect1 id="ts-noothersounds">
++<title>The test sound failed to play</title>
++<para>So far, we have verified that the volume on &kscd; and all the mixer levels in &kmix; are set correctly.  We have also sent a test sound and you could not hear the sound played.  This suggests the trouble is not with &kscd; but rather with your sound configuration.</para>
++<note><para>Please make sure the &CD; is still playing in your CD drive.</para></note>
++<para>First, we need to make sure your speakers are plugged in and that the volume of your speakers is set appropriately.  If you are using external speakers, please check the following:</para>
++<itemizedlist>
++<listitem><para>Please make sure the speakers are connected to your computer appropriatly (see your user manual if necessary).</para></listitem>
++<listitem><para>If your speakers require batteries, please replace the batteries with fresh batteries.</para></listitem>
++<listitem><para>If your external speakers plug into the wall, please make sure they are plugged in to the socket, the power cord is securly plugged into the back of the speakers and the wall outlet is working.</para></listitem>
++<listitem><para>If your speakers have a power button, please make sure the power is turned on.</para></listitem>
++<listitem><para>If your speakers have a volume knob, please make sure the volume is turned half way between off and maximum.</para></listitem>
++</itemizedlist>
++
++<para>If your speakers are part of you computers case, please check to see if your speakers have a volume knob. If they do make sure the volume is turned half way between off and maximum.</para>
++
++<para>If you have checked all of this, you probably need detailed help on getting the sound working on your computer. A full discussion of troubleshooting the sound system is beyond the scope of this manual and the user is referred to other internet sources. Some potential sources of information are:</para>
++
++<itemizedlist>
++<listitem><para><ulink url="http://www.tldp.org/HOWTO/Sound-HOWTO/index.html">Linux Sound HOWTO</ulink>.</para></listitem>
++<listitem><para>The website of your distribution will probably have a user forum for asking questions.</para></listitem>
++<listitem><para>Post a question to a Usenet newsgroup like comp.os.linux</para></listitem>
++<listitem><para>Use a search engine to locate others who have encountered similar problems as you.</para></listitem>
++</itemizedlist>
++</sect1>
++
++<sect1 id="ts-othersoundsplay">
++<title>The test sound played, but I can not hear the &CD;</title>
++<para>So far, we have verified that the volume on &kscd; and all the mixer levels in &kmix; are set correctly.  We have also played a test sound and you were able to  hear the sound played.  This suggests the trouble is limited to &kscd; or the &CD;.</para>
++<para>Check to make sure the &CD; is playable.  If this is a new &CD;, put it in another CD player (preferrably not located in a computer) and make sure the &CD; is playable in that device.  If it is playable in another device, continue <link linkend="ts-ddpback">here</link>.</para>
++</sect1>
++
++<sect1 id="ts-ddpback">
++<title>Try using direct digital playback</title>
++<para>There are two 
++ways that personal computers can play a &CD;.</para>
++
++<para>The first method (which &kscd; refers to as direct digital playback), is performed by reading the digital data from the 
++&CD; using Digital Audio Extraction (DAE).  This data is sent to your machines CPU which converts the digital data to sound.  This method requires 
++a &CD; drive that is capable of DAE (most new drives are) and it requires some CPU processing time to generate the sounds you hear.</para>
++
++<para>The second method uses the internal circuitry available on many &CD; drives to read the data and generate the sounds you will hear 
++without using your computers CPU.  This data is transmitted by a dedicated cable directly to the sound card in your computer.  This method requires 
++less CPU proccessing time, but it does require that the dedicated cable be connected inside your computer.  Not all computers have this connection.</para>
++
++<para>&kscd; defaults to the second method of playback.  The next step in troubleshooting your &CD; problems is to enable direct digital playback. To do this begin by clicking on the button labeled <guibutton>Stop</guibutton> on the &kscd; window. This will stop any attempt to play the &CD; for now.</para>
++
++<para>Now click on the button labeled <guibutton>Extras</guibutton>.  This will open a small menu.  Select <guilabel>Configure &kscd;...</guilabel>.  This will open a new dialog box.</para>
++<para>Click the icon labeled <guilabel>CD Player</guilabel> on the left side of the dialog box.</para>
++<para>Place a mark in the checkbox labeled <guilabel>Use direct digital playback</guilabel>.</para>
++<para>Click <guibutton>OK</guibutton>.  </para>
++<para>Now click <guibutton>Play</guibutton> in the &kscd; window and see if the &CD; begins to play correctly.</para>
++
++<para>If you still can not hear the music on the &CD;, your problem requires specific knowledge of your system and the problems you encounter.  The reader is referred to many good internet resources for this information.  Please consider finding help in one of the following ways:</para>
++
++<itemizedlist>
++<listitem><para>The website of your distribution will probably have a user forum for asking questions.</para></listitem>
++<listitem><para>Post a question to a Usenet newsgroup like comp.os.linux or an IRC channel for users of your operating system</para></listitem>
++<listitem><para>Use a search engine to locate others who have encountered similar problems as you.</para></listitem>
++</itemizedlist>
++
++</sect1>
++
++
++<sect1 id="ts-errorbox">
++<title>An error box appeared</title>
++<para>Probably the most common error boxes seen is this one:</para>
++<screenshot>
++<screeninfo>Error dialog</screeninfo>
++<mediaobject>
++<imageobject><imagedata fileref="kscd19.png" format ="PNG"/></imageobject>
++<textobject><phrase>Error dialog</phrase></textobject>
++</mediaobject>
++</screenshot>
++
++<para>Information about fixing this dialog box is available in the <link linkend="questions-and-answers">Questions and 
++answers</link> section of this manual.</para>
++
++<para>If you recieve another error box, you should post the text from the error box on a forum for your distribution or enter this text in a search engine such 
++as <ulink url="http://www.google.com">Google</ulink>.</para>
++</sect1>
++</chapter>
++
+ <chapter id="questions-and-answers">
+ <title>Questions and answers</title>
+ 
+@@ -646,7 +846,7 @@
+ </qandaentry>
+ 
+ <qandaentry> 
+-<question><para>I can't get the <acronym>CDDB</acronym> to work. Can I get any
++<question><para>I can not get the <acronym>CDDB</acronym> to work. Can I get any
+ detailed information about what may be going wrong?</para></question> 
+ <answer><para>If you experience trouble with the <acronym>CDDB</acronym>
+ functionality try to starting &kscd; from the command line with the
+@@ -658,8 +858,8 @@
+ <chapter id="credits-and-license">
+ <title>Credits and licenses</title>
+ 
+-<para>&kscd; Copyright 1997,1998 Bernd Johannes Wuebben
+-<email>wuebben at kde.org</email>wuebben></para>
++<para>&kscd; Copyright 1997,1998 &Bernd.Johannes.Wuebben; 
++&Bernd.Johannes.Wuebben.mail;</para>
+ 
+ <para>&kscd; contains code from: </para>
+ <itemizedlist>
+@@ -667,6 +867,7 @@
+ Steven Grimm <email>koreth at hyperion.com</email></para></listitem>
+ </itemizedlist>
+ 
++
+ <para>Special thanks to Ti Kan and Steve Scherf, the inventors of the
+ <acronym>CDDB</acronym> database concept. Visit <ulink
+ url="http://www.cddb.com/">http://ww.cddb.com</ulink> for more information on
+@@ -675,8 +876,12 @@
+ <para>A very special thank you also to David White who wrote the original &kscd;
+ help documention. Great Job David!</para>
+ 
+-<para>Documentation updated for KDE 2.0, and copyright by Jonathan Singer
+-<email>jsinger at leeta.net.</email></para>
++<para>Documentation updated for KDE 2.0, and copyright by &Jonathan.Singer; 
++&Jonathan.Singer.mail;</para>
++
++<para>Documentation updated for KDE 3.4, and copyright by &Mike.McBride; 
++&Mike.McBride.mail;</para>
++
+ <!-- TRANS:CREDIT_FOR_TRANSLATORS -->
+ 
+ &underFDL;
+@@ -699,8 +904,7 @@
+ 
+ <para>In order to successfully compile &kscd;, you need the latest versions of
+ the KDE libraries as well as the &Qt; C++ library.  All required libraries as
+-well as &kscd; itself can be found at the &kde; &FTP; site, <ulink
+-url="ftp://ftp.kde.org/pub/kde/">ftp://ftp.kde.org/pub/kde/</ulink>.</para>
++well as &kscd; itself can be found at the &kde; &FTP; site, &kde-ftp;.</para>
+ 
+ </sect1> 
+ 
+@@ -709,8 +913,8 @@
+ 
+ &install.compile.documentation;
+ 	
+-<para>Please inform the current maintainer, Dirk Foersterling, at
+-<email>milliByte at gmlx.net</email> of any modification you had to undertake in
++<para>Please inform the current maintainer, Aaron Seigo, at
++&Aaron.J.Seigo.mail; of any modification you had to undertake in
+ order to get &kscd; to compile on your platform.</para>
+ 
+ </sect1>
+--- doc/kscd/kscdannounc.png	(revision 0)
++++ doc/kscd/kscdannounc.png	(revision 495293)
+@@ -0,0 +1,10 @@
++‰PNG
++
++   
IHDR  T   ,   µö×ú   bKGD ÿ ÿ ÿ ½§“   	pHYs     šœ   tIMEÕ*¼_  IDATxÚíœy\SWÇÏK^v„%!"û&EÚº+m¥®hkÝÚB«¢U« î8U§Z\PëP«Ž­­uÆe¬-ŸµÔj­XÜ«¢È"‹lf!	äå-óG ²$!Kéý~òÇûÜwßɹçÞß½÷—L¡P øóÁB!@ ø?@âG Hü‰@ ñ#$~ñ?nåÜ£Ge•UÏü+å2©··'
++=ñÇjÍšø+*«ÂÃ_xæݾ}‰øõ†[¿˜a’4X:KÑŒJÇ(4a` €‹ƒ³ˆí$bálÌâ%…zx´†wØ×{eä…»
…•dMÕ`À€Ï&\ÅX)Þ?˜âÅe±Xf[ˆºx´ÖþÊßÖD¥‚>úký¹»4H]ÝøÁnuUðÄ¡¨ŠÎ-¬>sKè¡™8@ìÅÇX(§ˆ@Ø´òw±Öì^ù«ÕÔîSº¼R~/?Á¨ÞŽތԙÍfI €PÔ‘K³òÎÝTì<®™ü*å/jîZùˆçDk¸-Róyh÷imA­`Â`§Ñ/r]Y†éô@cÎ
++öây¹ááÞ¬Åöü¤ò± O!†a¨/ˆçJk¸íÞ À¿suWKyo
pŠâpp¬®žnU  à ˜ÞéòÍ)úäÕ_)Îáp‘þ»‰Db×4Ø[E¬”ß5Z³ã&!¿Ìp1ŸŽôôÄê	Z­%UMŸÆc¥ÒQ!Þ•–ª«§B¼8ýÂœóŠY7‹ô4M·»Iì&÷kÕ+]Ó÷ñß5/©¹úI×|u[OŒ¸{xö÷Ÿûªç_6¾}–=“.»ÿÓ¾ã^ëî!õô
{냏okÌç½uU_Ëýã-ÅM&ï=&!«°®3*ÊŒ{sÛòýo†ÅeuÍÀ0«µo¶2iM­£ª^Ow at k¶Šß˜‡ )æÂÝz6‡÷¢?—¢i•–Rj©¾!Ž}C
$£ÔR*-¥©§ú†8€JKõ,§ø|î¥|B[O˜Íg˜Ð”íü‘~e4ûLÆ£§=×eóqñŠôÍ\Û8ëè%'…B¡P(*ŠK{ÛáÃØùÏÿ²9[ôíâs;oç½m—†%¥_XZpõäXÜ7†­7[íá?÷zN¶·’û9)Ãè#S:ã‰Ï˜nyKϪôÍõêsKó\·ñù]Ǥ­©´ y	cÔEC/‡¨ {µf»øM¨utaéàèäÌ'ÕZʸàOÕë)•–¬Ó‘1QÎÆ’'jÍ¢†ƒ9‚c·]ÕŒGI5]«6XŸrW}š´bñ¢ž{>Îi»ŒH$’ãé†ùȽ_^—Uúã¦Ùá=ä^½·þRÙä&±wåô^^î>£¦}RIÐí”·dÓè¢äÓeÆãªÜåÙ/mx:+•ç-šãÛMæ*õ<v΍¦I"‘œûbEÿp_77YdôøÌûjëåvóœ†LÝÒPû£uZ÷Ų©~^ÝÃæed›.7ï@{¡`Håæä	ÁÞÞÁ’7+IÆÔ¢“[Ø;¤‡««{[W÷§~;}A=ÍØhÍ—¿ûl␗%B.ßÙóýUû”ù;ÍV;¸ûAì¼KFxÒØ9Ÿéª3­7™¡Ôé³ßô•K=ý#Ó³ZÁp§Ïç-Yy¹åø\˜ü¹3Ž5“vÅùщm#ûEx¸»ùõ¸ò«óöjÍ(7G;ÂWØ@P*-©©o ½Z³UüÓ8=ÑP5jÆÍ«'h¥†ThH¥¦ñ»ët”ZGŽìfºª°š¹R"*¨áWky€‹:¨Ué­ÌFU—r¬lõô ßø´ÇÇ—¨)3Õ6i^=w§øԧћ§Ælѽp¯(kãÀÓVÏæ­½þz÷ƒçï”^™è|"vî)ëå­ˆZžv<ñc
++ €^;mߚԁ¦S‘cS/üüVQyeÉÍ}½ûÞ÷¦Só/:ï9}½²âá–8aòØUí–Û¥WýôÍbGŸ)Ö}ÈY9jË­î‡ÎÿVrûd¯ªmÖh7çRFî.ë•u½°ðÚÅ_ŽL9g:õÑmßï/Þ©­­nëªH>)cð½©û
++l·Ö~–;çoN³Ú–t·¾¬u^ÒCléB½¦êØö$‘ü]ëM¾ðÑÈ=Õ}³+y“)»¸¨­Ðĝêó‹ôTSw”Î9¤Ü™Öªš]q?uulêÁ¢ŠÊ¼_ºÜJµWkŠ&¹‰…xt„ŒZ×èž]Zk1ÍYÙÆä\¹f0 p·Ô°å¨>ÌÏÅÇ•baÀÅ1 ˜;V ‡®™íÖüÂQ=ÉÖ“l `¯»óA´¾„; PU\\Øçå¨æõ«r’ú&úæ.€Œþþw>½°£Ÿ¬y&F"‘Üx\ãÍc3”ÚÅÍÇtì*
zRû Fûx̺Z4Æ… dÃýnþS«ÊÎ[)o›ïÙ|oíÏ)°iðr¿üìÙf“@´¡ÖÃgdUyŽñªËåÕAÜ8y¹JžX*·ñÚtÌ渦_ÈK[ñahw׊G¹ðZ1뀥P˜Z:Ä[–r£d„„ ú'G»Gn©|”m¬]Z%âXJ•´×^ì9÷Ç»g<yìv­µ‹òÞwÃGnJ»”#´:Uv:nÈú±÷NN²7®CÔᜣƒåB+M~Ý[¶äFÉp£oŠ,¿¸¶}Ø{CØÞ㉡ ÿelÜ•…WvÆ´“vÅùuoÙ Õ»â‡
++ôtí€ÖLrkœU†Ì‹Ú™#œ &•²]kvdûM[‘Æ
I§RÅ°Yà(Àhô©•ò NÏmÌD6`kIˆ#KOZ÷“ñxâúW£—þÎÎlUÇ›Ç Œ-n~ÌЍ7f9âR<ý¥f½¼->‹‹|{–<<ùû›-’Wö'¯ØváFªž  {ºW2v< `lG“'VÊÛÖ¶cÎXBt—/{÷M	WV[ñẆˆqæµµoցvCqKkx­ÉÏy¨A;íéÎÈœòMpD½ö&
++â7üzæã>¶X³BÕ¥ÝÃßÞ¾ì„åÀùõ¿¾ô—tK¹ ZQz;uÊø3ÔFñ[jò
­áU“oNC̘ºþ·Èdí‡'D˜~áÚëiWu2·ŽìX¾~×øÔ•¼€¤u{SÞðµKkuúRuwâ• Ŷ]kv=êk4Áa3<Q©h)~ãw4µjñ~fSœyQa 08¦g³,ºbÐÝZq³¦abOÓ썱~¸©Kˆrlß(F‰¸kn—ôqäÚXÞ—°¿¾Rïy„=¦,´E:÷ÝqGî8’ÝÓÅAÀÊÝdáÏ$«×ÎÍGØoRª:) `µz9pO+õ­V~{Cd"BÄ9«Ô3®‡ªlŽÈŽ÷L"çà‡Ê]x½3Öîe®wtý‰Ó‚ÌEZ·æ¦ê`©•°I¼"R3¿	7³à—e©É‘Ü3Jýð&ß̧œcÒ^HJ:Y–Æ_û t­±!‰³K¯q;Ž`îÿòÕÀI祿qÙ.­Õ­
Îù¶'اµ>ês±\1•ŽVéù*‚¯"øj¢1J-öþvsó
++8, ½“€q±-ÍFEß.uù‡¢FH—*²KNë£R¯×P´¡"?gíÌ×­—›
Å?T”ÝÛÕªTMÒ¡£XÄÓTåo›?¾‹ù’ºþ“¼n݇5“ƒ%¤Ý­Ôšò¯W¼Õ±™X9ÑoᬭEJ}ƒ¢0}ú"¿I+mw˜ÅqݵuÐ̹ÇÚµféQÙÏÛçÄ,9»ã—SBœÍVP¥+]?ooIà‰û¯	’œõÈJ“W½ã¿pÆ–"¥¾áÉÃôé‹,™zkû‚ó×nšûÃÜíã:?cf¬É¹_IÒ$Æj½ÈÛ¢5ØÍëI…zÂn­Ùí7"`>R6‹xÂa3ܦiÆ*ª76?½FÈ¡„ŠS\œbj=%Œ³³”„ÈXw=>­ÅžªÿÚøëë2ìRË‹)GÖô¯›=º¯\ê=|zªÓ¨ÍÖËmçðî-ÓÍM3¥""í÷–½ñyµ›Ü/鋲­™Ö}è³:k^ÈÃq}ƒº‡
½á‘ܱ™¼1+A–;,§ÇïyNÏÚ0È.Ï»Ù98oq‡­½¹ü€¶öʤHoÓCûª–Ï#în=ðÁ;¶xûéÛ–eXiò€´&»^|%ÄËïå±,	ÄÇ¿ãLIôw~(¦­ˆ–K½Æ.<¼ê™öjÇ¦š+ß@µ›Z³/áB3̝RâÓc„X"“8r»üô)îbÖŠýÚ’ º¹°Ö¿'€©Ÿ©¡ñçÇ„²¦|Ê ýK"¡H $I–––XIB f‰ó—½X þ_¶®]­Àž¹b ˜±£No  ðpÆ6Nv0Ê­cZkÿžßDp7¼Ÿ>·°º‡«„‡c€ÁߏéY, 	Zæ À ¥‡Uû´«â¥î¢z`@O2%JE¨œõÂ8\¾ˆÎ°¿ âÿ»Öµ ˆ—|UéÌà ÐXò• Ü…ÔZûÙ~ÓþðQ¼J…®¤BáëÀåàCSˆ¸Ðä kTˆù@Èû4R¡nH(%ŠÙl½Ï‡@tXk °f…˜ßBkÆd`‡µfßÀÝ\ð©¯ñÅ\}^¾R¥1y˜ˆÏñY"Ët äb*!/_Éí„Þ?¹€Ïç›Þ4 at S ñœhÍÖG}&düýhÞ±_‰›Š²žŸw“Ù,6 P4U£Ð=¬$k•
¾näkad™@("Í#¶lû»XköýÈ X,–—;oZëV	‘û þ^1“{WÅÅY  'iGxJè˜ÞL¨'&‰›ÏChåG ž+­uä?ü0ãp8‘¾ì ¹¡¶Ž|¢6è	’gƒ“-±EB.‡ÃÁqz‡è¿«ÖÚ¿N§³r–ÏÃ=y¸§ßìYôG½„ít½Ö¬‰_.“–——>óFÊeRÔÓÄ®5ìOþNÄŸô¿Ú?@âG Hü‰@ ñ#$~Ä@ þwø/‹ ,­pñ    IEND®B`‚
+\ No newline at end of file
+--- kioslave/audiocd/plugins/audiocdencoder.h	(revision 490463)
++++ kioslave/audiocd/plugins/audiocdencoder.h	(revision 495293)
+@@ -101,7 +101,7 @@
+    * This function is most likly called many many times.
+    * @param buf pointer to the audio that has been read in so far
+    * @param frames the number of frames of audio that are in buf
+-   * @return size of the data that was created by this function.
++   * @return size of the data that was created by this function, -1 on error.
+    */
+   virtual long read(int16_t * buf, int frames) = 0;
+ 
+@@ -118,6 +118,11 @@
+                    { Q_UNUSED(manager); return NULL; }; 
+  
+   /**
++   * Returns the last error message; called when e.g. read() returns -1.
++   */
++  virtual QString lastErrorMessage() const { return QString::null; }
++
++  /**
+    * Helper function to load all of the AudioCD Encoders from libraries.
+    * Uses KStandardDirs to find where libraries could be, opens all of the ones
+    * that we might own audiocd_encoder_* and then uses the symbol 
+--- kioslave/audiocd/plugins/lame/encoderlame.cpp	(revision 490463)
++++ kioslave/audiocd/plugins/lame/encoderlame.cpp	(revision 495293)
+@@ -26,12 +26,13 @@
+ #include <kprocess.h>
+ #include <kdebug.h>
+ 
+-#include <kglobal.h>  
++#include <kglobal.h>
+ #include <klocale.h>
+ #include <kapplication.h>
+ #include <qfileinfo.h>
+ #include <ktempfile.h>
+ #include <kstandarddirs.h>
++#include "collectingprocess.h"
+ 
+ extern "C"
+ {
+@@ -47,6 +48,9 @@
+ public:
+ 	int bitrate;
+ 	bool waitingForWrite;
++	bool processHasExited;
++	QString lastErrorMessage;
++	QStringList genreList;
+ 	uint lastSize;
+ 	KProcess *currentEncodeProcess;
+ 	KTempFile *tempFile;
+@@ -55,6 +59,7 @@
+ EncoderLame::EncoderLame(KIO::SlaveBase *slave) : QObject(), AudioCDEncoder(slave) {
+ 	d = new Private();
+ 	d->waitingForWrite = false;
++	d->processHasExited = false;
+ 	d->lastSize = 0;
+ 	loadSettings();
+ }
+@@ -64,27 +69,51 @@
+ }
+ 
+ QWidget* EncoderLame::getConfigureWidget(KConfigSkeleton** manager) const {
+-  (*manager) = Settings::self();
+-  KGlobal::locale()->insertCatalogue("audiocd_encoder_lame");
+-  EncoderLameConfig *config = new EncoderLameConfig();
+-  config->cbr_settings->hide();
+-  return config;
++	(*manager) = Settings::self();
++	KGlobal::locale()->insertCatalogue("audiocd_encoder_lame");
++	EncoderLameConfig *config = new EncoderLameConfig();
++	config->cbr_settings->hide();
++	return config;
+ }
+ 
+ bool EncoderLame::init(){
+ 	// Determine if lame is installed on the system or not.
+-	KProcess proc;
+-	proc << "which" << "lame";
+-	proc.start(KProcess::Block);
+-	if(proc.exitStatus() == 0)
++	if ( KStandardDirs::findExe( "lame" ).isEmpty() )
+ 		return false;
++
++	// Ask lame for the list of genres it knows; otherwise it barfs when doing
++	// e.g. lame --tg 'Vocal Jazz'
++    CollectingProcess proc;
++	proc << "lame" << "--genre-list";
++	proc.start(KProcess::Block, KProcess::Stdout);
++
++	if(proc.exitStatus() != 0)
++		return false;
++
++	const QByteArray data = proc.collectedStdout();
++	QString str;
++	if ( !data.isEmpty() )
++		str = QString::fromLocal8Bit( data, data.size() );
++
++	d->genreList = QStringList::split( '\n', str );
++	// Remove the numbers in front of every genre
++	for( QStringList::Iterator it = d->genreList.begin(); it != d->genreList.end(); ++it ) {
++		QString& genre = *it;
++		uint i = 0;
++		while ( i < genre.length() && ( genre[i].isSpace() || genre[i].isDigit() ) )
++			++i;
++		genre = genre.mid( i );
++
++	}
++	//kdDebug(7117) << "Available genres:" << d->genreList << endl;
++
+ 	return true;
+ }
+ 
+ void EncoderLame::loadSettings(){
+ 	// Generate the command line arguments for the current settings
+ 	args.clear();
+- 
++
+ 	Settings *settings = Settings::self();
+ 
+ 	int quality = settings->quality();
+@@ -92,7 +121,7 @@
+ 	if (quality > 9) quality = 9;
+ 
+ 	int method = settings->bitrate_constant() ? 0 : 1 ;
+-  
++
+ 	if (method == 0) {
+ 		// Constant Bitrate Encoding
+ 		args.append("-b");
+@@ -185,6 +214,8 @@
+ 	QString prefix = locateLocal("tmp", "");
+ 	d->tempFile = new KTempFile(prefix, ".mp3");
+ 	d->tempFile->setAutoDelete(true);
++	d->lastErrorMessage = QString::null;
++	d->processHasExited = false;
+ 
+ 	// -x bitswap
+ 	// -r raw/pcm
+@@ -197,17 +228,19 @@
+ 
+ 	// Read in stdin, output to the temp file
+ 	*d->currentEncodeProcess << "-" << d->tempFile->name().latin1();
+-	
+-	
++
++	//kdDebug(7117) << d->currentEncodeProcess->args() << endl;
++
++
+ 	connect(d->currentEncodeProcess, SIGNAL(receivedStdout(KProcess *, char *, int)),
+-                         this, SLOT(receivedStdout(KProcess *, char *, int)));
++	                 this, SLOT(receivedStdout(KProcess *, char *, int)));
+ 	connect(d->currentEncodeProcess, SIGNAL(receivedStderr(KProcess *, char *, int)),
+-                         this, SLOT(receivedStderr(KProcess *, char *, int)));
++	                 this, SLOT(receivedStderr(KProcess *, char *, int)));
+ 	connect(d->currentEncodeProcess, SIGNAL(wroteStdin(KProcess *)),
+-                         this, SLOT(wroteStdin(KProcess *)));
++	                 this, SLOT(wroteStdin(KProcess *)));
+ 
+ 	connect(d->currentEncodeProcess, SIGNAL(processExited(KProcess *)),
+-                         this, SLOT(processExited(KProcess *)));
++	                 this, SLOT(processExited(KProcess *)));
+ 
+ 	// Launch!
+ 	d->currentEncodeProcess->start(KProcess::NotifyOnExit, KShellProcess::All);
+@@ -216,10 +249,14 @@
+ 
+ void EncoderLame::processExited ( KProcess *process ){
+ 	kdDebug(7117) << "Lame Encoding process exited with: " << process->exitStatus() << endl;
++	d->processHasExited = true;
+ }
+ 
+ void EncoderLame::receivedStderr( KProcess * /*process*/, char *buffer, int /*buflen*/ ){
+ 	kdDebug(7117) << "Lame stderr: " << buffer << endl;
++	if ( !d->lastErrorMessage.isEmpty() )
++		d->lastErrorMessage += '\t';
++	d->lastErrorMessage += QString::fromLocal8Bit( buffer );
+ }
+ 
+ void EncoderLame::receivedStdout( KProcess * /*process*/, char *buffer, int /*length*/ ){
+@@ -231,8 +268,10 @@
+ }
+ 
+ long EncoderLame::read(int16_t *buf, int frames){
+-  if(!d->currentEncodeProcess)
++	if(!d->currentEncodeProcess)
+ 		return 0;
++        if (d->processHasExited)
++		return -1;
+ 
+ 	// Pipe the raw data to lame
+ 	char * cbuf = reinterpret_cast<char *>(buf);
+@@ -281,7 +320,7 @@
+ 	delete d->currentEncodeProcess;
+ 	delete d->tempFile;
+ 	d->lastSize = 0;
+-	
++
+ 	return 0;
+ }
+ 
+@@ -305,9 +344,18 @@
+ 	trackInfo.append("--tn");
+ 	trackInfo.append(QString("%1").arg(track+1));
+ 
+-	trackInfo.append("--tg");
+-	trackInfo.append(info.get("genre").toString());
++	const QString genre = info.get( "genre" ).toString();
++	if ( d->genreList.find( genre ) != d->genreList.end() )
++	{
++		trackInfo.append("--tg");
++		trackInfo.append(genre);
++	}
+ }
+ 
+ 
++QString EncoderLame::lastErrorMessage() const
++{
++	return d->lastErrorMessage;
++}
++
+ #include "encoderlame.moc"
+--- kioslave/audiocd/plugins/lame/collectingprocess.cpp	(revision 0)
++++ kioslave/audiocd/plugins/lame/collectingprocess.cpp	(revision 495293)
+@@ -0,0 +1,134 @@
++/*
++    collectingprocess.cpp
++
++    This file is part of libkdepim.
++    Copyright (c) 2004 Ingo Kloecker <kloecker at kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU General Public License as
++    published by the Free Software Foundation; either version 2 of the
++    License, or (at your option) any later version.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    General Public License for more details.
++
++    You should have received a copy of the GNU General Public License
++    along with this program; if not, write to the Free Software
++    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
++
++    In addition, as a special exception, the copyright holders give
++    permission to link the code of this program with any edition of
++    the Qt library by Trolltech AS, Norway (or with modified versions
++    of Qt that use the same license as Qt), and distribute linked
++    combinations including the two.  You must obey the GNU General
++    Public License in all respects for all of the code used other than
++    Qt.  If you modify this file, you may extend this exception to
++    your version of the file, but you are not obligated to do so.  If
++    you do not wish to do so, delete this exception statement from
++    your version.
++*/
++
++#include "collectingprocess.h"
++
++#include <qvaluelist.h>
++
++#include <string.h>
++
++struct CollectingProcess::Private {
++  Private() : stdoutSize( 0 ), stderrSize( 0 )
++    {}
++
++  uint stdoutSize;
++  QValueList<QByteArray> stdoutBuffer;
++  uint stderrSize;
++  QValueList<QByteArray> stderrBuffer;
++};
++
++
++CollectingProcess::CollectingProcess( QObject * parent, const char * name )
++  : KProcess( parent, name )
++{
++  d = new Private();
++}
++
++CollectingProcess::~CollectingProcess() {
++  delete d; d = 0;
++}
++
++bool CollectingProcess::start( RunMode runmode, Communication comm ) {
++  // prevent duplicate connection
++  disconnect( this, SIGNAL( receivedStdout( KProcess *, char *, int ) ),
++              this, SLOT( slotReceivedStdout( KProcess *, char *, int ) ) );
++  if ( comm & Stdout ) {
++    connect( this, SIGNAL( receivedStdout( KProcess *, char *, int ) ),
++             this, SLOT( slotReceivedStdout( KProcess *, char *, int ) ) );
++  }
++  // prevent duplicate connection
++  disconnect( this, SIGNAL( receivedStderr( KProcess *, char *, int ) ),
++              this, SLOT( slotReceivedStderr( KProcess *, char *, int ) ) );
++  if ( comm & Stderr ) {
++    connect( this, SIGNAL( receivedStderr( KProcess *, char *, int ) ),
++             this, SLOT( slotReceivedStderr( KProcess *, char *, int ) ) );
++  }
++  return KProcess::start( runmode, comm );
++}
++
++void CollectingProcess::slotReceivedStdout( KProcess *, char *buf, int len )
++{
++  QByteArray b;
++  b.duplicate( buf, len );
++  d->stdoutBuffer.append( b );
++  d->stdoutSize += len;
++}
++
++void CollectingProcess::slotReceivedStderr( KProcess *, char *buf, int len )
++{
++  QByteArray b;
++  b.duplicate( buf, len );
++  d->stderrBuffer.append( b );
++  d->stderrSize += len;
++}
++
++QByteArray CollectingProcess::collectedStdout()
++{
++  if ( d->stdoutSize == 0 ) {
++    return QByteArray();
++  }
++
++  uint offset = 0;
++  QByteArray b( d->stdoutSize );
++  for ( QValueList<QByteArray>::const_iterator it = d->stdoutBuffer.begin();
++        it != d->stdoutBuffer.end();
++        ++it ) {
++    memcpy( b.data() + offset, (*it).data(), (*it).size() );
++    offset += (*it).size();
++  }
++  d->stdoutBuffer.clear();
++  d->stdoutSize = 0;
++
++  return b;
++}
++
++QByteArray CollectingProcess::collectedStderr()
++{
++  if ( d->stderrSize == 0 ) {
++    return QByteArray();
++  }
++
++  uint offset = 0;
++  QByteArray b( d->stderrSize );
++  for ( QValueList<QByteArray>::const_iterator it = d->stderrBuffer.begin();
++        it != d->stderrBuffer.end();
++        ++it ) {
++    memcpy( b.data() + offset, (*it).data(), (*it).size() );
++    offset += (*it).size();
++  }
++  d->stderrBuffer.clear();
++  d->stderrSize = 0;
++
++  return b;
++}
++
++#include "collectingprocess.moc"
+--- kioslave/audiocd/plugins/lame/encoderlame.h	(revision 490463)
++++ kioslave/audiocd/plugins/lame/encoderlame.h	(revision 495293)
+@@ -26,7 +26,7 @@
+ /**
+  * MP3 encoder using the LAME encoder.
+  * Go to http://lame.sourceforge.net/ for lots of information.
+- */ 
++ */
+ class EncoderLame : public QObject, public AudioCDEncoder {
+ 
+ Q_OBJECT
+@@ -45,7 +45,8 @@
+ 	virtual long readInit(long size);
+ 	virtual long read(int16_t * buf, int frames);
+ 	virtual long readCleanup();
+-  
++	virtual QString lastErrorMessage() const;
++
+ 	virtual QWidget* getConfigureWidget(KConfigSkeleton** manager) const;
+ 
+ protected slots:
+--- kioslave/audiocd/plugins/lame/collectingprocess.h	(revision 0)
++++ kioslave/audiocd/plugins/lame/collectingprocess.h	(revision 495293)
+@@ -0,0 +1,72 @@
++/*  -*- mode: C++ -*-
++    collectingprocess.h
++
++    This file is a copy of the collectingprocess.h which is part of kdepim/libkdepim.
++    Copyright (c) 2004 Ingo Kloecker <kloecker at kde.org>
++
++    This library is free software; you can redistribute it and/or
++    modify it under the terms of the GNU General Public License as
++    published by the Free Software Foundation; either version 2 of the
++    License, or (at your option) any later version.
++
++    This library is distributed in the hope that it will be useful,
++    but WITHOUT ANY WARRANTY; without even the implied warranty of
++    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++    General Public License for more details.
++
++    You should have received a copy of the GNU General Public License
++    along with this program; if not, write to the Free Software
++    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
++
++    In addition, as a special exception, the copyright holders give
++    permission to link the code of this program with any edition of
++    the Qt library by Trolltech AS, Norway (or with modified versions
++    of Qt that use the same license as Qt), and distribute linked
++    combinations including the two.  You must obey the GNU General
++    Public License in all respects for all of the code used other than
++    Qt.  If you modify this file, you may extend this exception to
++    your version of the file, but you are not obligated to do so.  If
++    you do not wish to do so, delete this exception statement from
++    your version.
++*/
++
++#ifndef __COLLECTINGPROCESS_H__
++#define __COLLECTINGPROCESS_H__
++
++#include <kprocess.h>
++
++/**
++ * @short An output collecting KProcess class.
++ *
++ * This class simplifies the usage of KProcess by collecting all output
++ * (stdout/stderr) of the process.
++ *
++ * @author Ingo Kloecker <kloecker at kde.org>
++ */
++class CollectingProcess : public KProcess {
++  Q_OBJECT
++public:
++  CollectingProcess( QObject * parent = 0, const char * name = 0 );
++  ~CollectingProcess();
++
++  /** Starts the process in NotifyOnExit mode and writes in to stdin of
++      the process.
++  */
++  bool start( RunMode runmode, Communication comm );
++
++  /** Returns the contents of the stdout buffer and clears it afterwards. */
++  QByteArray collectedStdout();
++  /** Returns the contents of the stderr buffer and clears it afterwards. */
++  QByteArray collectedStderr();
++
++private slots:
++  void slotReceivedStdout( KProcess *, char *, int );
++  void slotReceivedStderr( KProcess *, char *, int );
++
++private:
++  class Private;
++  Private * d;
++protected:
++};
++
++#endif // __COLLECTINGPROCESS_H__
+--- kioslave/audiocd/plugins/lame/Makefile.am	(revision 490463)
++++ kioslave/audiocd/plugins/lame/Makefile.am	(revision 495293)
+@@ -4,7 +4,7 @@
+ 
+ kde_module_LTLIBRARIES = libaudiocd_encoder_lame.la
+ 
+-libaudiocd_encoder_lame_la_SOURCES = audiocd_lame_encoder.kcfgc encoderlame.cpp encoderlameconfig.ui
++libaudiocd_encoder_lame_la_SOURCES = audiocd_lame_encoder.kcfgc encoderlame.cpp encoderlameconfig.ui collectingprocess.cpp
+ 
+ libaudiocd_encoder_lame_la_LIBADD = $(LIB_KIO) ../libaudiocdplugins.la
+ 
+--- kioslave/audiocd/kcmaudiocd/kcmaudiocd.cpp	(revision 490463)
++++ kioslave/audiocd/kcmaudiocd/kcmaudiocd.cpp	(revision 495293)
+@@ -64,7 +64,7 @@
+     }
+    
+     //CDDA Options
+-    connect(cd_autosearch_check,SIGNAL(clicked()),this,SLOT(slotConfigChanged()));
++    connect(cd_specify_device,SIGNAL(clicked()),this,SLOT(slotConfigChanged()));
+     connect(ec_enable_check,SIGNAL(clicked()),this,SLOT(slotEcEnable()));
+     connect(ec_skip_check,SIGNAL(clicked()),SLOT(slotConfigChanged()));
+     connect(cd_device_string,SIGNAL(textChanged(const QString &)),SLOT(slotConfigChanged()));
+@@ -99,7 +99,7 @@
+ }
+ 
+ void KAudiocdModule::defaults() {
+-	cd_autosearch_check->setChecked(true);
++	cd_specify_device->setChecked(false);
+ 	cd_device_string->setText("/dev/cdrom");
+ 
+ 	ec_enable_check->setChecked(true);
+@@ -124,7 +124,11 @@
+   {
+     KConfigGroupSaver saver(config, "CDDA");
+ 
+-    config->writeEntry("autosearch",cd_autosearch_check->isChecked());
++    // autosearch is the name of the config option, which has the
++    // reverse sense of the current text of the configuration option,
++    // which is specify the device. Therefore, invert the value on write.
++    //
++    config->writeEntry("autosearch", !(cd_specify_device->isChecked()) );
+     config->writeEntry("device",cd_device_string->text());
+     config->writeEntry("disable_paranoia",!(ec_enable_check->isChecked()));
+     config->writeEntry("never_skip",!(ec_skip_check->isChecked()));
+@@ -156,7 +160,8 @@
+   {
+     KConfigGroupSaver saver(config, "CDDA");
+ 
+-    cd_autosearch_check->setChecked(config->readBoolEntry("autosearch",true));
++    // Specify <=> not autosearch, as explained above in ::save()
++    cd_specify_device->setChecked( !(config->readBoolEntry("autosearch",true)) );
+     cd_device_string->setText(config->readEntry("device","/dev/cdrom"));
+     ec_enable_check->setChecked(!(config->readBoolEntry("disable_paranoia",false)));
+     ec_skip_check->setChecked(!(config->readBoolEntry("never_skip",true)));
+--- kioslave/audiocd/kcmaudiocd/audiocdconfig.ui	(revision 490463)
++++ kioslave/audiocd/kcmaudiocd/audiocdconfig.ui	(revision 495293)
+@@ -149,13 +149,13 @@
+                     </widget>
+                     <widget class="QCheckBox" row="0" column="0" rowspan="1" colspan="2">
+                         <property name="name">
+-                            <cstring>cd_autosearch_check</cstring>
++                            <cstring>cd_specify_device</cstring>
+                         </property>
+                         <property name="text">
+                             <string>&amp;Specify CD device:</string>
+                         </property>
+                         <property name="whatsThis" stdset="0">
+-                            <string>Uncheck this if you want to specify a CD device different from the one autoprobed</string>
++                            <string>Check this to specify a CD device different from the one which is detected automatically</string>
+                         </property>
+                     </widget>
+                     <widget class="QCheckBox" row="1" column="0" rowspan="1" colspan="3">
+@@ -597,7 +597,7 @@
+         <slot>setEnabled(bool)</slot>
+     </connection>
+     <connection>
+-        <sender>cd_autosearch_check</sender>
++        <sender>cd_specify_device</sender>
+         <signal>toggled(bool)</signal>
+         <receiver>cd_device_string</receiver>
+         <slot>setEnabled(bool)</slot>
+--- kioslave/audiocd/audiocd.cpp	(revision 490463)
++++ kioslave/audiocd/audiocd.cpp	(revision 495293)
+@@ -29,7 +29,7 @@
+ 	#include <cdda_interface.h>
+ 	#include <cdda_paranoia.h>
+ 	void paranoiaCallback(long, int);
+-	
++
+ 	#include <kdemacros.h>
+ 	KDE_EXPORT int kdemain(int argc, char ** argv);
+ }
+@@ -104,14 +104,13 @@
+ 
+ class AudioCDProtocol::Private {
+ public:
+-	Private() {
++	Private() : cd(KCompactDisc::Asynchronous) {
+ 		clearURLargs();
+ 		s_info = i18n("Information");
+ 		s_fullCD = i18n("Full CD");
+ 	}
+ 
+ 	void clearURLargs() {
+-		discid = 0;
+ 		req_allTracks = false;
+ 		which_dir = Unknown;
+ 		req_track = -1;
+@@ -129,7 +128,7 @@
+ 	QString device; // URL settable
+ 	int paranoiaLevel; // URL settable
+ 	bool reportErrors;
+-	
++
+ 	// Directory strings, never change after init
+ 	QString s_info;
+ 	QString s_fullCD;
+@@ -138,6 +137,7 @@
+ 	unsigned discid;
+ 	unsigned tracks;
+ 	bool trackIsAudio[100];
++	KCompactDisc cd; // keep it around so that we don't assume the disk changed between every stat()
+ 
+ 	// CDDB items
+ 	KCDDB::CDDB::Result cddbResult;
+@@ -213,28 +213,60 @@
+ 		return 0;
+ 
+ 	// Update our knowledge of the disc
+-	KCompactDisc cd(KCompactDisc::Asynchronous);
+ 	// TODO which one is right?
+ 	// qDebug("\"%s\" \"%s\"", drive->cdda_device_name, drive->ioctl_device_name);
+ #if defined(Q_OS_LINUX)
+-	cd.setDevice(drive->cdda_device_name, 50, false);
++	d->cd.setDevice(drive->cdda_device_name, 50, false);
+ #elif defined(Q_OS_FREEBSD)
+-	cd.setDevice(drive->dev->device_path);
++	// FreeBSD's cdparanoia as of january 5th 2006 has rather broken
++	// support for non-SCSI devices. Although it finds ATA cdroms just
++	// fine, there is no straightforward way to discover the device
++	// name associated with the device, which throws the rest of audiocd
++	// for a loop.
++	//
++	if ( !(drive->dev) || (COOKED_IOCTL == drive->interface) )
++	{
++		// For ATAPI devices, we have no real choice. Use the
++		// user selected value, even if there is none.
++		//
++		kdWarning(7117) << "Found an ATAPI device, assuming it is the one specified by the user." << endl;
++		d->cd.setDevice( d->device );
++	}
++	else
++	{
++		kdDebug(7117) << "Found a SCSI or ATAPICAM device." << endl;
++		if ( strlen(drive->dev->device_path) > 0 )
++		{
++			d->cd.setDevice( drive->dev->device_path );
++		}
++		else
++		{
++			// But the device_path can be empty under some
++			// circumstances, so build a representation from
++			// the unit number and SCSI device name.
++			//
++			QString devname = QString::fromLatin1( "/dev/%1%2" )
++				.arg( drive->dev->given_dev_name )
++				.arg( drive->dev->given_unit_number ) ;
++			kdDebug(7117) << "  Using derived name " << devname << endl;
++			d->cd.setDevice( devname );
++		}
++	}
+ #endif
+-	
+-	if (cd.discId() != d->discid && cd.discId() != cd.missingDisc){
+-		d->discid = cd.discId();
+-		d->tracks = cd.tracks();
+-		for(uint i=0; i< cd.tracks(); i++)
+-			d->trackIsAudio[i] = cd.isAudio(i+1);
+ 
++	if (d->cd.discId() != d->discid && d->cd.discId() != d->cd.missingDisc){
++		d->discid = d->cd.discId();
++		d->tracks = d->cd.tracks();
++		for(uint i=0; i< d->cd.tracks(); i++)
++			d->trackIsAudio[i] = d->cd.isAudio(i+1);
++
+ 		KCDDB::Client c;
+-		d->cddbResult = c.lookup(cd.discSignature());
++		d->cddbResult = c.lookup(d->cd.discSignature());
+ 		d->cddbList = c.lookupResponse();
+ 		d->cddbBestChoice = c.bestLookupResponse();
+ 		generateTemplateTitles();
+ 	}
+-	
++
+ 	// Determine what file or folder that is wanted.
+ 	d->fname = url.fileName(false);
+ 	QString dname = url.directory(true, false);
+@@ -410,9 +442,9 @@
+ 	KCDDB::CDInfo info;
+ 	if(d->cddbResult == KCDDB::CDDB::Success){
+ 		info = d->cddbBestChoice;
+-	
++
+ 		int track = d->req_track;
+-		
++
+ 		QString trackName;
+ 		// hack
+ 		// do we rip the whole CD?
+@@ -423,9 +455,6 @@
+ 		}
+ 		encoder->fillSongInfo(info, track, "");
+ 	}
+-	else {
+-		encoder->fillSongInfo(info, d->req_track, QString("CDDBDISCID=%1").arg(d->cddbBestChoice.id));
+-	}
+ 	long totalByteCount = CD_FRAMESIZE_RAW * (lastSector - firstSector + 1);
+ 	long time_secs = (8 * totalByteCount) / (44100 * 2 * 16);
+ 
+@@ -723,7 +752,7 @@
+ 			error(KIO::ERR_SLAVE_DEFINED, i18n("Device doesn't have write permissions for this account.  Check the write permissions on the device."));
+ 		else if(!fi.exists())
+ 			error(KIO::ERR_DOES_NOT_EXIST, d->device);
+-		else error(KIO::ERR_SLAVE_DEFINED, 
++		else error(KIO::ERR_SLAVE_DEFINED,
+ i18n("Unknown error.  If you have a cd in the drive try running cdparanoia -vsQ as yourself (not root). Do you see a track list? If not, make sure you have permission to access the CD device. If you are using SCSI emulation (possible if you have an IDE CD writer) then make sure you check that you have read and write permissions on the generic SCSI device, which is probably /dev/sg0, /dev/sg1, etc.. If it still does not work, try typing audiocd:/?device=/dev/sg0 (or similar) to tell kio_audiocd which device your CD-ROM is."));
+ 		return 0;
+ 	}
+@@ -732,10 +761,10 @@
+ 	{
+ 		kdDebug(7117) << "cdda_open failed" << endl;
+ 		error(KIO::ERR_CANNOT_OPEN_FOR_READING, d->device);
+-		cdda_close(drive); 
++		cdda_close(drive);
+ 		return 0;
+ 	}
+-	
++
+ 	return drive;
+ }
+ 
+@@ -814,7 +843,11 @@
+ 		if(encoderProcessed == -1){
+ 			kdDebug(7117) << "Encoder processing error, stopping." << endl;
+ 			ok = false;
+-			error( ERR_SLAVE_DEFINED, i18n( "Couldn't read %1: encoding failed" ).arg( fileName ) );
++			QString errMsg = i18n( "Couldn't read %1: encoding failed" ).arg( fileName );
++			QString details = encoder->lastErrorMessage();
++			if ( !details.isEmpty() )
++			    errMsg += "\n" + details;
++			error( ERR_SLAVE_DEFINED, errMsg );
+ 			break;
+ 		}
+ 		processed += encoderProcessed;
+@@ -983,7 +1016,7 @@
+ 	// Tell the encoders to load their settings
+ 	AudioCDEncoder *encoder;
+ 	for ( encoder = encoders.first(); encoder; encoder = encoders.next() ){
+-		encoder->init();
++		encoder->init(); // ### TODO check return value!
+ 		encoder->loadSettings();
+ 	}
+ 
+--- juk/juk.h	(revision 490463)
++++ juk/juk.h	(revision 495293)
+@@ -48,7 +48,6 @@
+     void setupActions();
+     void setupSystemTray();
+     void setupGlobalAccels();
+-    void processArgs();
+     void createDirs();
+ 
+     void keyPressEvent(QKeyEvent *);
+@@ -74,6 +73,7 @@
+     void slotConfigureFileRenamer();
+     void slotUndo();
+     void slotCheckAlbumNextAction(bool albumRandomEnabled);
++    void slotProcessArgs();
+ 
+ private:
+     PlaylistSplitter *m_splitter;
+--- juk/juk.desktop	(revision 490463)
++++ juk/juk.desktop	(revision 495293)
+@@ -55,4 +55,5 @@
+ GenericName[uk]=Програвач музики
+ GenericName[uz]=Мусиқа плейер
+ GenericName[zh_CN]=音乐播放器
++MimeType=application/x-ogg;audio/mpeg;audio/mpegurl;audio/vorbis;audio/x-adpcm;audio/x-flac;audio/x-matroska;audio/x-mp2;audio/x-mp3;audio/x-mpegurl;audio/x-musepack;audio/x-oggflac;audio/x-speex;audio/x-vorbis;audio/x-wav;
+ Categories=Qt;KDE;AudioVideo;
+--- juk/juk.cpp	(revision 490463)
++++ juk/juk.cpp	(revision 495293)
+@@ -68,11 +68,11 @@
+     readConfig();
+     setupSystemTray();
+     setupGlobalAccels();
+-    processArgs();
+     createDirs();
+ 
+     SplashScreen::finishedLoading();
+     QTimer::singleShot(0, CollectionList::instance(), SLOT(slotCheckCache()));
++    QTimer::singleShot(0, this, SLOT(slotProcessArgs()));
+ 
+     m_sliderAction->slotUpdateOrientation();
+ }
+@@ -244,7 +244,7 @@
+     m_accel->updateConnections();
+ }
+ 
+-void JuK::processArgs()
++void JuK::slotProcessArgs()
+ {
+     KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
+     QStringList files;
+@@ -252,8 +252,7 @@
+     for(int i = 0; i < args->count(); i++)
+         files.append(args->arg(i));
+ 
+-    // TODO: make this work again
+-    // m_splitter->open(files);
++    CollectionList::instance()->addFiles(files);
+ }
+ 
+ void JuK::createDirs()
+--- kappfinder-data/muse.desktop	(revision 490463)
++++ kappfinder-data/muse.desktop	(revision 495293)
+@@ -12,6 +12,7 @@
+ GenericName[cy]=Dilyniannydd Cerdd
+ GenericName[da]=Musik sequencer
+ GenericName[de]=Musiksequenzer
++GenericName[el]=Sequencer μουσικής
+ GenericName[es]=Secuenciador de música
+ GenericName[et]=Sekventser
+ GenericName[eu]=Musika sekuentziadorea
+--- kappfinder-data/freebirth.desktop	(revision 490463)
++++ kappfinder-data/freebirth.desktop	(revision 495293)
+@@ -13,6 +13,7 @@
+ GenericName[cy]=Peiriant Drymiau
+ GenericName[da]=Trommemaskine
+ GenericName[de]=Schlagzeugcomputer
++GenericName[el]=Μηχανή κρουστών
+ GenericName[es]=Caja de ritmos
+ GenericName[et]=Trummimasin
+ GenericName[eu]=Tanbor-makina
+--- kappfinder-data/hydrogen.desktop	(revision 490463)
++++ kappfinder-data/hydrogen.desktop	(revision 495293)
+@@ -17,6 +17,7 @@
+ GenericName[cy]=Peiriant Drymiau
+ GenericName[da]=Trommemaskine
+ GenericName[de]=Schlagzeugcomputer
++GenericName[el]=Μηχανή κρουστών
+ GenericName[es]=Caja de ritmos
+ GenericName[et]=Trummimasin
+ GenericName[eu]=Tanbor-makina
+--- kappfinder-data/amsynth.desktop	(revision 490463)
++++ kappfinder-data/amsynth.desktop	(revision 495293)
+@@ -12,6 +12,7 @@
+ GenericName[cy]=Synth Meddal Modelu Analog Retro
+ GenericName[da]=En retro-analog - modelerende softsynth
+ GenericName[de]=Ein retro-analoger Software-Synthesizer
++GenericName[el]=Αναλογικό ρετρό - Σύνθεση Softsynth
+ GenericName[en_GB]=Retro Analogue - Modelling Softsynth
+ GenericName[es]=Sintetizador analógico retro por software
+ GenericName[et]=Retro analoog tarkvaraline süntesaator
+--- kappfinder-data/jamin.desktop	(revision 490463)
++++ kappfinder-data/jamin.desktop	(revision 495293)
+@@ -12,6 +12,7 @@
+ GenericName[cy]=Erfyn meistroli Jack
+ GenericName[da]=Jack master-værktøj
+ GenericName[de]=Werkzeug zur Audio-Endbearbeitung
++GenericName[el]=Εργαλείο εγγραφής Jack
+ GenericName[es]=Herramienta de masterización de JACK
+ GenericName[et]=Jacki masterdamise rakendus
+ GenericName[eu]=Jack erabiltzeko tresna
+--- kaudiocreator/tracksimp.cpp	(revision 490463)
++++ kaudiocreator/tracksimp.cpp	(revision 495293)
+@@ -243,24 +243,15 @@
+ 		CDInfoList cddb_info = cddb->lookupResponse();
+ 		CDInfoList::iterator it;
+ 		QStringList list;
+-		uint defaultChoice = 0;
+-		uint maxrev = 0;
+-		uint c = 0;
+ 		for ( it = cddb_info.begin(); it != cddb_info.end(); ++it  ) {
+ 			list.append( QString("%1, %2, %3").arg((*it).artist).arg((*it).title)
+ 			  .arg((*it).genre));
+-			KCDDB::CDInfo cinfo = *it;
+-			if ( ( *it ).revision >= maxrev ) {
+-				maxrev = info.revision;
+-				defaultChoice = c;
+-			}
+-			c++;
+ 		}
+ 
+ 		bool ok(false); 
+ 		QString res = KInputDialog::getItem(
+ 						i18n("Select CDDB entry"),
+-						i18n("Select a CDDB entry:"), list, defaultChoice, false, &ok,
++						i18n("Select a CDDB entry:"), list, 0, false, &ok,
+ 						this );
+ 		if ( ok ) {
+ 			// The user selected and item and pressed OK
+@@ -470,14 +461,27 @@
+ 	emit(hasTracks(false));
+ 
+ 	KCDDB::TrackInfoList t = cddbInfo.trackInfoList;
++
++	bool isSampler = true;
+ 	for (unsigned i = 0; i < t.count(); i++)
+ 	{
++	    if (t[i].title.find(" / ") == -1)
++	    {
++		isSampler = false;
++		break;
++	    }
++	}
++
++	for (unsigned i = 0; i < t.count(); i++)
++	{
+ 		QString trackArtist;
+ 		QString title;
+-		
+-		// Support for multiple artists stripping.
+-		int delimiter = t[i].title.find(" / ");
+-		if (delimiter != -1) {
++
++		if (isSampler)
++		{
++			// Support for multiple artists stripping.
++			int delimiter = t[i].title.find(" / ");
++			Q_ASSERT(delimiter != -1);
+ 			trackArtist = t[i].title.left(delimiter);
+ 			title = t[i].title.mid(delimiter + 3);
+ 		}
+--- kaudiocreator/kaudiocreator.desktop	(revision 490463)
++++ kaudiocreator/kaudiocreator.desktop	(revision 495293)
+@@ -10,6 +10,7 @@
+ Comment[cy]=Blaen i greu ffeiliau sain
+ Comment[da]=Grænseflade til at lave lydfiler
+ Comment[de]=Oberfläche zur Erstellung von Audio-Dateien
++Comment[el]=Σύστημα υποστήριξης χρήστη για δημιουργία αρχείου ήχου
+ Comment[eo]=Fasado por kreado de sonordosieroj
+ Comment[es]=Un interfaz para la creación de archivos audio
+ Comment[et]=Rippimisprogrammide kasutajaliides
+--- kmix/mdwslider.h	(revision 490463)
++++ kmix/mdwslider.h	(revision 495293)
+@@ -27,6 +27,7 @@
+ 
+ #include <qvaluelist.h>
+ #include <qwidget.h>
++#include <qlabel.h>
+ #include <qptrlist.h>
+ #include <qpixmap.h>
+ #include <qrangecontrol.h>
+@@ -72,6 +73,7 @@
+     void setLabeled( bool value );
+     void setTicks( bool ticks );
+     void setIcons( bool value );
++    void setValueStyle( ValueStyle valueStyle );
+     void setColors( QColor high, QColor low, QColor back );
+     void setMutedColors( QColor high, QColor low, QColor back );
+     QSize sizeHint() const;
+@@ -108,8 +110,10 @@
+     QPixmap icon( int icontype );
+     void setIcon( int icontype );
+     void createWidgets( bool showMuteLED, bool showRecordLED );
++    void updateValue( QLabel *value, Volume::ChannelID chid );
+ 
+     bool m_linked;
++    ValueStyle m_valueStyle;
+     QLabel *m_iconLabel;
+     KLedButton *m_muteLED;
+     KLedButton *m_recordLED;
+@@ -117,6 +121,8 @@
+     QBoxLayout *_layout;
+     QPtrList<QWidget> m_sliders;
+     QValueList<Volume::ChannelID> _slidersChids;
++    QPtrList<QLabel> _numbers;
++  //    QValueList<Volume::ChannelID> _numbersChids;
+ };
+ 
+ #endif
+--- kmix/kmixerwidget.h	(revision 490463)
++++ kmix/kmixerwidget.h	(revision 495293)
+@@ -83,6 +83,7 @@
+    void setTicks( bool on );
+    void setLabels( bool on );
+    void setIcons( bool on );
++   void setValueStyle( int vs );
+    void toggleMenuBarSlot();
+ 
+    void saveConfig( KConfig *config, const QString &grp );
+@@ -107,6 +108,7 @@
+    bool _iconsEnabled;
+    bool _labelsEnabled;
+    bool _ticksEnabled;
++   int _valueStyle;
+    MixDevice::DeviceCategory m_categoryMask;
+ 
+    void createLayout(ViewBase::ViewFlags vflags);
+--- kmix/volume.h	(revision 490463)
++++ kmix/volume.h	(revision 495293)
+@@ -27,8 +27,7 @@
+                   CUSTOM1  = 8, CUSTOM2   = 9, CHIDMAX  = 9 };
+ 
+ 
+-  Volume( ChannelMask chmask = MALL, long maxVolume = 100, long minVolume=0 );
+-  Volume( ChannelMask chmask, long maxVolume, long minVolume, long maxVolumeRec, long minVolumeRec );
++  Volume( ChannelMask chmask = MALL, long maxVolume = 100, long minVolume=0, bool isCapture=false );
+   Volume( const Volume &v );
+   Volume( int channels, long maxVolume );
+ 
+@@ -52,6 +51,7 @@
+ 
+   void setMuted( bool val ) { _muted = val; };
+   bool isMuted()      { return _muted; };
++  bool isCapture() { return _isCapture; };
+ 
+   friend std::ostream& operator<<(std::ostream& os, const Volume& vol);
+   friend kdbgstream& operator<<(kdbgstream& os, const Volume& vol);
+@@ -60,15 +60,14 @@
+     // access it, when private. Strange, as operator<<() is declared friend.
+   static int _channelMaskEnum[10];
+   bool          _muted;
++  bool          _isCapture; // true, when the Volume represents capture/record levels
+   long          _chmask;
+   long          _volumes[CHIDMAX+1];
+   long          _maxVolume;
+   long          _minVolume;
+-  long          _maxVolumeRec;
+-  long          _minVolumeRec;
+ 
+ private:
+-  void init( ChannelMask chmask, long, long, long, long );
++  void init( ChannelMask chmask, long, long, bool );
+ 
+   long volrange( int vol );
+   long volrangeRec( int vol );
+--- kmix/kmixprefdlg.h	(revision 490463)
++++ kmix/kmixprefdlg.h	(revision 495293)
+@@ -59,6 +59,9 @@
+    QCheckBox *m_onLogin;
+    QRadioButton *_rbVertical;
+    QRadioButton *_rbHorizontal;
++   QRadioButton *_rbNone;
++   QRadioButton *_rbAbsolute;
++   QRadioButton *_rbRelative;
+ };
+ 
+ #endif
+--- kmix/mixdevicewidget.h	(revision 490463)
++++ kmix/mixdevicewidget.h	(revision 495293)
+@@ -56,6 +56,8 @@
+       Q_OBJECT
+ 
+ public:
++    enum ValueStyle { NNONE = 0, NABSOLUTE = 1, NRELATIVE = 2 } ;
++
+       MixDeviceWidget( Mixer *mixer, MixDevice* md,
+                        bool small, Qt::Orientation orientation,
+                        QWidget* parent = 0, ViewBase* mw = 0, const char* name = 0);
+@@ -75,6 +77,7 @@
+     virtual void setStereoLinked( bool ) {};
+     virtual void setLabeled( bool );
+     virtual void setTicks( bool ) {};
++    virtual void setValueStyle( ValueStyle ) {};
+ 
+     virtual KGlobalAccel *keys(void);
+ 
+--- kmix/kmixerwidget.cpp	(revision 490463)
++++ kmix/kmixerwidget.cpp	(revision 495293)
+@@ -61,7 +61,9 @@
+    : QWidget( parent, name ), _mixer(mixer), m_balanceSlider(0),
+      m_topLayout(0),
+      m_id( _id ),
+-     _iconsEnabled( true ), _labelsEnabled( false ), _ticksEnabled( false )
++     _iconsEnabled( true ), _labelsEnabled( false ), _ticksEnabled( false ),
++     _valueStyle ( -1 ) // this definitely does not correspond to the 'default value display' style,
++			// so the style will be set by a later call to setValueStyle()
+ 
+ {
+     m_categoryMask = categoryMask;
+@@ -201,7 +203,19 @@
+     }
+ }
+ 
++void KMixerWidget::setValueStyle( int vs )
++{
++    if ( _valueStyle!=vs ) {
++		// value was changed
++		_valueStyle = vs;
++		for ( std::vector<ViewBase*>::iterator it = _views.begin(); it != _views.end();  it++) {
++			ViewBase* mixerWidget = *it;
++		    KMixToolBox::setValueStyle(mixerWidget->_mdws, vs);
++		} // for all tabs
++    }
++}
+ 
++
+ /**
+  *  @todo : Is the view list already filled, when loadConfig() is called?
+  */
+--- kmix/volume.cpp	(revision 490463)
++++ kmix/volume.cpp	(revision 495293)
+@@ -34,27 +34,22 @@
+       MCUSTOM1, MCUSTOM2
+     };
+ 
+-Volume::Volume( ChannelMask chmask, long maxVolume, long minVolume )
++Volume::Volume( ChannelMask chmask, long maxVolume, long minVolume, bool isCapture  )
+ {
+-  init(chmask, maxVolume, minVolume, maxVolume, minVolume);
++  init(chmask, maxVolume, minVolume, isCapture);
+ }
+ 
+ 
+-Volume::Volume( ChannelMask chmask, long maxVolume, long minVolume, long maxVolumeRec, long minVolumeRec )
+-{
+-  init(chmask, maxVolume, minVolume, maxVolumeRec, minVolumeRec);
+-}
+-
+ // @ compatiblity constructor
+ Volume::Volume( int channels, long maxVolume ) {
+    if (channels == 1 ) {
+-       init(Volume::MLEFT, maxVolume, 0, maxVolume, 0);
++       init(Volume::MLEFT, maxVolume, 0, false);
+    }
+    else if (channels == 2) {
+-      init(ChannelMask(Volume::MLEFT|Volume::MRIGHT), maxVolume, 0, maxVolume, 0);
++      init(ChannelMask(Volume::MLEFT|Volume::MRIGHT), maxVolume, 0, false );
+    }
+    else {
+-     init(ChannelMask(Volume::MLEFT|Volume::MRIGHT), maxVolume, 0, maxVolume, 0);
++     init(ChannelMask(Volume::MLEFT|Volume::MRIGHT), maxVolume, 0, false );
+      kdError(67100) << "Warning: Multi-channel Volume object created with old constructor - this will not work fully\n";
+    }
+ }
+@@ -64,14 +59,14 @@
+     _chmask     = v._chmask;
+     _maxVolume  = v._maxVolume;
+     _minVolume  = v._minVolume;
+-    _maxVolumeRec  = v._maxVolumeRec;
+-    _minVolumeRec  = v._minVolumeRec;
+     _muted      = v._muted;
++    _isCapture  = v._isCapture;
+     setVolume(v, (ChannelMask)v._chmask);
++
+     //    kdDebug(67100) << "Volume::copy-constructor initialized " << v << "\n";
+ }
+ 
+-void Volume::init( ChannelMask chmask, long maxVolume, long minVolume, long maxVolumeRec, long minVolumeRec )
++void Volume::init( ChannelMask chmask, long maxVolume, long minVolume, bool isCapture )
+ {
+     for ( int i=0; i<= Volume::CHIDMAX; i++ ) {
+ 	_volumes[i] = 0;
+@@ -79,8 +74,7 @@
+     _chmask     = chmask;
+     _maxVolume  = maxVolume;
+     _minVolume  = minVolume;
+-    _maxVolumeRec  = maxVolumeRec;
+-    _minVolumeRec  = minVolumeRec;
++    _isCapture = isCapture;
+     _muted      = false;
+ }
+ 
+--- kmix/kmix.cpp	(revision 490463)
++++ kmix/kmix.cpp	(revision 495293)
+@@ -258,6 +258,13 @@
+       config->writeEntry( "MasterMixerDevice", mdMaster->getPK() );
+    }
+ 
++   if ( m_valueStyle == MixDeviceWidget::NABSOLUTE )
++      config->writeEntry( "ValueStyle", "Absolute");
++   else if ( m_valueStyle == MixDeviceWidget::NRELATIVE )
++      config->writeEntry( "ValueStyle", "Relative");
++   else 
++     config->writeEntry( "ValueStyle", "None" );
++
+    if ( m_toplevelOrientation  == Qt::Vertical )
+       config->writeEntry( "Orientation","Vertical" );
+    else
+@@ -286,6 +293,7 @@
+    m_hideOnClose = config->readBoolEntry("HideOnClose", true);
+    m_showTicks = config->readBoolEntry("Tickmarks", true);
+    m_showLabels = config->readBoolEntry("Labels", true);
++   const QString& valueStyleString = config->readEntry("ValueStyle", "None");
+    m_onLogin = config->readBoolEntry("startkdeRestore", true );
+    m_startVisible = config->readBoolEntry("Visible", true);
+    m_multiDriverMode = config->readBoolEntry("MultiDriver", false);
+@@ -297,6 +305,12 @@
+    QString masterDev = config->readEntry( "MasterMixerDevice", "" );
+    Mixer::setMasterCardDevice(masterDev);
+ 
++   if ( valueStyleString == "Absolute" )
++       m_valueStyle = MixDeviceWidget::NABSOLUTE;
++   else if ( valueStyleString == "Relative" )
++       m_valueStyle = MixDeviceWidget::NRELATIVE;
++   else 
++       m_valueStyle = MixDeviceWidget::NNONE;
+ 
+    if ( orientationString == "Vertical" )
+        m_toplevelOrientation  = Qt::Vertical;
+@@ -368,6 +382,7 @@
+ 
+ 		mw->setTicks( m_showTicks );
+ 		mw->setLabels( m_showLabels );
++		mw->setValueStyle ( m_valueStyle );
+ 		// !! I am still not sure whether this works 100% reliably - chris
+ 		mw->show();
+ 	}
+@@ -412,6 +427,9 @@
+       m_prefDlg->m_onLogin->setChecked( m_onLogin );
+       m_prefDlg->_rbVertical  ->setChecked( m_toplevelOrientation == Qt::Vertical );
+       m_prefDlg->_rbHorizontal->setChecked( m_toplevelOrientation == Qt::Horizontal );
++      m_prefDlg->_rbNone->setChecked( m_valueStyle == MixDeviceWidget::NNONE );
++      m_prefDlg->_rbAbsolute->setChecked( m_valueStyle == MixDeviceWidget::NABSOLUTE );
++      m_prefDlg->_rbRelative->setChecked( m_valueStyle == MixDeviceWidget::NRELATIVE );
+ 
+       m_prefDlg->show();
+    }
+@@ -475,6 +493,14 @@
+    m_showLabels = prefDlg->m_showLabels->isChecked();
+    m_onLogin = prefDlg->m_onLogin->isChecked();
+ 
++   if ( prefDlg->_rbNone->isChecked() ) {
++     m_valueStyle = MixDeviceWidget::NNONE;
++   } else if ( prefDlg->_rbAbsolute->isChecked() ) {
++     m_valueStyle = MixDeviceWidget::NABSOLUTE;
++   } else if ( prefDlg->_rbRelative->isChecked() ) {
++     m_valueStyle = MixDeviceWidget::NRELATIVE;
++   }
++
+    bool toplevelOrientationHasChanged =
+         ( prefDlg->_rbVertical->isChecked()   && m_toplevelOrientation == Qt::Horizontal )
+      || ( prefDlg->_rbHorizontal->isChecked() && m_toplevelOrientation == Qt::Vertical   );
+@@ -500,6 +526,7 @@
+    {
+       mw->setTicks( m_showTicks );
+       mw->setLabels( m_showLabels );
++      mw->setValueStyle ( m_valueStyle );
+       mw->mixer()->readSetFromHWforceUpdate(); // needed, as updateDocking() has reconstructed the DockWidget
+    }
+ 
+--- kmix/kmixapplet.cpp	(revision 490463)
++++ kmix/kmixapplet.cpp	(revision 495293)
+@@ -273,9 +273,9 @@
+     _colors.low = cfg->readColorEntry("ColorLow", &lowColor);
+     _colors.back = cfg->readColorEntry("ColorBack", &backColor);
+ 
+-    _colors.mutedHigh = cfg->readColorEntry("MutedColorHigh", &mutedHighColor);
+-    _colors.mutedLow = cfg->readColorEntry("MutedColorLow", &mutedLowColor);
+-    _colors.mutedBack = cfg->readColorEntry("MutedColorBack", &mutedBackColor);
++    _colors.mutedHigh = cfg->readColorEntry("ColorMutedHigh", &mutedHighColor);
++    _colors.mutedLow = cfg->readColorEntry("ColorMutedLow", &mutedLowColor);
++    _colors.mutedBack = cfg->readColorEntry("ColorMutedBack", &mutedBackColor);
+ 
+     loadConfig( cfg, "Widget");
+ }
+--- kmix/kmixtoolbox.h	(revision 490463)
++++ kmix/kmixtoolbox.h	(revision 495293)
+@@ -19,6 +19,7 @@
+     static void setIcons  (QPtrList<QWidget> &mdws, bool on );
+     static void setLabels (QPtrList<QWidget> &mdws, bool on );
+     static void setTicks  (QPtrList<QWidget> &mdws, bool on );
++    static void setValueStyle  (QPtrList<QWidget> &mdws, int vs );
+     static void loadConfig(QPtrList<QWidget> &mdws, KConfig *config, const QString &grp, const QString &viewPrefix  );
+     static void saveConfig(QPtrList<QWidget> &mdws, KConfig *config, const QString &grp, const QString &viewPrefix  );
+ };
+--- kmix/viewdockareapopup.cpp	(revision 490463)
++++ kmix/viewdockareapopup.cpp	(revision 495293)
+@@ -63,7 +63,7 @@
+ 
+ 
+ 
+-void ViewDockAreaPopup::mousePressEvent(QMouseEvent *me)
++void ViewDockAreaPopup::mousePressEvent(QMouseEvent *)
+ {
+ //	kdDebug() << "Teste pres mouse" << endl;
+     /**
+--- kmix/kmixapplet.desktop	(revision 490463)
++++ kmix/kmixapplet.desktop	(revision 495293)
+@@ -53,6 +53,7 @@
+ Comment[cs]=Ovládání hlasitosti a zvukových kanálů
+ Comment[da]=Mikserkontrol for lydstyrke og lydkanal
+ Comment[de]=Kontrolle der Lautstärke
++Comment[el]=Στοιχείο μείκτη ήχων και έντασης καναλιών
+ Comment[es]=Control del volumen y los canales de sonido del mezclador
+ Comment[et]=Helitugevuse ja helikanalite seadistamine
+ Comment[eu]=Bolumena eta soinu-kanalen nahasketarako kontrola
+--- kmix/mixer_alsa9.cpp	(revision 490463)
++++ kmix/mixer_alsa9.cpp	(revision 495293)
+@@ -203,6 +203,7 @@
+ 
+ 	bool canRecord = false;
+ 	bool canMute = false;
++	bool canCapture = false;
+ 	long maxVolumePlay= 0, minVolumePlay= 0;
+ 	long maxVolumeRec = 0, minVolumeRec = 0;
+ 	validDevice = true;
+@@ -224,11 +225,12 @@
+ 
+ 		//kdDebug() << "--- Loop: name=" << snd_mixer_selem_id_get_name( sid ) << " , mixerIdx=" << mixerIdx << "------------" << endl;
+ 
+-	    Volume* vol = 0;
++	    Volume* volPlay = 0, *volCapture = 0;
+ 	    QPtrList<QString> enumList;
+ 	    if ( snd_mixer_selem_is_enumerated(elem) ) {
+ 		cc = MixDevice::ENUM;
+-		vol = new Volume(); // Dummy, unused
++		volPlay = new Volume(); // Dummy, unused
++		volCapture = new Volume();
+ 		mixer_elem_list.append( elem );
+ 		mixer_sid_list.append( sid );
+ 
+@@ -261,21 +263,24 @@
+ 				? Volume::MLEFT : (Volume::ChannelMask)(Volume::MLEFT | Volume::MRIGHT);
+ 			chn = (Volume::ChannelMask) (chn | chnTmp);
+ 			cc = MixDevice::SLIDER;
++			volPlay = new Volume( chn, maxVolumePlay, minVolumePlay );
++		} else {
++			volPlay = new Volume();
+ 		}
+-		else if ( snd_mixer_selem_has_capture_volume(elem) ) {
++		if ( snd_mixer_selem_has_capture_volume(elem) ) {
+ 			//kdDebug(67100) << "has_capture_volume()" << endl;
+ 			chnTmp = snd_mixer_selem_is_capture_mono( elem )
+ 				? Volume::MLEFT : (Volume::ChannelMask)(Volume::MLEFT | Volume::MRIGHT );
+ 			chn = (Volume::ChannelMask) (chn | chnTmp);
+ 			cc = MixDevice::SLIDER;
+-			// We can have Playback OR Capture. Not both at same time
+-			// It's not best coding ever, anyway
+-			snd_mixer_selem_get_capture_volume_range( elem, &minVolumePlay, &maxVolumePlay );
++			canCapture = true;
++			volCapture = new Volume( chn, maxVolumeRec, minVolumeRec, true );
++		} else {
++			volCapture = new Volume();
+ 		}
+ 
+ 		/* Create Volume object. If there is no volume on this device,
+ 		 * it will be created with maxVolume == 0 && minVolume == 0 */
+-		vol = new Volume( chn, maxVolumePlay, minVolumePlay, maxVolumeRec, minVolumeRec );
+ 		mixer_elem_list.append( elem );
+ 		mixer_sid_list.append( sid );
+ 
+@@ -301,20 +306,35 @@
+ 		}
+ 	    } // is ordinary mixer element (NOT an enum)
+ 
+-		MixDevice* md =
+-		    new MixDevice( mixerIdx,
+-				   *vol,
++		MixDevice* md = new MixDevice( mixerIdx,
++				   *volPlay,
+ 					canRecord,
+ 				   canMute,
+ 				   snd_mixer_selem_id_get_name( sid ),
+ 				   ct,
+ 				   cc );
+-        if (!masterChosen && ct==MixDevice::VOLUME) {
+-           // Determine a nicer MasterVolume
+-           m_recommendedMaster = md;
+-           masterChosen = true;
+-        }
+ 
++			m_mixDevices.append( md );
++
++
++		if (!masterChosen && ct==MixDevice::VOLUME) {
++		// Determine a nicer MasterVolume
++		m_recommendedMaster = md;
++		masterChosen = true;
++		}
++
++		if ( canCapture && !canRecord ) {
++			MixDevice *mdCapture =
++		    	new MixDevice( mixerIdx,
++				   *volCapture,
++					true,
++				   canMute,
++				   snd_mixer_selem_id_get_name( sid ),
++				   ct,
++				   cc );
++			m_mixDevices.append( mdCapture );
++		}
++
+ 		if ( enumList.count() > 0 ) {
+ 		  int maxEnumId= enumList.count();
+ 		  QPtrList<QString>& enumValuesRef = md->enumValues(); // retrieve a ref
+@@ -324,18 +344,24 @@
+ 		    enumValuesRef.append(enumList.at(i) );
+ 		  }
+ 		}
+-		m_mixDevices.append( md );
+ 		//kdDebug(67100) << "ALSA create MDW, vol= " << *vol << endl;
+-		delete vol;
++		delete volPlay;
++		delete volCapture;
+ 	    } // virginOpen
+ 	    else
+ 	    {
+-		MixDevice* md = m_mixDevices.at( mixerIdx );
+-		if( !md )
+-		{
+-		    return Mixer::ERR_INCOMPATIBLESET;
+-		}
+-		writeVolumeToHW( mixerIdx, md->getVolume() );
++			MixDevice* md;
++			bool found = false;
++    		for ( md = m_mixDevices.first(); md != 0; md = m_mixDevices.next() ) {
++				if ( md->num() == mixerIdx ) {
++					found = true;
++					writeVolumeToHW( mixerIdx, md->getVolume() );
++				}
++			}
++			if( !found )
++			{
++				return Mixer::ERR_INCOMPATIBLESET;
++			}
+ 	    } // !virginOpen
+     } // for all elems
+ 
+@@ -681,7 +707,7 @@
+ 
+ 
+ 	// *** READ PLAYBACK VOLUMES *************
+-	if ( snd_mixer_selem_has_playback_volume( elem ) )
++	if ( snd_mixer_selem_has_playback_volume( elem ) && !volume.isCapture() )
+ 	{
+ 		int ret = snd_mixer_selem_get_playback_volume( elem, SND_MIXER_SCHN_FRONT_LEFT, &left );
+                 if ( ret != 0 ) kdDebug(67100) << "readVolumeFromHW(" << mixerIdx << ") [has_playback_volume,R] failed, errno=" << ret << endl;
+@@ -697,7 +723,7 @@
+                 }
+ 	}
+ 	else
+-	if ( snd_mixer_selem_has_capture_volume ( elem ) )
++	if ( snd_mixer_selem_has_capture_volume ( elem ) && volume.isCapture() )
+ 	{
+             int ret = snd_mixer_selem_get_capture_volume ( elem, SND_MIXER_SCHN_FRONT_LEFT, &left );
+             if ( ret != 0 ) kdDebug(67100) << "readVolumeFromHW(" << mixerIdx << ") [get_capture_volume,L] failed, errno=" << ret << endl;
+@@ -740,12 +766,12 @@
+ 	left = volume[ Volume::LEFT ];
+ 	right = volume[ Volume::RIGHT ];
+ 
+-	if (snd_mixer_selem_has_playback_volume( elem ) ) {
++	if (snd_mixer_selem_has_playback_volume( elem ) && !volume.isCapture() ) {
+ 		snd_mixer_selem_set_playback_volume ( elem, SND_MIXER_SCHN_FRONT_LEFT, left );
+ 		if ( ! snd_mixer_selem_is_playback_mono ( elem ) )
+ 			snd_mixer_selem_set_playback_volume ( elem, SND_MIXER_SCHN_FRONT_RIGHT, right );
+ 	}
+-	else if ( snd_mixer_selem_has_capture_volume( elem ) ) {
++	else if ( snd_mixer_selem_has_capture_volume( elem ) && volume.isCapture() ) {
+ 		snd_mixer_selem_set_capture_volume ( elem, SND_MIXER_SCHN_FRONT_LEFT, left );
+ 		if ( ! snd_mixer_selem_is_playback_mono ( elem ) )
+ 			snd_mixer_selem_set_capture_volume ( elem, SND_MIXER_SCHN_FRONT_RIGHT, right );
+--- kmix/kmix.h	(revision 490463)
++++ kmix/kmix.h	(revision 495293)
+@@ -48,6 +48,7 @@
+ class Mixer;
+ 
+ #include "mixer.h"
++#include "mixdevicewidget.h"
+ 
+ 
+ class 
+@@ -100,6 +101,7 @@
+    bool m_hideOnClose;
+    bool m_showTicks;
+    bool m_showLabels;
++   MixDeviceWidget::ValueStyle m_valueStyle;             // No numbers by default
+    bool m_onLogin;
+    bool m_startVisible;
+    bool m_showMenubar;
+--- kmix/kmixtoolbox.cpp	(revision 490463)
++++ kmix/kmixtoolbox.cpp	(revision 495293)
+@@ -70,6 +70,15 @@
+     }
+ }
+ 
++void KMixToolBox::setValueStyle(QPtrList<QWidget> &mdws, int vs ) {
++    QWidget *qmdw;
++    for ( qmdw=mdws.first(); qmdw != 0; qmdw=mdws.next() ) {
++	if ( qmdw->inherits("MixDeviceWidget") ) { // -<- in reality it is only in MDWSlider
++	  static_cast<MixDeviceWidget*>(qmdw)->setValueStyle( (MixDeviceWidget::ValueStyle) vs );
++	}
++    }
++}
++
+ void KMixToolBox::loadConfig(QPtrList<QWidget> &mdws, KConfig *config, const QString &grp, const QString &viewPrefix) {
+     int n = 0;
+     config->setGroup( grp );
+--- kmix/mdwslider.cpp	(revision 490463)
++++ kmix/mdwslider.cpp	(revision 495293)
+@@ -252,7 +252,8 @@
+ 		 volLayout->setAlignment(Qt::AlignHCenter);
+ 	 }
+ 
+-	 // Sliders
++	 // Sliders and volume number indication
++	 QBoxLayout *slinumLayout;
+ 	 for( int i = 0; i < m_mixdevice->getVolume().count(); i++ )
+     {
+ 		 Volume::ChannelID chid = Volume::ChannelID(i);
+@@ -262,6 +263,29 @@
+ 		 int maxvol = m_mixdevice->getVolume().maxVolume();
+ 		 int minvol = m_mixdevice->getVolume().minVolume();
+ 
++		 if ( _orientation == Qt::Vertical ) {
++		   slinumLayout = new QVBoxLayout( volLayout );
++		   slinumLayout->setAlignment(Qt::AlignHCenter);
++		 }
++		 else {
++		   slinumLayout = new QHBoxLayout( volLayout );
++		   slinumLayout->setAlignment(Qt::AlignVCenter);
++		 }
++
++		 // create labels to hold volume values (taken from qamix/kamix)
++		 QLabel *number = new QLabel( this );
++		 slinumLayout->addWidget( number );
++		 QFontMetrics *qfm = new QFontMetrics( number->font() );
++		 number->setFrameStyle( QFrame::Panel | QFrame::Sunken );
++		 number->setMinimumWidth( qfm->width("MMM", 3) );
++		 number->setLineWidth( 3 );
++		 number->setPaletteBackgroundColor( QColor(190, 250, 190) );
++		 delete qfm;
++		 // don't show the value by default
++		 number->hide();
++		 updateValue( number, chid );
++		 _numbers.append( number );
++
+ 		 QWidget* slider;
+ 		 if ( m_small ) {
+ 			 slider = new KSmallSlider( minvol, maxvol, maxvol/10,
+@@ -280,8 +304,9 @@
+ 		 if( i>0 && isStereoLinked() ) {
+ 			 // show only one (the first) slider, when the user wants it so
+ 			 slider->hide();
++			 number->hide();
+ 		 }
+-		 volLayout->addWidget( slider );  // add to layout
++		 slinumLayout->addWidget( slider );  // add to layout
+ 		 m_sliders.append ( slider );   // add to list
+ 		 _slidersChids.append(chid);        // Remember slider-chid association
+ 		 connect( slider, SIGNAL(valueChanged(int)), SLOT(volumeChange(int)) );
+@@ -428,6 +453,8 @@
+    m_linked = value;
+ 
+    QWidget *slider = m_sliders.first();
++   QLabel *number = _numbers.first();
++   QString qs = number->text();
+ 
+    /***********************************************************
+       Remember value of first slider, so that it can be copied
+@@ -446,9 +473,10 @@
+       firstSliderValueValid = true;
+    }
+ 
+-   for( slider=m_sliders.next(); slider!=0 ; slider=m_sliders.next() ) {
++   for( slider=m_sliders.next(), number=_numbers.next();  slider!=0 && number!=0; slider=m_sliders.next(), number=_numbers.next() ) {
+       if ( m_linked ) {
+          slider->hide();
++	 number->hide();
+       }
+       else {
+          // When splitting, make the next sliders show the same value as the first.
+@@ -467,6 +495,9 @@
+             }
+          }
+          slider->show();
++	 number->setText(qs);
++         if (m_valueStyle != NNONE)
++	     number->show();
+       }
+    }
+ 
+@@ -522,6 +553,27 @@
+ }
+ 
+ void
++MDWSlider::setValueStyle( ValueStyle valueStyle )
++{
++    m_valueStyle = valueStyle;
++
++    int i = 0;
++    QValueList<Volume::ChannelID>::Iterator it = _slidersChids.begin();
++    for(QLabel *number = _numbers.first(); number!=0; number = _numbers.next(), ++i, ++it) {
++        Volume::ChannelID chid = *it;
++        switch ( m_valueStyle ) {
++	case NNONE: number->hide(); break;
++	default: 
++	    if ( !isStereoLinked() || (i == 0)) {
++	      updateValue( number, chid );
++	      number->show();
++	    }
++	}
++    }
++    layout()->activate();
++}
++
++void
+ MDWSlider::setIcons(bool value)
+ {
+     if ( m_iconLabel != 0 ) {
+@@ -554,7 +606,19 @@
+     }
+ }
+ 
++void 
++MDWSlider::updateValue( QLabel *value, Volume::ChannelID chid ) {
++    QString qs;
++    Volume& vol = m_mixdevice->getVolume();
+ 
++    if (m_valueStyle == NABSOLUTE )
++      qs.sprintf("%3d",  (int) vol.getVolume( chid ) );
++    else
++        qs.sprintf("%3d", (int)( vol.getVolume( chid ) / (double)vol.maxVolume() * 100 ) );
++    value->setText(qs);
++}
++
++
+ /** This slot is called, when a user has changed the volume via the KMix Slider */
+ void MDWSlider::volumeChange( int )
+ {
+@@ -598,11 +662,14 @@
+       else {
+          kdDebug(67100) << "MDWSlider::volumeChange(), unknown chid " << chid << endl;
+       }
++
++      updateValue( _numbers.first(), Volume::LEFT );
+    } // joined
+    else {
+       int n = 0;
+       QValueList<Volume::ChannelID>::Iterator it = _slidersChids.begin();
+-      for( QWidget *slider=m_sliders.first(); slider!=0; slider=m_sliders.next(), ++it )
++      QLabel *number = _numbers.first();
++      for( QWidget *slider=m_sliders.first(); slider!=0 && number!=0; slider=m_sliders.next(), number=_numbers.next(), ++it )
+       {
+           Volume::ChannelID chid = *it;
+ 	  if ( slider->inherits( "KSmallSlider" ) )
+@@ -620,6 +687,7 @@
+ 				else
+ 					vol.setVolume( chid, bigSlider->value() );
+ 	  }
++	  updateValue( number, chid );
+ 	  n++;
+       }
+    }
+@@ -754,6 +822,7 @@
+ 			}
+ 		} // big slider
+ 
++		updateValue( _numbers.first(), Volume::LEFT );
+ 		slider->blockSignals( false );
+ 	} // only 1 slider (stereo-linked)
+ 	else {
+@@ -790,6 +859,8 @@
+ 				}
+ 			}
+ 
++			updateValue( _numbers.at ( i ), chid );
++
+ 			slider->blockSignals( false );
+ 		} // for all sliders
+ 	} // more than 1 slider
+--- kmix/kmixprefdlg.cpp	(revision 490463)
++++ kmix/kmixprefdlg.cpp	(revision 495293)
+@@ -68,6 +68,24 @@
+    m_onLogin = new QCheckBox( i18n("Restore volumes on login"), m_generalTab );
+    layout->addWidget( m_onLogin );
+ 
++   QBoxLayout *numbersLayout = new QHBoxLayout( layout );
++   QButtonGroup *numbersGroup = new QButtonGroup( 3, Qt::Horizontal, i18n("Numbers"), m_generalTab );
++   numbersGroup->setRadioButtonExclusive(true);
++   QLabel* qlbl = new QLabel(  i18n("Volume Values"), m_generalTab );
++   _rbNone = new QRadioButton( i18n("&None"), m_generalTab );
++   _rbAbsolute = new QRadioButton( i18n("A&bsolute"), m_generalTab );
++   _rbRelative   = new QRadioButton( i18n("&Relative"), m_generalTab );
++   numbersGroup->insert(_rbNone);
++   numbersGroup->insert(_rbAbsolute);
++   numbersGroup->insert(_rbRelative);
++   numbersGroup->hide();
++
++   numbersLayout->add(qlbl);
++   numbersLayout->add(_rbNone);
++   numbersLayout->add(_rbAbsolute);
++   numbersLayout->add(_rbRelative);
++   numbersLayout->addStretch();
++
+    QBoxLayout *orientationLayout = new QHBoxLayout( layout );
+    QButtonGroup* orientationGroup = new QButtonGroup( 2, Qt::Horizontal, i18n("Orientation"), m_generalTab );
+    //orientationLayout->add(orientationGroup);
+--- kmix/mixdevice.cpp	(revision 490463)
++++ kmix/mixdevice.cpp	(revision 495293)
+@@ -140,12 +140,20 @@
+    config->setGroup( devgrp );
+    //kdDebug(67100) << "MixDevice::read() of group devgrp=" << devgrp << endl;
+ 
++   char *nameLeftVolume, *nameRightVolume;
++   if ( _volume.isCapture() ) {
++		nameLeftVolume = "volumeLCapture";
++		nameRightVolume = "volumeRCapture";
++   } else {
++		nameLeftVolume = "volumeL";
++		nameRightVolume = "volumeR";
++   }
+    Volume::ChannelMask chMask = Volume::MNONE;
+-   int vl = config->readNumEntry("volumeL", -1);
++   int vl = config->readNumEntry(nameLeftVolume, -1);
+    if (vl!=-1) {
+         chMask = (Volume::ChannelMask)(chMask | Volume::MLEFT);
+    }
+-   int vr = config->readNumEntry("volumeR", -1);
++   int vr = config->readNumEntry(nameRightVolume, -1);
+    if (vr!=-1) {
+        chMask = (Volume::ChannelMask)(chMask | Volume::MRIGHT);
+    }
+@@ -191,9 +199,16 @@
+    devgrp.sprintf( "%s.Dev%i", grp.ascii(), _num );
+    config->setGroup(devgrp);
+    // kdDebug(67100) << "MixDevice::write() of group devgrp=" << devgrp << endl;
+-
+-   config->writeEntry("volumeL", getVolume( Volume::LEFT ) );
+-   config->writeEntry("volumeR", getVolume( Volume::RIGHT ) );
++   char *nameLeftVolume, *nameRightVolume;
++   if ( _volume.isCapture() ) {
++		nameLeftVolume = "volumeLCapture";
++		nameRightVolume = "volumeRCapture";
++   } else {
++		nameLeftVolume = "volumeL";
++		nameRightVolume = "volumeR";
++   }
++   config->writeEntry(nameLeftVolume, getVolume( Volume::LEFT ) );
++   config->writeEntry(nameRightVolume, getVolume( Volume::RIGHT ) );
+    config->writeEntry("is_muted", (int)_volume.isMuted() );
+    config->writeEntry("is_recsrc", (int)isRecSource() );
+    config->writeEntry("name", _name);
+--- kfile-plugins/mpeg/kfile_mpeg.desktop	(revision 490463)
++++ kfile-plugins/mpeg/kfile_mpeg.desktop	(revision 495293)
+@@ -27,6 +27,7 @@
+ Name[pt]=Informação do MPEG
+ Name[pt_BR]=Informação do MPEG
+ Name[ru]=Сведения о MPEG
++Name[sl]=Informacije o MPEG
+ Name[sr]=Информације о MPEG-у
+ Name[sr at Latn]=Informacije o MPEG-u
+ Name[sv]=MPEG-information




More information about the pkg-kde-commits mailing list