summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/launcher/inputmethods.cpp152
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
@@ -19,4 +19,5 @@
**********************************************************************/
+#define QTOPIA_INTERNAL_LANGLIST
#include "inputmethods.h"
@@ -25,4 +26,5 @@
#include <qpe/inputmethodinterface.h>
#include <qpe/qlibrary.h>
+#include <qpe/global.h>
#include <qpopupmenu.h>
@@ -64,7 +66,7 @@ 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;
InputMethods::InputMethods( QWidget *parent ) :
@@ -95,5 +97,5 @@ InputMethods::InputMethods( QWidget *parent ) :
connect( (QPEApplication*)qApp, SIGNAL(clientMoused()),
- this, SLOT(resetStates()) );
+ this, SLOT(resetStates()) );
loadInputMethods();
@@ -105,7 +107,7 @@ InputMethods::~InputMethods()
QValueList<InputMethod>::Iterator mit;
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;
}
#endif
@@ -128,11 +130,11 @@ void InputMethods::showInputMethod(const QString& name)
InputMethod *im = 0;
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);
}
@@ -140,5 +142,5 @@ void InputMethods::resetStates()
{
if ( method )
- method->interface->resetState();
+ method->interface->resetState();
}
@@ -146,7 +148,7 @@ QRect InputMethods::inputRect() const
{
if ( !method || !method->widget->isVisible() )
- return QRect();
+ return QRect();
else
- return method->widget->geometry();
+ return method->widget->geometry();
}
@@ -159,7 +161,7 @@ void InputMethods::loadInputMethods()
QValueList<InputMethod>::Iterator mit;
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;
}
inputMethodList.clear();
@@ -170,25 +172,28 @@ void InputMethods::loadInputMethods()
QStringList::Iterator it;
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;
+ }
}
#else
@@ -208,15 +213,29 @@ void InputMethods::loadInputMethods()
#endif
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();
}
@@ -228,7 +247,7 @@ void InputMethods::chooseKbd()
QValueList<InputMethod>::Iterator it;
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 );
}
@@ -239,5 +258,5 @@ void InputMethods::chooseKbd()
i = pop.exec( pt );
if ( i == -1 )
- return;
+ return;
InputMethod *im = &inputMethodList[i];
chooseMethod(im);
@@ -247,13 +266,16 @@ 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 );
}
@@ -262,16 +284,16 @@ 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();
}
@@ -287,5 +309,5 @@ QString InputMethods::currentShown() const
{
return method && method->widget->isVisible()
- ? method->interface->name() : QString::null;
+ ? method->interface->name() : QString::null;
}