summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/launcher/inputmethods.cpp4
1 files changed, 4 insertions, 0 deletions
diff --git a/core/launcher/inputmethods.cpp b/core/launcher/inputmethods.cpp
index 765dfe9..09b9a83 100644
--- a/core/launcher/inputmethods.cpp
+++ b/core/launcher/inputmethods.cpp
@@ -99,219 +99,223 @@ InputMethods::InputMethods( QWidget *parent ) :
99 99
100 connect( (QPEApplication*)qApp, SIGNAL(clientMoused()), 100 connect( (QPEApplication*)qApp, SIGNAL(clientMoused()),
101 this, SLOT(resetStates()) ); 101 this, SLOT(resetStates()) );
102 102
103 loadInputMethods(); 103 loadInputMethods();
104} 104}
105 105
106InputMethods::~InputMethods() 106InputMethods::~InputMethods()
107{ 107{
108#ifndef SINGLE_APP 108#ifndef SINGLE_APP
109 QValueList<InputMethod>::Iterator mit; 109 QValueList<InputMethod>::Iterator mit;
110 for ( mit = inputMethodList.begin(); mit != inputMethodList.end(); ++mit ) { 110 for ( mit = inputMethodList.begin(); mit != inputMethodList.end(); ++mit ) {
111 (void) (*mit).interface->release(); 111 (void) (*mit).interface->release();
112 (*mit).library->unload(); 112 (*mit).library->unload();
113 delete (*mit).library; 113 delete (*mit).library;
114 } 114 }
115#endif 115#endif
116} 116}
117 117
118void InputMethods::hideInputMethod() 118void InputMethods::hideInputMethod()
119{ 119{
120 kbdButton->setOn( FALSE ); 120 kbdButton->setOn( FALSE );
121} 121}
122 122
123void InputMethods::showInputMethod() 123void InputMethods::showInputMethod()
124{ 124{
125 kbdButton->setOn( TRUE ); 125 kbdButton->setOn( TRUE );
126} 126}
127 127
128void InputMethods::showInputMethod(const QString& name) 128void InputMethods::showInputMethod(const QString& name)
129{ 129{
130 int i = 0; 130 int i = 0;
131 QValueList<InputMethod>::Iterator it; 131 QValueList<InputMethod>::Iterator it;
132 InputMethod *im = 0; 132 InputMethod *im = 0;
133 for ( it = inputMethodList.begin(); it != inputMethodList.end(); ++it, i++ ) { 133 for ( it = inputMethodList.begin(); it != inputMethodList.end(); ++it, i++ ) {
134 if ( (*it).interface->name() == name ) { 134 if ( (*it).interface->name() == name ) {
135 im = &(*it); 135 im = &(*it);
136 break; 136 break;
137 } 137 }
138 } 138 }
139 if ( im ) 139 if ( im )
140 chooseMethod(im); 140 chooseMethod(im);
141} 141}
142 142
143void InputMethods::resetStates() 143void InputMethods::resetStates()
144{ 144{
145 if ( method ) 145 if ( method )
146 method->interface->resetState(); 146 method->interface->resetState();
147} 147}
148 148
149QRect InputMethods::inputRect() const 149QRect InputMethods::inputRect() const
150{ 150{
151 if ( !method || !method->widget->isVisible() ) 151 if ( !method || !method->widget->isVisible() )
152 return QRect(); 152 return QRect();
153 else 153 else
154 return method->widget->geometry(); 154 return method->widget->geometry();
155} 155}
156 156
157void InputMethods::loadInputMethods() 157void InputMethods::loadInputMethods()
158{ 158{
159#ifndef SINGLE_APP 159#ifndef SINGLE_APP
160 hideInputMethod(); 160 hideInputMethod();
161 method = 0; 161 method = 0;
162 162
163 QValueList<InputMethod>::Iterator mit; 163 QValueList<InputMethod>::Iterator mit;
164 for ( mit = inputMethodList.begin(); mit != inputMethodList.end(); ++mit ) { 164 for ( mit = inputMethodList.begin(); mit != inputMethodList.end(); ++mit ) {
165 (*mit).interface->release(); 165 (*mit).interface->release();
166 (*mit).library->unload(); 166 (*mit).library->unload();
167 delete (*mit).library; 167 delete (*mit).library;
168 } 168 }
169 inputMethodList.clear(); 169 inputMethodList.clear();
170 170
171 QString path = QPEApplication::qpeDir() + "/plugins/inputmethods"; 171 QString path = QPEApplication::qpeDir() + "/plugins/inputmethods";
172 QDir dir( path, "lib*.so" ); 172 QDir dir( path, "lib*.so" );
173 QStringList list = dir.entryList(); 173 QStringList list = dir.entryList();
174 QStringList::Iterator it; 174 QStringList::Iterator it;
175 for ( it = list.begin(); it != list.end(); ++it ) { 175 for ( it = list.begin(); it != list.end(); ++it ) {
176 InputMethodInterface *iface = 0; 176 InputMethodInterface *iface = 0;
177 QLibrary *lib = new QLibrary( path + "/" + *it ); 177 QLibrary *lib = new QLibrary( path + "/" + *it );
178 if ( lib->queryInterface( IID_InputMethod, (QUnknownInterface**)&iface ) == QS_OK ) { 178 if ( lib->queryInterface( IID_InputMethod, (QUnknownInterface**)&iface ) == QS_OK ) {
179 InputMethod input; 179 InputMethod input;
180 input.library = lib; 180 input.library = lib;
181 input.interface = iface; 181 input.interface = iface;
182 input.widget = input.interface->inputMethod( 0, inputWidgetStyle ); 182 input.widget = input.interface->inputMethod( 0, inputWidgetStyle );
183 input.interface->onKeyPress( this, SLOT(sendKey(ushort,ushort,ushort,bool,bool)) ); 183 input.interface->onKeyPress( this, SLOT(sendKey(ushort,ushort,ushort,bool,bool)) );
184 inputMethodList.append( input ); 184 inputMethodList.append( input );
185 185
186 QString type = (*it).left( (*it).find(".") ); 186 QString type = (*it).left( (*it).find(".") );
187 QStringList langs = Global::languageList(); 187 QStringList langs = Global::languageList();
188 for (QStringList::ConstIterator lit = langs.begin(); lit!=langs.end(); ++lit) { 188 for (QStringList::ConstIterator lit = langs.begin(); lit!=langs.end(); ++lit) {
189 QString lang = *lit; 189 QString lang = *lit;
190 QTranslator * trans = new QTranslator(qApp); 190 QTranslator * trans = new QTranslator(qApp);
191 QString tfn = QPEApplication::qpeDir()+"/i18n/"+lang+"/"+type+".qm"; 191 QString tfn = QPEApplication::qpeDir()+"/i18n/"+lang+"/"+type+".qm";
192 if ( trans->load( tfn )) 192 if ( trans->load( tfn ))
193 qApp->installTranslator( trans ); 193 qApp->installTranslator( trans );
194 else 194 else
195 delete trans; 195 delete trans;
196 } 196 }
197 } else { 197 } else {
198 delete lib; 198 delete lib;
199 } 199 }
200 } 200 }
201#else 201#else
202 InputMethod input; 202 InputMethod input;
203 input.interface = new HandwritingImpl(); 203 input.interface = new HandwritingImpl();
204 input.widget = input.interface->inputMethod( 0, inputWidgetStyle ); 204 input.widget = input.interface->inputMethod( 0, inputWidgetStyle );
205 input.interface->onKeyPress( this, SLOT(sendKey(ushort,ushort,ushort,bool,bool)) ); 205 input.interface->onKeyPress( this, SLOT(sendKey(ushort,ushort,ushort,bool,bool)) );
206 inputMethodList.append( input ); 206 inputMethodList.append( input );
207 input.interface = new KeyboardImpl(); 207 input.interface = new KeyboardImpl();
208 input.widget = input.interface->inputMethod( 0, inputWidgetStyle ); 208 input.widget = input.interface->inputMethod( 0, inputWidgetStyle );
209 input.interface->onKeyPress( this, SLOT(sendKey(ushort,ushort,ushort,bool,bool)) ); 209 input.interface->onKeyPress( this, SLOT(sendKey(ushort,ushort,ushort,bool,bool)) );
210 inputMethodList.append( input ); 210 inputMethodList.append( input );
211 input.interface = new PickboardImpl(); 211 input.interface = new PickboardImpl();
212 input.widget = input.interface->inputMethod( 0, inputWidgetStyle ); 212 input.widget = input.interface->inputMethod( 0, inputWidgetStyle );
213 input.interface->onKeyPress( this, SLOT(sendKey(ushort,ushort,ushort,bool,bool)) ); 213 input.interface->onKeyPress( this, SLOT(sendKey(ushort,ushort,ushort,bool,bool)) );
214 inputMethodList.append( input ); 214 inputMethodList.append( input );
215#endif 215#endif
216 if ( !inputMethodList.isEmpty() ) { 216 if ( !inputMethodList.isEmpty() ) {
217 method = &inputMethodList[0]; 217 method = &inputMethodList[0];
218 Config cfg("qpe"); 218 Config cfg("qpe");
219 cfg.setGroup("InputMethod"); 219 cfg.setGroup("InputMethod");
220 QString curMethod = cfg.readEntry("current",""); 220 QString curMethod = cfg.readEntry("current","");
221 int i = 0; 221 int i = 0;
222 QValueList<InputMethod>::Iterator it; 222 QValueList<InputMethod>::Iterator it;
223 for ( it = inputMethodList.begin(); it != inputMethodList.end(); ++it, i++ ) { 223 for ( it = inputMethodList.begin(); it != inputMethodList.end(); ++it, i++ ) {
224 if((*it).interface->name() == curMethod) { 224 if((*it).interface->name() == curMethod) {
225 method = &inputMethodList[i]; 225 method = &inputMethodList[i];
226 } 226 }
227 } 227 }
228 kbdButton->setPixmap( *method->interface->icon() ); 228 kbdButton->setPixmap( *method->interface->icon() );
229 } 229 }
230 if ( !inputMethodList.isEmpty() ) 230 if ( !inputMethodList.isEmpty() )
231 kbdButton->show(); 231 kbdButton->show();
232 else 232 else
233 kbdButton->hide(); 233 kbdButton->hide();
234 if ( inputMethodList.count() > 1 ) 234 if ( inputMethodList.count() > 1 )
235 kbdChoice->show(); 235 kbdChoice->show();
236 else 236 else
237 kbdChoice->hide(); 237 kbdChoice->hide();
238} 238}
239 239
240void InputMethods::chooseKbd() 240void InputMethods::chooseKbd()
241{ 241{
242 QPopupMenu pop( this ); 242 QPopupMenu pop( this );
243 243
244 int i = 0; 244 int i = 0;
245 QValueList<InputMethod>::Iterator it; 245 QValueList<InputMethod>::Iterator it;
246 for ( it = inputMethodList.begin(); it != inputMethodList.end(); ++it, i++ ) { 246 for ( it = inputMethodList.begin(); it != inputMethodList.end(); ++it, i++ ) {
247 pop.insertItem( (*it).interface->name(), i ); 247 pop.insertItem( (*it).interface->name(), i );
248 if ( method == &(*it) ) 248 if ( method == &(*it) )
249 pop.setItemChecked( i, TRUE ); 249 pop.setItemChecked( i, TRUE );
250 } 250 }
251 251
252 QPoint pt = mapToGlobal(kbdChoice->geometry().topRight()); 252 QPoint pt = mapToGlobal(kbdChoice->geometry().topRight());
253 QSize s = pop.sizeHint(); 253 QSize s = pop.sizeHint();
254 pt.ry() -= s.height(); 254 pt.ry() -= s.height();
255 pt.rx() -= s.width(); 255 pt.rx() -= s.width();
256 i = pop.exec( pt ); 256 i = pop.exec( pt );
257 if ( i == -1 ) 257 if ( i == -1 )
258 return; 258 return;
259 InputMethod *im = &inputMethodList[i]; 259 InputMethod *im = &inputMethodList[i];
260 chooseMethod(im); 260 chooseMethod(im);
261} 261}
262 262
263void InputMethods::chooseMethod(InputMethod* im) 263void InputMethods::chooseMethod(InputMethod* im)
264{ 264{
265 if ( im != method ) { 265 if ( im != method ) {
266 if ( method && method->widget->isVisible() ) 266 if ( method && method->widget->isVisible() )
267 method->widget->hide(); 267 method->widget->hide();
268 method = im; 268 method = im;
269 Config cfg("qpe"); 269 Config cfg("qpe");
270 cfg.setGroup("InputMethod"); 270 cfg.setGroup("InputMethod");
271 cfg.writeEntry("current", method->interface->name()); 271 cfg.writeEntry("current", method->interface->name());
272 kbdButton->setPixmap( *method->interface->icon() ); 272 kbdButton->setPixmap( *method->interface->icon() );
273 } 273 }
274 if ( !kbdButton->isOn() ) 274 if ( !kbdButton->isOn() )
275 kbdButton->setOn( TRUE ); 275 kbdButton->setOn( TRUE );
276 else 276 else
277 showKbd( TRUE ); 277 showKbd( TRUE );
278} 278}
279 279
280 280
281void InputMethods::showKbd( bool on ) 281void InputMethods::showKbd( bool on )
282{ 282{
283 if ( !method ) 283 if ( !method )
284 return; 284 return;
285 285
286 if ( on ) { 286 if ( on ) {
287 method->interface->resetState(); 287 method->interface->resetState();
288 // HACK... Make the texteditor fit with all input methods 288 // HACK... Make the texteditor fit with all input methods
289 // Input methods should also never use more than about 40% of the screen 289 // Input methods should also never use more than about 40% of the screen
290 int height = QMIN( method->widget->sizeHint().height(), 134 ); 290 int height = QMIN( method->widget->sizeHint().height(), 134 );
291 #ifdef QT_QWS_SIMPAD
292 method->widget->resize( qApp->desktop()->width() / 2, height ); // make it half the width on the SIMpad
293 #else
291 method->widget->resize( qApp->desktop()->width(), height ); 294 method->widget->resize( qApp->desktop()->width(), height );
295 #endif
292 method->widget->move( 0, mapToGlobal( QPoint() ).y() - height ); 296 method->widget->move( 0, mapToGlobal( QPoint() ).y() - height );
293 method->widget->show(); 297 method->widget->show();
294 } else { 298 } else {
295 method->widget->hide(); 299 method->widget->hide();
296 } 300 }
297 301
298 emit inputToggled( on ); 302 emit inputToggled( on );
299} 303}
300 304
301bool InputMethods::shown() const 305bool InputMethods::shown() const
302{ 306{
303 return method && method->widget->isVisible(); 307 return method && method->widget->isVisible();
304} 308}
305 309
306QString InputMethods::currentShown() const 310QString InputMethods::currentShown() const
307{ 311{
308 return method && method->widget->isVisible() 312 return method && method->widget->isVisible()
309 ? method->interface->name() : QString::null; 313 ? method->interface->name() : QString::null;
310} 314}
311 315
312void InputMethods::sendKey( ushort unicode, ushort scancode, ushort mod, bool press, bool repeat ) 316void InputMethods::sendKey( ushort unicode, ushort scancode, ushort mod, bool press, bool repeat )
313{ 317{
314#if defined(Q_WS_QWS) 318#if defined(Q_WS_QWS)
315 QWSServer::sendKeyEvent( unicode, scancode, mod, press, repeat ); 319 QWSServer::sendKeyEvent( unicode, scancode, mod, press, repeat );
316#endif 320#endif
317} 321}