Merged revisions 870426 via svnmerge from

svn+ssh://tmcguire@svn.kde.org/home/kde/branches/KDE/4.1/kdepim

........
  r870426 | tmcguire | 2008-10-12 16:23:56 +0200 (Sun, 12 Oct 2008) | 17 lines
  
  Backport r867007 by tmcguire from trunk to the 4.1 branch:
  
  Fix the charset name being "ISO 8859-xx" instead of "ISO-8859-xx".
  
  This is because KCharsets::encodingForName() prefers to return something "human-readable" now,
  thank you very much. I wonder why this worked in 3.5, the hypen seems to be missing there as well.
   The KCharsets code is too much magic to be understandable unfortunatley.
  
  Apparently KMail has been sending invalid messages ever since 4.1 was released.
  Urgh :(
  
  I hope I didn't mix human- and machine-readable names anywhere, otherwise things will
  break. This is also the reason I was too afraid to change this in kdelibs.
  
  CCBUG: 171947
........

svn path=/branches/kdepim/enterprise4/kdepim/; revision=870472
wilder-work
Thomas McGuire 18 years ago
parent 14e6d70ca3
commit 72c008ef4e
  1. 10
      configuredialog.cpp
  2. 7
      kmcomposewin.cpp
  3. 14
      kmmsgbase.cpp
  4. 8
      kmmsgbase.h
  5. 4
      kmreaderwin.cpp

@ -2138,8 +2138,8 @@ void AppearancePage::ReaderTab::readCurrentFallbackCodec()
bool found = false;
for( ; it != end; ++it)
{
const QString encoding = KGlobal::charsets()->encodingForName(*it);
if ( encoding == "ISO 8859-15" )
const QString encoding = KMMsgBase::encodingForName(*it);
if ( encoding == "ISO-8859-15" )
indexOfLatin9 = i;
if( encoding == currentEncoding )
{
@ -2167,7 +2167,7 @@ void AppearancePage::ReaderTab::readCurrentOverrideCodec()
int i = 0;
for( ; it != end; ++it)
{
if( KGlobal::charsets()->encodingForName(*it) == currentOverrideEncoding )
if( KMMsgBase::encodingForName(*it) == currentOverrideEncoding )
{
mOverrideCharsetCombo->setCurrentIndex( i );
break;
@ -2211,11 +2211,11 @@ void AppearancePage::ReaderTab::save() {
GlobalSettings::self()->setCollapseQuoteLevelSpin( mCollapseQuoteLevelSpin->value() );
GlobalSettings::self()->setFallbackCharacterEncoding(
KGlobal::charsets()->encodingForName( mCharsetCombo->currentText() ) );
KMMsgBase::encodingForName( mCharsetCombo->currentText() ) );
GlobalSettings::self()->setOverrideCharacterEncoding(
mOverrideCharsetCombo->currentIndex() == 0 ?
QString() :
KGlobal::charsets()->encodingForName( mOverrideCharsetCombo->currentText() ) );
KMMsgBase::encodingForName( mOverrideCharsetCombo->currentText() ) );
}

@ -2245,7 +2245,7 @@ void KMComposeWin::setCharset( const QByteArray &aCharset, bool forceDefault )
++it, i++ ) {
if (i > 0 && ((mCharset == "us-ascii" && i == 1) ||
(i != 1 && KGlobal::charsets()->codecForName(
KGlobal::charsets()->encodingForName(*it))
KGlobal::charsets()->encodingForName(*it))
== KGlobal::charsets()->codecForName(mCharset))))
{
mEncodingAction->setCurrentItem( i );
@ -2470,7 +2470,7 @@ void KMComposeWin::slotInsertFile()
{
KConfig *config = KMKernel::config();
KConfigGroup group( config, "Composer" );
QString encoding = KGlobal::charsets()->encodingForName(encodingStr).toLatin1();
QString encoding = KMMsgBase::encodingForName(encodingStr).toLatin1();
QStringList urls = group.readEntry( "recent-urls", QStringList() );
QStringList encodings = group.readEntry( "recent-encodings", QStringList() );
// Prevent config file from growing without bound
@ -2534,8 +2534,7 @@ void KMComposeWin::slotSetCharset()
}
mAutoCharset = false;
mCharset = KGlobal::charsets()->encodingForName( mEncodingAction->
currentText() ).toLatin1();
mCharset = KMMsgBase::encodingForName( mEncodingAction->currentText() ).toLatin1();
}
//-----------------------------------------------------------------------------

@ -399,6 +399,20 @@ QStringList KMMsgBase::supportedEncodings(bool usAscii)
return encodings;
}
//-----------------------------------------------------------------------------
QString KMMsgBase::encodingForName( const QString &descriptiveName )
{
QString encoding = KGlobal::charsets()->encodingForName( descriptiveName );
// According to http://www.iana.org/assignments/character-sets, uppercase is
// prefered in MIME headers
if ( encoding.toUpper().contains( "ISO " ) ) {
encoding = encoding.toUpper();
encoding.replace( "ISO ", "ISO-" );
}
return encoding;
}
//-----------------------------------------------------------------------------
QByteArray fallbackCharsetForRFC2047Decoding( const QByteArray &prefCharset )
{

@ -259,6 +259,14 @@ public:
/** Return a list of the supported encodings */
static QStringList supportedEncodings(bool usAscii);
/**
* Drop-in replacement for KCharsets::encodingForName(). The problem with
* the KCharsets function is that it returns "human-readable" encoding names
* like "ISO 8859-15" instead of valid encoding names like "ISO-8859-15".
* This function fixes this by replacing whitespace with a hyphen.
*/
static QString encodingForName( const QString &descriptiveName );
/** Copy all values from other to this object. */
void assign(const KMMsgBase* other);

@ -1118,7 +1118,7 @@ void KMReaderWin::setOverrideEncoding( const QString & encoding )
QStringList encodings = mSelectEncodingAction->items();
int i = 0;
for ( QStringList::const_iterator it = encodings.begin(), end = encodings.end(); it != end; ++it, ++i ) {
if ( KGlobal::charsets()->encodingForName( *it ) == encoding ) {
if ( KMMsgBase::encodingForName( *it ) == encoding ) {
mSelectEncodingAction->setCurrentItem( i );
break;
}
@ -1158,7 +1158,7 @@ void KMReaderWin::slotSetEncoding()
if ( mSelectEncodingAction->currentItem() == 0 ) // Auto
mOverrideEncoding.clear();
else
mOverrideEncoding = KGlobal::charsets()->encodingForName( mSelectEncodingAction->currentText() );
mOverrideEncoding = KMMsgBase::encodingForName( mSelectEncodingAction->currentText() );
update( true );
}

Loading…
Cancel
Save