-rw-r--r-- | core/launcher/inputmethods.cpp | 152 |
1 files changed, 87 insertions, 65 deletions
diff --git a/core/launcher/inputmethods.cpp b/core/launcher/inputmethods.cpp index 003dc77..da98e07 100644 --- a/core/launcher/inputmethods.cpp +++ b/core/launcher/inputmethods.cpp @@ -20,2 +20,3 @@ +#define QTOPIA_INTERNAL_LANGLIST #include "inputmethods.h" @@ -26,2 +27,3 @@ #include <qpe/qlibrary.h> +#include <qpe/global.h> @@ -65,5 +67,5 @@ static const char * tri_xpm[]={ static const int inputWidgetStyle = QWidget::WStyle_Customize | - QWidget::WStyle_Tool | - QWidget::WStyle_StaysOnTop | - QWidget::WGroupLeader; + QWidget::WStyle_Tool | + QWidget::WStyle_StaysOnTop | + QWidget::WGroupLeader; @@ -96,3 +98,3 @@ InputMethods::InputMethods( QWidget *parent ) : connect( (QPEApplication*)qApp, SIGNAL(clientMoused()), - this, SLOT(resetStates()) ); + this, SLOT(resetStates()) ); @@ -106,5 +108,5 @@ InputMethods::~InputMethods() for ( mit = inputMethodList.begin(); mit != inputMethodList.end(); ++mit ) { - int i = (*mit).interface->release(); - (*mit).library->unload(); - delete (*mit).library; + int i = (*mit).interface->release(); + (*mit).library->unload(); + delete (*mit).library; } @@ -129,9 +131,9 @@ void InputMethods::showInputMethod(const QString& name) for ( it = inputMethodList.begin(); it != inputMethodList.end(); ++it, i++ ) { - if ( (*it).interface->name() == name ) { - im = &(*it); - break; - } + if ( (*it).interface->name() == name ) { + im = &(*it); + break; + } } if ( im ) - chooseMethod(im); + chooseMethod(im); } @@ -141,3 +143,3 @@ void InputMethods::resetStates() if ( method ) - method->interface->resetState(); + method->interface->resetState(); } @@ -147,5 +149,5 @@ QRect InputMethods::inputRect() const if ( !method || !method->widget->isVisible() ) - return QRect(); + return QRect(); else - return method->widget->geometry(); + return method->widget->geometry(); } @@ -160,5 +162,5 @@ void InputMethods::loadInputMethods() for ( mit = inputMethodList.begin(); mit != inputMethodList.end(); ++mit ) { - (*mit).interface->release(); - (*mit).library->unload(); - delete (*mit).library; + (*mit).interface->release(); + (*mit).library->unload(); + delete (*mit).library; } @@ -171,23 +173,26 @@ void InputMethods::loadInputMethods() for ( it = list.begin(); it != list.end(); ++it ) { - InputMethodInterface *iface = 0; - QLibrary *lib = new QLibrary( path + "/" + *it ); - if ( lib->queryInterface( IID_InputMethod, (QUnknownInterface**)&iface ) == QS_OK ) { - InputMethod input; - input.library = lib; - input.interface = iface; - input.widget = input.interface->inputMethod( 0, inputWidgetStyle ); - input.interface->onKeyPress( this, SLOT(sendKey(ushort,ushort,ushort,bool,bool)) ); - inputMethodList.append( input ); - QString lang = getenv( "LANG" ); - QTranslator * trans = new QTranslator(qApp); - QString type = (*it).left( (*it).find(".") ); - QString tfn = QPEApplication::qpeDir()+"/i18n/"+lang+"/"+type+".qm"; - qDebug("tr for inputmethod: %s", tfn.latin1() ); - if ( trans->load( tfn )) - qApp->installTranslator( trans ); - else - delete trans; - } else { - delete lib; - } + InputMethodInterface *iface = 0; + QLibrary *lib = new QLibrary( path + "/" + *it ); + if ( lib->queryInterface( IID_InputMethod, (QUnknownInterface**)&iface ) == QS_OK ) { + InputMethod input; + input.library = lib; + input.interface = iface; + input.widget = input.interface->inputMethod( 0, inputWidgetStyle ); + input.interface->onKeyPress( this, SLOT(sendKey(ushort,ushort,ushort,bool,bool)) ); + inputMethodList.append( input ); + + QString type = (*it).left( (*it).find(".") ); + QStringList langs = Global::languageList(); + for (QStringList::ConstIterator lit = langs.begin(); lit!=langs.end(); ++lit) { + QString lang = *lit; + QTranslator * trans = new QTranslator(qApp); + QString tfn = QPEApplication::qpeDir()+"/i18n/"+lang+"/"+type+".qm"; + if ( trans->load( tfn )) + qApp->installTranslator( trans ); + else + delete trans; + } + } else { + delete lib; + } } @@ -209,13 +214,27 @@ void InputMethods::loadInputMethods() if ( !inputMethodList.isEmpty() ) { - method = &inputMethodList[0]; - kbdButton->setPixmap( *method->interface->icon() ); + Config cfg("qpe"); + cfg.setGroup("InputMethod"); + QString curMethod = cfg.readEntry("current",""); + if(curMethod.isEmpty()) { + method = &inputMethodList[0]; + } else { + int i = 0; + QValueList<InputMethod>::Iterator it; + for ( it = inputMethodList.begin(); it != inputMethodList.end(); ++it, i++ ) { + if((*it).interface->name() == curMethod) { + method = &inputMethodList[i]; +// qDebug(curMethod); + } + } + } + kbdButton->setPixmap( *method->interface->icon() ); } if ( !inputMethodList.isEmpty() ) - kbdButton->show(); + kbdButton->show(); else - kbdButton->hide(); + kbdButton->hide(); if ( inputMethodList.count() > 1 ) - kbdChoice->show(); + kbdChoice->show(); else - kbdChoice->hide(); + kbdChoice->hide(); } @@ -229,5 +248,5 @@ void InputMethods::chooseKbd() for ( it = inputMethodList.begin(); it != inputMethodList.end(); ++it, i++ ) { - pop.insertItem( (*it).interface->name(), i ); - if ( method == &(*it) ) - pop.setItemChecked( i, TRUE ); + pop.insertItem( (*it).interface->name(), i ); + if ( method == &(*it) ) + pop.setItemChecked( i, TRUE ); } @@ -240,3 +259,3 @@ void InputMethods::chooseKbd() if ( i == -1 ) - return; + return; InputMethod *im = &inputMethodList[i]; @@ -248,11 +267,14 @@ void InputMethods::chooseMethod(InputMethod* im) if ( im != method ) { - if ( method && method->widget->isVisible() ) - method->widget->hide(); - method = im; - kbdButton->setPixmap( *method->interface->icon() ); + if ( method && method->widget->isVisible() ) + method->widget->hide(); + method = im; + Config cfg("qpe"); + cfg.setGroup("InputMethod"); + cfg.writeEntry("current", method->interface->name()); + kbdButton->setPixmap( *method->interface->icon() ); } if ( !kbdButton->isOn() ) - kbdButton->setOn( TRUE ); + kbdButton->setOn( TRUE ); else - showKbd( TRUE ); + showKbd( TRUE ); } @@ -263,14 +285,14 @@ void InputMethods::showKbd( bool on ) if ( !method ) - return; + return; if ( on ) { - method->interface->resetState(); - // HACK... Make the texteditor fit with all input methods - // Input methods should also never use more than about 40% of the screen - int height = QMIN( method->widget->sizeHint().height(), 134 ); - method->widget->resize( qApp->desktop()->width(), height ); - method->widget->move( 0, mapToGlobal( QPoint() ).y() - height ); - method->widget->show(); + method->interface->resetState(); + // HACK... Make the texteditor fit with all input methods + // Input methods should also never use more than about 40% of the screen + int height = QMIN( method->widget->sizeHint().height(), 134 ); + method->widget->resize( qApp->desktop()->width(), height ); + method->widget->move( 0, mapToGlobal( QPoint() ).y() - height ); + method->widget->show(); } else { - method->widget->hide(); + method->widget->hide(); } @@ -288,3 +310,3 @@ QString InputMethods::currentShown() const return method && method->widget->isVisible() - ? method->interface->name() : QString::null; + ? method->interface->name() : QString::null; } |