| Summary: | dcop setEncoding does not work | ||
|---|---|---|---|
| Product: | [Applications] konsole | Reporter: | Elan Ruusamäe <glen> |
| Component: | general | Assignee: | Konsole Bugs <konsole-bugs-null> |
| Status: | RESOLVED FIXED | ||
| Severity: | normal | ||
| Priority: | NOR | ||
| Version First Reported In: | 1.6 | ||
| Target Milestone: | --- | ||
| Platform: | unspecified | ||
| OS: | Linux | ||
| Latest Commit: | Version Fixed/Implemented In: | ||
| Sentry Crash Report: | |||
|
Description
Elan Ruusamäe
2006-01-29 20:53:45 UTC
Yea, the encoding handling is awkward in 3.5.x. I'm not sure I can get this in for the 3.5.x series.... SVN commit 540465 by hindenburg:
Fix DCOP call setEncoding. I pray KDE4 will have better encoding coding.
BUG: 120998
M +25 -44 konsole.cpp
--- branches/KDE/3.5/kdebase/konsole/konsole/konsole.cpp #540464:540465
@@ -845,6 +845,7 @@
}
}
+// Called via menu
void Konsole::slotSetEncoding()
{
if (!se) return;
@@ -2612,9 +2613,7 @@
activateSession(oldSession);
}
-// Set session encoding; don't use any menu items.
-// System's encoding list may change, so search for encoding string.
-// FIXME: A lot of duplicate code from slotSetSessionEncoding
+// Called by newSession and DCOP function below
void Konsole::setSessionEncoding( const QString &encoding, TESession *session )
{
if ( encoding.isEmpty() )
@@ -2632,58 +2631,39 @@
// Encoding was found; now try to figure out which Encoding menu item
// it corresponds to.
int i = 0;
+ bool found_encoding = false;
QStringList encodingNames = KGlobal::charsets()->descriptiveEncodingNames();
- QStringList::Iterator it = encodingNames.begin();
- while ( it != encodingNames.end() &&
- KGlobal::charsets()->encodingForName(*it) != encoding )
+ QStringList::ConstIterator it = encodingNames.begin();
+ QString t_encoding = encoding.lower();
+
+ while ( it != encodingNames.end() && !found_encoding )
{
+ if ( QString::compare( KGlobal::charsets()->encodingForName(*it),
+ t_encoding ) == 0 ) {
+ found_encoding = true;
+ }
i++; it++;
}
- i++; // Take into account the first entry: Default
- //kdDebug()<<"setSessionEncoding="<<encoding<<"; "<<i<<endl;
+ // BR114535 : Remove jis7 due to infinite loop.
+ if ( enc == "jis7" ) {
+ kdWarning()<<"Encoding Japanese (jis7) currently does not work! BR114535"<<endl;
+ return;
+ }
- session->setEncodingNo( i );
- session->getEmulation()->setCodec(qtc);
- if (se == session)
+ if ( found_encoding )
+ {
+ session->setEncodingNo( i );
+ session->getEmulation()->setCodec(qtc);
+ if (se == session)
activateSession(se);
-
+ }
}
+// Called via DCOP only
void Konsole::slotSetSessionEncoding(TESession *session, const QString &encoding)
{
- if (!selectSetEncoding)
- makeGUI();
-
- if ( !selectSetEncoding ) // when action/settings=false
- return;
-
- QStringList items = selectSetEncoding->items();
-
- QString enc;
- unsigned int i = 0;
- for(QStringList::ConstIterator it = items.begin();
- it != items.end(); ++it, ++i)
- {
- if ((*it).find(encoding) != -1)
- {
- enc = *it;
- break;
- }
- }
- if (i >= items.count())
- return;
-
- bool found = false;
- enc = KGlobal::charsets()->encodingForName(enc);
- QTextCodec * qtc = KGlobal::charsets()->codecForName(enc, found);
- if(!found)
- return;
-
- session->setEncodingNo( i + 1 ); // Take into account Default
- session->getEmulation()->setCodec(qtc);
- if (se == session)
- activateSession(se);
+ setSessionEncoding( encoding, session );
}
void Konsole::slotGetSessionSchema(TESession *session, QString &schema)
@@ -3575,6 +3555,7 @@
if (s) setSchema(s);
}
+// Called via main.cpp for session manager.
void Konsole::setEncoding(int index)
{
if ( selectSetEncoding ) {
Still no working, KDE 3.5.9 and Ubuntu Hardy: kurppa@lanka:~$ kwin --version Qt: 3.3.8b KDE: 3.5.9 KWin: 3.0 kurppa@lanka:~$ lsb_release -r Release: 8.04 kurppa@lanka:~$ dcop konsole-29509 session-1 encoding ISO 8859-2 kurppa@lanka:~$ dcop konsole-29509 session-1 setEncoding ISO-8859-1 kurppa@lanka:~$ dcop konsole-29509 session-1 encoding ISO 8859-2 kurppa@lanka:~$ dcop konsole-29509 session-1 setEncoding UTF-8 kurppa@lanka:~$ dcop konsole-29509 session-1 encoding ISO 8859-2 kurppa@lanka:~$ dcop konsole-29509 session-1 setEncoding ISO-8859-15 kurppa@lanka:~$ dcop konsole-29509 session-1 encoding ISO 8859-2 kurppa@lanka:~$ dcop konsole-29509 session-1 setEncoding iso-8859-15 kurppa@lanka:~$ dcop konsole-29509 session-1 encoding ISO 8859-2 kurppa@lanka:~$ dcop konsole-29509 session-1 setEncoding ISO-8859-15 kurppa@lanka:~$ dcop konsole-29509 session-1 encoding ISO 8859-2 kurppa@lanka:~$ dcop konsole-29509 session-1 setEncoding UTF-8 kurppa@lanka:~$ dcop konsole-29509 session-1 encoding ISO 8859-2 kurppa@lanka:~$ dcop konsole-29509 session-1 setEncoding utf-8 kurppa@lanka:~$ dcop konsole-29509 session-1 encoding ISO 8859-2 kurppa@lanka:~$ |