summaryrefslogtreecommitdiff
path: root/library/qpeapplication.cpp
Unidiff
Diffstat (limited to 'library/qpeapplication.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--library/qpeapplication.cpp142
1 files changed, 103 insertions, 39 deletions
diff --git a/library/qpeapplication.cpp b/library/qpeapplication.cpp
index 9286f9f..149e6bb 100644
--- a/library/qpeapplication.cpp
+++ b/library/qpeapplication.cpp
@@ -1,398 +1,399 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. 2** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of the Qtopia Environment. 4** This file is part of the Qtopia Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19** $Id$ 19*/
20**
21**********************************************************************/
22#define QTOPIA_INTERNAL_LANGLIST 20#define QTOPIA_INTERNAL_LANGLIST
23#include <stdlib.h> 21#include <stdlib.h>
24#include <unistd.h> 22#include <unistd.h>
25#include <linux/limits.h> // needed for some toolchains (PATH_MAX) 23#include <linux/limits.h> // needed for some toolchains (PATH_MAX)
26#include <qfile.h> 24#include <qfile.h>
27#ifdef Q_WS_QWS 25#ifdef Q_WS_QWS
28#ifndef QT_NO_COP 26#ifndef QT_NO_COP
29#if QT_VERSION <= 231 27#if QT_VERSION <= 231
30#define private public 28#define private public
31#define sendLocally processEvent 29#define sendLocally processEvent
32#include "qcopenvelope_qws.h" 30#include "qcopenvelope_qws.h"
33#undef private 31#undef private
34#else 32#else
35#include "qcopenvelope_qws.h" 33#include "qcopenvelope_qws.h"
36#endif 34#endif
37#endif 35#endif
38#include <qwindowsystem_qws.h> 36#include <qwindowsystem_qws.h>
39#endif 37#endif
40#include <qtextstream.h> 38#include <qtextstream.h>
41#include <qpalette.h> 39#include <qpalette.h>
42#include <qbuffer.h> 40#include <qbuffer.h>
43#include <qptrdict.h> 41#include <qptrdict.h>
44#include <qregexp.h> 42#include <qregexp.h>
45#include <qdir.h> 43#include <qdir.h>
46#include <qlabel.h> 44#include <qlabel.h>
47#include <qdialog.h> 45#include <qdialog.h>
48#include <qdragobject.h> 46#include <qdragobject.h>
49#include <qtextcodec.h> 47#include <qtextcodec.h>
50#include <qevent.h> 48#include <qevent.h>
51#include <qtooltip.h> 49#include <qtooltip.h>
52#include <qsignal.h> 50#include <qsignal.h>
53#include <qmainwindow.h> 51#include <qmainwindow.h>
52#include <qwidgetlist.h>
54 53
55#if defined(Q_WS_QWS) && !defined(QT_NO_COP) 54#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
56#define QTOPIA_INTERNAL_INITAPP 55#define QTOPIA_INTERNAL_INITAPP
57#include "qpeapplication.h" 56#include "qpeapplication.h"
58#include "qpestyle.h" 57#include "qpestyle.h"
59#include "styleinterface.h" 58#include "styleinterface.h"
60#if QT_VERSION >= 300 59#if QT_VERSION >= 300
61#include <qstylefactory.h> 60#include <qstylefactory.h>
62#else 61#else
63#include <qplatinumstyle.h> 62#include <qplatinumstyle.h>
64#include <qwindowsstyle.h> 63#include <qwindowsstyle.h>
65#include <qmotifstyle.h> 64#include <qmotifstyle.h>
66#include <qmotifplusstyle.h> 65#include <qmotifplusstyle.h>
67#include "lightstyle.h" 66#include "lightstyle.h"
68 67
69#include <qpe/qlibrary.h> 68#include <qpe/qlibrary.h>
70#endif 69#endif
71#include "global.h" 70#include "global.h"
72#include "resource.h" 71#include "resource.h"
73#if QT_VERSION <= 230 && defined(QT_NO_CODECS) 72#if QT_VERSION <= 230 && defined(QT_NO_CODECS)
74#include "qutfcodec.h" 73#include "qutfcodec.h"
75#endif 74#endif
76#include "config.h" 75#include "config.h"
77#include "network.h" 76#include "network.h"
78#ifdef QWS 77#ifdef QWS
79#include "fontmanager.h" 78#include "fontmanager.h"
80#endif 79#endif
81 80
82#include "alarmserver.h" 81#include "alarmserver.h"
83#include "applnk.h" 82#include "applnk.h"
84#include "qpemenubar.h" 83#include "qpemenubar.h"
85#include "textcodecinterface.h" 84#include "textcodecinterface.h"
86#include "imagecodecinterface.h" 85#include "imagecodecinterface.h"
87 86
88#include <unistd.h> 87#include <unistd.h>
89#include <sys/file.h> 88#include <sys/file.h>
90#include <sys/ioctl.h> 89#include <sys/ioctl.h>
91#include <sys/soundcard.h> 90#include <sys/soundcard.h>
92 91
93#include "qt_override_p.h" 92#include "qt_override_p.h"
94 93
95 94
96class QPEApplicationData 95class QPEApplicationData
97{ 96{
98public: 97public:
99 QPEApplicationData ( ) 98 QPEApplicationData ( )
100 : presstimer( 0 ), presswidget( 0 ), rightpressed( false ), kbgrabbed( false ), 99 : presstimer( 0 ), presswidget( 0 ), rightpressed( false ), kbgrabbed( false ),
101 notbusysent( false ), preloaded( false ), forceshow( false ), nomaximize( false ), 100 notbusysent( false ), preloaded( false ), forceshow( false ), nomaximize( false ),
102 keep_running( true ), qpe_main_widget( 0 ) 101 keep_running( true ), qpe_main_widget( 0 )
103 102
104 { 103 {
105 qcopq.setAutoDelete( TRUE ); 104 qcopq.setAutoDelete( TRUE );
106 } 105 }
107 106
108 int presstimer; 107 int presstimer;
109 QWidget* presswidget; 108 QWidget* presswidget;
110 QPoint presspos; 109 QPoint presspos;
111 110
112 bool rightpressed : 1; 111 bool rightpressed : 1;
113 bool kbgrabbed : 1; 112 bool kbgrabbed : 1;
114 bool notbusysent : 1; 113 bool notbusysent : 1;
115 bool preloaded : 1; 114 bool preloaded : 1;
116 bool forceshow : 1; 115 bool forceshow : 1;
117 bool nomaximize : 1; 116 bool nomaximize : 1;
118 bool keep_running : 1; 117 bool keep_running : 1;
119 118
119 QStringList langs;
120 QString appName; 120 QString appName;
121 struct QCopRec 121 struct QCopRec
122 { 122 {
123 QCopRec( const QCString &ch, const QCString &msg, 123 QCopRec( const QCString &ch, const QCString &msg,
124 const QByteArray &d ) : 124 const QByteArray &d ) :
125 channel( ch ), message( msg ), data( d ) 125 channel( ch ), message( msg ), data( d )
126 { } 126 { }
127 127
128 QCString channel; 128 QCString channel;
129 QCString message; 129 QCString message;
130 QByteArray data; 130 QByteArray data;
131 }; 131 };
132 QWidget* qpe_main_widget; 132 QWidget* qpe_main_widget;
133 QGuardedPtr<QWidget> lastWidget;
133 QList<QCopRec> qcopq; 134 QList<QCopRec> qcopq;
135 QString styleName;
136 QString decorationName;
134 137
135 void enqueueQCop( const QCString &ch, const QCString &msg, 138 void enqueueQCop( const QCString &ch, const QCString &msg,
136 const QByteArray &data ) 139 const QByteArray &data )
137 { 140 {
138 qcopq.append( new QCopRec( ch, msg, data ) ); 141 qcopq.append( new QCopRec( ch, msg, data ) );
139 } 142 }
140 void sendQCopQ() 143 void sendQCopQ()
141 { 144 {
142 QCopRec * r; 145 QCopRec * r;
143#ifndef QT_NO_COP 146#ifndef QT_NO_COP
144 147
145 for ( QListIterator<QCopRec> it( qcopq ); ( r = it.current() ); ++it ) 148 for ( QListIterator<QCopRec> it( qcopq ); ( r = it.current() ); ++it )
146 QCopChannel::sendLocally( r->channel, r->message, r->data ); 149 QCopChannel::sendLocally( r->channel, r->message, r->data );
147#endif 150#endif
148 151
149 qcopq.clear(); 152 qcopq.clear();
150 } 153 }
151 static void show_mx(QWidget* mw, bool nomaximize) 154 static void show_mx(QWidget* mw, bool nomaximize)
152 { 155 {
153 156
154 // ugly hack, remove that later after finding a sane solution 157 // ugly hack, remove that later after finding a sane solution
155 // Addendum: Only Sharp currently has models with high resolution but (physically) small displays, 158 // Addendum: Only Sharp currently has models with high resolution but (physically) small displays,
156 // so this is only useful if QT_QWS_SIMPAD is NOT defined. E.g. SIMpad has 800x600 but has 159 // so this is only useful if QT_QWS_SIMPAD is NOT defined. E.g. SIMpad has 800x600 but has
157 // a (physically) large enough display to use the small icons 160 // a (physically) large enough display to use the small icons
158#ifndef QT_QWS_SIMPAD 161#ifndef QT_QWS_SIMPAD
159 if ( QPEApplication::desktop() ->width() >= 600 && ( mw->inherits("QMainWindow") || mw->isA("QMainWindow") ) ) { 162 if ( QPEApplication::desktop() ->width() >= 600 && ( mw->inherits("QMainWindow") || mw->isA("QMainWindow") ) ) {
160 ( ( QMainWindow* ) mw )->setUsesBigPixmaps( true ); 163 ( ( QMainWindow* ) mw )->setUsesBigPixmaps( true );
161 } 164 }
162#endif 165#endif
163 166
164 if ( mw->layout() && mw->inherits("QDialog") ) { 167 if ( mw->layout() && mw->inherits("QDialog") ) {
165 QPEApplication::showDialog((QDialog*)mw, nomaximize); 168 QPEApplication::showDialog((QDialog*)mw, nomaximize);
166 } 169 }
167 else { 170 else {
168#ifdef Q_WS_QWS 171#ifdef Q_WS_QWS
169 if ( !nomaximize ) 172 if ( !nomaximize )
170 mw->showMaximized(); 173 mw->showMaximized();
171 else 174 else
172#endif 175#endif
173 176
174 mw->show(); 177 mw->show();
175 } 178 }
176 } 179 }
177 static bool setWidgetCaptionFromAppName( QWidget* /*mw*/, const QString& /*appName*/, const QString& /*appsPath*/ ) 180 static bool setWidgetCaptionFromAppName( QWidget* /*mw*/, const QString& /*appName*/, const QString& /*appsPath*/ )
178 { 181 {
179 /* 182 /*
180 // This works but disable it for now until it is safe to apply 183 // This works but disable it for now until it is safe to apply
181 // What is does is scan the .desktop files of all the apps for 184 // What is does is scan the .desktop files of all the apps for
182 // the applnk that has the corresponding argv[0] as this program 185 // the applnk that has the corresponding argv[0] as this program
183 // then it uses the name stored in the .desktop file as the caption 186 // then it uses the name stored in the .desktop file as the caption
184 // for the main widget. This saves duplicating translations for 187 // for the main widget. This saves duplicating translations for
185 // the app name in the program and in the .desktop files. 188 // the app name in the program and in the .desktop files.
186 189
187 AppLnkSet apps( appsPath ); 190 AppLnkSet apps( appsPath );
188 191
189 QList<AppLnk> appsList = apps.children(); 192 QList<AppLnk> appsList = apps.children();
190 for ( QListIterator<AppLnk> it(appsList); it.current(); ++it ) { 193 for ( QListIterator<AppLnk> it(appsList); it.current(); ++it ) {
191 if ( (*it)->exec() == appName ) { 194 if ( (*it)->exec() == appName ) {
192 mw->setCaption( (*it)->name() ); 195 mw->setCaption( (*it)->name() );
193 return TRUE; 196 return TRUE;
194 } 197 }
195 } 198 }
196 */ 199 */
197 return FALSE; 200 return FALSE;
198 } 201 }
199 202
200 203
201 void show(QWidget* mw, bool nomax) 204 void show(QWidget* mw, bool nomax)
202 { 205 {
203 setWidgetCaptionFromAppName( mw, appName, QPEApplication::qpeDir() + "apps" ); 206 setWidgetCaptionFromAppName( mw, appName, QPEApplication::qpeDir() + "apps" );
204 nomaximize = nomax; 207 nomaximize = nomax;
205 qpe_main_widget = mw; 208 qpe_main_widget = mw;
206#ifndef QT_NO_COP 209#ifndef QT_NO_COP
207 210
208 sendQCopQ(); 211 sendQCopQ();
209#endif 212#endif
210 213
211 if ( preloaded ) { 214 if ( preloaded ) {
212 if (forceshow) 215 if (forceshow)
213 show_mx(mw, nomax); 216 show_mx(mw, nomax);
214 } 217 }
215 else if ( keep_running ) { 218 else if ( keep_running ) {
216 show_mx(mw, nomax); 219 show_mx(mw, nomax);
217 } 220 }
218 } 221 }
219 222
220 void loadTextCodecs() 223 void loadTextCodecs()
221 { 224 {
222 QString path = QPEApplication::qpeDir() + "/plugins/textcodecs"; 225 QString path = QPEApplication::qpeDir() + "/plugins/textcodecs";
223 QDir dir( path, "lib*.so" ); 226 QDir dir( path, "lib*.so" );
224 QStringList list; 227 QStringList list;
225 if ( dir. exists ( )) 228 if ( dir. exists ( ))
226 list = dir.entryList(); 229 list = dir.entryList();
227 QStringList::Iterator it; 230 QStringList::Iterator it;
228 for ( it = list.begin(); it != list.end(); ++it ) { 231 for ( it = list.begin(); it != list.end(); ++it ) {
229 TextCodecInterface *iface = 0; 232 TextCodecInterface *iface = 0;
230 QLibrary *lib = new QLibrary( path + "/" + *it ); 233 QLibrary *lib = new QLibrary( path + "/" + *it );
231 if ( lib->queryInterface( IID_QtopiaTextCodec, (QUnknownInterface**)&iface ) == QS_OK && iface ) { 234 if ( lib->queryInterface( IID_QtopiaTextCodec, (QUnknownInterface**)&iface ) == QS_OK && iface ) {
232 QValueList<int> mibs = iface->mibEnums(); 235 QValueList<int> mibs = iface->mibEnums();
233 for (QValueList<int>::ConstIterator i = mibs.begin(); i != mibs.end(); ++i) { 236 for (QValueList<int>::ConstIterator i = mibs.begin(); i != mibs.end(); ++i) {
234 (void)iface->createForMib(*i); 237 (void)iface->createForMib(*i);
235 // ### it exists now; need to remember if we can delete it 238 // ### it exists now; need to remember if we can delete it
236 } 239 }
237 } 240 }
238 else { 241 else {
239 lib->unload(); 242 lib->unload();
240 delete lib; 243 delete lib;
241 } 244 }
242 } 245 }
243 } 246 }
244 247
245 void loadImageCodecs() 248 void loadImageCodecs()
246 { 249 {
247 QString path = QPEApplication::qpeDir() + "/plugins/imagecodecs"; 250 QString path = QPEApplication::qpeDir() + "/plugins/imagecodecs";
248 QDir dir( path, "lib*.so" ); 251 QDir dir( path, "lib*.so" );
249 QStringList list; 252 QStringList list;
250 if ( dir. exists ( )) 253 if ( dir. exists ( ))
251 list = dir.entryList(); 254 list = dir.entryList();
252 QStringList::Iterator it; 255 QStringList::Iterator it;
253 for ( it = list.begin(); it != list.end(); ++it ) { 256 for ( it = list.begin(); it != list.end(); ++it ) {
254 ImageCodecInterface *iface = 0; 257 ImageCodecInterface *iface = 0;
255 QLibrary *lib = new QLibrary( path + "/" + *it ); 258 QLibrary *lib = new QLibrary( path + "/" + *it );
256 if ( lib->queryInterface( IID_QtopiaImageCodec, (QUnknownInterface**)&iface ) == QS_OK && iface ) { 259 if ( lib->queryInterface( IID_QtopiaImageCodec, (QUnknownInterface**)&iface ) == QS_OK && iface ) {
257 QStringList formats = iface->keys(); 260 QStringList formats = iface->keys();
258 for (QStringList::ConstIterator i = formats.begin(); i != formats.end(); ++i) { 261 for (QStringList::ConstIterator i = formats.begin(); i != formats.end(); ++i) {
259 (void)iface->installIOHandler(*i); 262 (void)iface->installIOHandler(*i);
260 // ### it exists now; need to remember if we can delete it 263 // ### it exists now; need to remember if we can delete it
261 } 264 }
262 } 265 }
263 else { 266 else {
264 lib->unload(); 267 lib->unload();
265 delete lib; 268 delete lib;
266 } 269 }
267 } 270 }
268 } 271 }
269 QString styleName;
270 QString decorationName;
271}; 272};
272 273
273class ResourceMimeFactory : public QMimeSourceFactory 274class ResourceMimeFactory : public QMimeSourceFactory
274{ 275{
275public: 276public:
276 ResourceMimeFactory() : resImage( 0 ) 277 ResourceMimeFactory() : resImage( 0 )
277 { 278 {
278 setFilePath( Global::helpPath() ); 279 setFilePath( Global::helpPath() );
279 setExtensionType( "html", "text/html;charset=UTF-8" ); 280 setExtensionType( "html", "text/html;charset=UTF-8" );
280 } 281 }
281 ~ResourceMimeFactory() { 282 ~ResourceMimeFactory() {
282 delete resImage; 283 delete resImage;
283 } 284 }
284 285
285 const QMimeSource* data( const QString& abs_name ) const 286 const QMimeSource* data( const QString& abs_name ) const
286 { 287 {
287 const QMimeSource * r = QMimeSourceFactory::data( abs_name ); 288 const QMimeSource * r = QMimeSourceFactory::data( abs_name );
288 if ( !r ) { 289 if ( !r ) {
289 int sl = abs_name.length(); 290 int sl = abs_name.length();
290 do { 291 do {
291 sl = abs_name.findRev( '/', sl - 1 ); 292 sl = abs_name.findRev( '/', sl - 1 );
292 QString name = sl >= 0 ? abs_name.mid( sl + 1 ) : abs_name; 293 QString name = sl >= 0 ? abs_name.mid( sl + 1 ) : abs_name;
293 int dot = name.findRev( '.' ); 294 int dot = name.findRev( '.' );
294 if ( dot >= 0 ) 295 if ( dot >= 0 )
295 name = name.left( dot ); 296 name = name.left( dot );
296 QImage img = Resource::loadImage( name ); 297 QImage img = Resource::loadImage( name );
297 if ( !img.isNull() ) { 298 if ( !img.isNull() ) {
298 delete resImage; 299 delete resImage;
299 resImage = new QImageDrag( img ); 300 resImage = new QImageDrag( img );
300 r = resImage; 301 r = resImage;
301 } 302 }
302 } 303 }
303 while ( !r && sl > 0 ); 304 while ( !r && sl > 0 );
304 } 305 }
305 return r; 306 return r;
306 } 307 }
307private: 308private:
308 mutable QImageDrag *resImage; 309 mutable QImageDrag *resImage;
309}; 310};
310 311
311static int& hack(int& i) 312static int& hack(int& i)
312{ 313{
313#if QT_VERSION <= 230 && defined(QT_NO_CODECS) 314#if QT_VERSION <= 230 && defined(QT_NO_CODECS)
314 // These should be created, but aren't in Qt 2.3.0 315 // These should be created, but aren't in Qt 2.3.0
315 (void)new QUtf8Codec; 316 (void)new QUtf8Codec;
316 (void)new QUtf16Codec; 317 (void)new QUtf16Codec;
317#endif 318#endif
318 return i; 319 return i;
319} 320}
320 321
321static int muted = 0; 322static int muted = 0;
322static int micMuted = 0; 323static int micMuted = 0;
323 324
324static void setVolume( int t = 0, int percent = -1 ) 325static void setVolume( int t = 0, int percent = -1 )
325{ 326{
326 switch ( t ) { 327 switch ( t ) {
327 case 0: { 328 case 0: {
328 Config cfg( "qpe" ); 329 Config cfg( "qpe" );
329 cfg.setGroup( "Volume" ); 330 cfg.setGroup( "Volume" );
330 if ( percent < 0 ) 331 if ( percent < 0 )
331 percent = cfg.readNumEntry( "VolumePercent", 50 ); 332 percent = cfg.readNumEntry( "VolumePercent", 50 );
332 int fd = 0; 333 int fd = 0;
333 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) { 334 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) {
334 int vol = muted ? 0 : percent; 335 int vol = muted ? 0 : percent;
335 // set both channels to same volume 336 // set both channels to same volume
336 vol |= vol << 8; 337 vol |= vol << 8;
337 ioctl( fd, MIXER_WRITE( 0 ), &vol ); 338 ioctl( fd, MIXER_WRITE( 0 ), &vol );
338 ::close( fd ); 339 ::close( fd );
339 } 340 }
340 } 341 }
341 break; 342 break;
342 } 343 }
343} 344}
344 345
345static void setMic( int t = 0, int percent = -1 ) 346static void setMic( int t = 0, int percent = -1 )
346{ 347{
347 switch ( t ) { 348 switch ( t ) {
348 case 0: { 349 case 0: {
349 Config cfg( "qpe" ); 350 Config cfg( "qpe" );
350 cfg.setGroup( "Volume" ); 351 cfg.setGroup( "Volume" );
351 if ( percent < 0 ) 352 if ( percent < 0 )
352 percent = cfg.readNumEntry( "Mic", 50 ); 353 percent = cfg.readNumEntry( "Mic", 50 );
353 354
354 int fd = 0; 355 int fd = 0;
355 int mic = micMuted ? 0 : percent; 356 int mic = micMuted ? 0 : percent;
356 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) { 357 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) {
357 ioctl( fd, MIXER_WRITE( SOUND_MIXER_MIC ), &mic ); 358 ioctl( fd, MIXER_WRITE( SOUND_MIXER_MIC ), &mic );
358 ::close( fd ); 359 ::close( fd );
359 } 360 }
360 } 361 }
361 break; 362 break;
362 } 363 }
363} 364}
364 365
365 366
366static void setBass( int t = 0, int percent = -1 ) 367static void setBass( int t = 0, int percent = -1 )
367{ 368{
368 switch ( t ) { 369 switch ( t ) {
369 case 0: { 370 case 0: {
370 Config cfg( "qpe" ); 371 Config cfg( "qpe" );
371 cfg.setGroup( "Volume" ); 372 cfg.setGroup( "Volume" );
372 if ( percent < 0 ) 373 if ( percent < 0 )
373 percent = cfg.readNumEntry( "BassPercent", 50 ); 374 percent = cfg.readNumEntry( "BassPercent", 50 );
374 375
375 int fd = 0; 376 int fd = 0;
376 int bass = percent; 377 int bass = percent;
377 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) { 378 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) {
378 ioctl( fd, MIXER_WRITE( SOUND_MIXER_BASS ), &bass ); 379 ioctl( fd, MIXER_WRITE( SOUND_MIXER_BASS ), &bass );
379 ::close( fd ); 380 ::close( fd );
380 } 381 }
381 } 382 }
382 break; 383 break;
383 } 384 }
384} 385}
385 386
386 387
387static void setTreble( int t = 0, int percent = -1 ) 388static void setTreble( int t = 0, int percent = -1 )
388{ 389{
389 switch ( t ) { 390 switch ( t ) {
390 case 0: { 391 case 0: {
391 Config cfg( "qpe" ); 392 Config cfg( "qpe" );
392 cfg.setGroup( "Volume" ); 393 cfg.setGroup( "Volume" );
393 if ( percent < 0 ) 394 if ( percent < 0 )
394 percent = cfg.readNumEntry( "TreblePercent", 50 ); 395 percent = cfg.readNumEntry( "TreblePercent", 50 );
395 396
396 int fd = 0; 397 int fd = 0;
397 int treble = percent; 398 int treble = percent;
398 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) { 399 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) {
@@ -538,335 +539,339 @@ void QPEApplication::processQCopFile()
538 The slot to which you connect this signal uses \a msg and \a data 539 The slot to which you connect this signal uses \a msg and \a data
539 in the following way: 540 in the following way:
540 541
541\code 542\code
542 void MyWidget::receive( const QCString& msg, const QByteArray& data ) 543 void MyWidget::receive( const QCString& msg, const QByteArray& data )
543 { 544 {
544 QDataStream stream( data, IO_ReadOnly ); 545 QDataStream stream( data, IO_ReadOnly );
545 if ( msg == "someMessage(int,int,int)" ) { 546 if ( msg == "someMessage(int,int,int)" ) {
546 int a,b,c; 547 int a,b,c;
547 stream >> a >> b >> c; 548 stream >> a >> b >> c;
548 ... 549 ...
549 } else if ( msg == "otherMessage(QString)" ) { 550 } else if ( msg == "otherMessage(QString)" ) {
550 ... 551 ...
551 } 552 }
552 } 553 }
553\endcode 554\endcode
554 555
555 \sa qcop.html 556 \sa qcop.html
556 Note that messages received here may be processed by qpe application 557 Note that messages received here may be processed by qpe application
557 and emitted as signals, such as flush() and reload(). 558 and emitted as signals, such as flush() and reload().
558*/ 559*/
559 560
560/*! 561/*!
561 Constructs a QPEApplication just as you would construct 562 Constructs a QPEApplication just as you would construct
562 a QApplication, passing \a argc, \a argv, and \a t. 563 a QApplication, passing \a argc, \a argv, and \a t.
563 564
564 For applications, \a t should be the default, GuiClient. Only 565 For applications, \a t should be the default, GuiClient. Only
565 the Qtopia server passes GuiServer. 566 the Qtopia server passes GuiServer.
566*/ 567*/
567QPEApplication::QPEApplication( int & argc, char **argv, Type t ) 568QPEApplication::QPEApplication( int & argc, char **argv, Type t )
568 : QApplication( hack(argc), argv, t ), pidChannel( 0 ) 569 : QApplication( hack(argc), argv, t ), pidChannel( 0 )
569{ 570{
570 d = new QPEApplicationData; 571 d = new QPEApplicationData;
571 d->loadTextCodecs(); 572 d->loadTextCodecs();
572 d->loadImageCodecs(); 573 d->loadImageCodecs();
573 int dw = desktop() ->width(); 574 int dw = desktop() ->width();
574 575
575 if ( dw < 200 ) { 576 if ( dw < 200 ) {
576 setFont( QFont( "vera", 8 ) ); 577 setFont( QFont( "vera", 8 ) );
577 AppLnk::setSmallIconSize( 10 ); 578 AppLnk::setSmallIconSize( 10 );
578 AppLnk::setBigIconSize( 28 ); 579 AppLnk::setBigIconSize( 28 );
579 } 580 }
580#ifndef QT_QWS_SIMPAD 581#ifndef QT_QWS_SIMPAD
581 else if ( dw > 600 ) { 582 else if ( dw > 600 ) {
582 setFont( QFont( "vera", 16 ) ); 583 setFont( QFont( "vera", 16 ) );
583 AppLnk::setSmallIconSize( 24 ); 584 AppLnk::setSmallIconSize( 24 );
584 AppLnk::setBigIconSize( 48 ); 585 AppLnk::setBigIconSize( 48 );
585 } 586 }
586#endif 587#endif
587 else if ( dw > 200 ) { 588 else if ( dw > 200 ) {
588 setFont( QFont( "vera", 10 ) ); 589 setFont( QFont( "vera", 10 ) );
589 AppLnk::setSmallIconSize( 14 ); 590 AppLnk::setSmallIconSize( 14 );
590 AppLnk::setBigIconSize( 32 ); 591 AppLnk::setBigIconSize( 32 );
591 } 592 }
592 593
593 QMimeSourceFactory::setDefaultFactory( new ResourceMimeFactory ); 594 QMimeSourceFactory::setDefaultFactory( new ResourceMimeFactory );
594 595
595 connect( this, SIGNAL( lastWindowClosed() ), this, SLOT( hideOrQuit() ) ); 596 connect( this, SIGNAL( lastWindowClosed() ), this, SLOT( hideOrQuit() ) );
596 597
597 598
598 sysChannel = new QCopChannel( "QPE/System", this ); 599 sysChannel = new QCopChannel( "QPE/System", this );
599 connect( sysChannel, SIGNAL( received( const QCString &, const QByteArray & ) ), 600 connect( sysChannel, SIGNAL( received( const QCString &, const QByteArray & ) ),
600 this, SLOT( systemMessage( const QCString &, const QByteArray & ) ) ); 601 this, SLOT( systemMessage( const QCString &, const QByteArray & ) ) );
601 602
602/* COde now in initapp */ 603/* COde now in initapp */
603#if 0 604#if 0
604#if defined(Q_WS_QWS) && !defined(QT_NO_COP) 605#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
605 606
606 QString qcopfn( "/tmp/qcop-msg-" ); 607 QString qcopfn( "/tmp/qcop-msg-" );
607 qcopfn += QString( argv[ 0 ] ); // append command name 608 qcopfn += QString( argv[ 0 ] ); // append command name
608 609
609 QFile f( qcopfn ); 610 QFile f( qcopfn );
610 if ( f.open( IO_ReadOnly ) ) { 611 if ( f.open( IO_ReadOnly ) ) {
611 flock( f.handle(), LOCK_EX ); 612 flock( f.handle(), LOCK_EX );
612 } 613 }
613 614
614 615
615 616
616 QCString channel = QCString( argv[ 0 ] ); 617 QCString channel = QCString( argv[ 0 ] );
617 channel.replace( QRegExp( ".*/" ), "" ); 618 channel.replace( QRegExp( ".*/" ), "" );
618 d->appName = channel; 619 d->appName = channel;
619 channel = "QPE/Application/" + channel; 620 channel = "QPE/Application/" + channel;
620 pidChannel = new QCopChannel( channel, this ); 621 pidChannel = new QCopChannel( channel, this );
621 connect( pidChannel, SIGNAL( received( const QCString &, const QByteArray & ) ), 622 connect( pidChannel, SIGNAL( received( const QCString &, const QByteArray & ) ),
622 this, SLOT( pidMessage( const QCString &, const QByteArray & ) ) ); 623 this, SLOT( pidMessage( const QCString &, const QByteArray & ) ) );
623 624
624 if ( f.isOpen() ) { 625 if ( f.isOpen() ) {
625 d->keep_running = FALSE; 626 d->keep_running = FALSE;
626 QDataStream ds( &f ); 627 QDataStream ds( &f );
627 QCString channel, message; 628 QCString channel, message;
628 QByteArray data; 629 QByteArray data;
629 while ( !ds.atEnd() ) { 630 while ( !ds.atEnd() ) {
630 ds >> channel >> message >> data; 631 ds >> channel >> message >> data;
631 d->enqueueQCop( channel, message, data ); 632 d->enqueueQCop( channel, message, data );
632 } 633 }
633 634
634 flock( f.handle(), LOCK_UN ); 635 flock( f.handle(), LOCK_UN );
635 f.close(); 636 f.close();
636 f.remove(); 637 f.remove();
637 } 638 }
638 639
639 for ( int a = 0; a < argc; a++ ) { 640 for ( int a = 0; a < argc; a++ ) {
640 if ( qstrcmp( argv[ a ], "-preload" ) == 0 ) { 641 if ( qstrcmp( argv[ a ], "-preload" ) == 0 ) {
641 argv[ a ] = argv[ a + 1 ]; 642 argv[ a ] = argv[ a + 1 ];
642 a++; 643 a++;
643 d->preloaded = TRUE; 644 d->preloaded = TRUE;
644 argc -= 1; 645 argc -= 1;
645 } 646 }
646 else if ( qstrcmp( argv[ a ], "-preload-show" ) == 0 ) { 647 else if ( qstrcmp( argv[ a ], "-preload-show" ) == 0 ) {
647 argv[ a ] = argv[ a + 1 ]; 648 argv[ a ] = argv[ a + 1 ];
648 a++; 649 a++;
649 d->preloaded = TRUE; 650 d->preloaded = TRUE;
650 d->forceshow = TRUE; 651 d->forceshow = TRUE;
651 argc -= 1; 652 argc -= 1;
652 } 653 }
653 } 654 }
654 655
655 /* overide stored arguments */ 656 /* overide stored arguments */
656 setArgs( argc, argv ); 657 setArgs( argc, argv );
657 658
658#endif 659#endif
659#else 660#else
660 initApp( argc, argv ); 661 initApp( argc, argv );
661#endif 662#endif
662 // qwsSetDecoration( new QPEDecoration() ); 663 // qwsSetDecoration( new QPEDecoration() );
663 664
664#ifndef QT_NO_TRANSLATION 665#ifndef QT_NO_TRANSLATION
665 666
666 QStringList langs = Global::languageList(); 667 d->langs = Global::languageList();
667 for ( QStringList::ConstIterator it = langs.begin(); it != langs.end(); ++it ) { 668 for ( QStringList::ConstIterator it = d->langs.begin(); it != d->langs.end(); ++it ) {
668 QString lang = *it; 669 QString lang = *it;
669 670
670 installTranslation( lang + "/libopie.qm"); 671 installTranslation( lang + "/libopie.qm");
671 installTranslation( lang + "/libqpe.qm" ); 672 installTranslation( lang + "/libqpe.qm" );
672 installTranslation( lang + "/" + d->appName + ".qm" ); 673 installTranslation( lang + "/" + d->appName + ".qm" );
673 674
674 675
675 //###language/font hack; should look it up somewhere 676 //###language/font hack; should look it up somewhere
676#ifdef QWS 677#ifdef QWS
677 678
678 if ( lang == "ja" || lang == "zh_CN" || lang == "zh_TW" || lang == "ko" ) { 679 if ( lang == "ja" || lang == "zh_CN" || lang == "zh_TW" || lang == "ko" ) {
679 QFont fn = FontManager::unicodeFont( FontManager::Proportional ); 680 QFont fn = FontManager::unicodeFont( FontManager::Proportional );
680 setFont( fn ); 681 setFont( fn );
681 } 682 }
682#endif 683#endif
683 } 684 }
684#endif 685#endif
685 686
686 applyStyle(); 687 applyStyle();
687 688
688 if ( type() == GuiServer ) { 689 if ( type() == GuiServer ) {
689 setVolume(); 690 setVolume();
690 } 691 }
691 692
692 installEventFilter( this ); 693 installEventFilter( this );
693 694
694 QPEMenuToolFocusManager::initialize(); 695 QPEMenuToolFocusManager::initialize();
695 696
696#ifdef QT_NO_QWS_CURSOR 697#ifdef QT_NO_QWS_CURSOR
697 // if we have no cursor, probably don't want tooltips 698 // if we have no cursor, probably don't want tooltips
698 QToolTip::setEnabled( FALSE ); 699 QToolTip::setEnabled( FALSE );
699#endif 700#endif
700} 701}
701 702
702 703
703#ifdef QTOPIA_INTERNAL_INITAPP 704#ifdef QTOPIA_INTERNAL_INITAPP
704void QPEApplication::initApp( int argc, char **argv ) 705void QPEApplication::initApp( int argc, char **argv )
705{ 706{
706 delete pidChannel; 707 delete pidChannel;
707 d->keep_running = TRUE; 708 d->keep_running = TRUE;
708 d->preloaded = FALSE; 709 d->preloaded = FALSE;
709 d->forceshow = FALSE; 710 d->forceshow = FALSE;
710 711
711 QCString channel = QCString(argv[0]); 712 QCString channel = QCString(argv[0]);
712 713
713 channel.replace(QRegExp(".*/"),""); 714 channel.replace(QRegExp(".*/"),"");
714 d->appName = channel; 715 d->appName = channel;
715 716
716 #if QT_VERSION > 235 717 #if QT_VERSION > 235
717 qt_fbdpy->setIdentity( channel ); // In Qt/E 2.3.6 718 qt_fbdpy->setIdentity( channel ); // In Qt/E 2.3.6
718 #endif 719 #endif
719 720
720 channel = "QPE/Application/" + channel; 721 channel = "QPE/Application/" + channel;
721 pidChannel = new QCopChannel( channel, this); 722 pidChannel = new QCopChannel( channel, this);
722 connect( pidChannel, SIGNAL(received(const QCString &, const QByteArray &)), 723 connect( pidChannel, SIGNAL(received(const QCString &, const QByteArray &)),
723 this, SLOT(pidMessage(const QCString &, const QByteArray &))); 724 this, SLOT(pidMessage(const QCString &, const QByteArray &)));
724 725
725 processQCopFile(); 726 processQCopFile();
726 d->keep_running = d->qcopq.isEmpty(); 727 d->keep_running = d->qcopq.isEmpty();
727 728
728 for (int a=0; a<argc; a++) { 729 for (int a=0; a<argc; a++) {
729 if ( qstrcmp(argv[a],"-preload")==0 ) { 730 if ( qstrcmp(argv[a],"-preload")==0 ) {
730 argv[a] = argv[a+1]; 731 argv[a] = argv[a+1];
731 a++; 732 a++;
732 d->preloaded = TRUE; 733 d->preloaded = TRUE;
733 argc-=1; 734 argc-=1;
734 } else if ( qstrcmp(argv[a],"-preload-show")==0 ) { 735 } else if ( qstrcmp(argv[a],"-preload-show")==0 ) {
735 argv[a] = argv[a+1]; 736 argv[a] = argv[a+1];
736 a++; 737 a++;
737 d->preloaded = TRUE; 738 d->preloaded = TRUE;
738 d->forceshow = TRUE; 739 d->forceshow = TRUE;
739 argc-=1; 740 argc-=1;
740 } 741 }
741 } 742 }
742 743
743 /* overide stored arguments */ 744 /* overide stored arguments */
744 setArgs(argc, argv); 745 setArgs(argc, argv);
746
747 /* install translation here */
748 for ( QStringList::ConstIterator it = d->langs.begin(); it != d->langs.end(); ++it )
749 installTranslation( (*it) + "/" + d->appName + ".qm" );
745} 750}
746#endif 751#endif
747 752
748 753
749static QPtrDict<void>* inputMethodDict = 0; 754static QPtrDict<void>* inputMethodDict = 0;
750static void createInputMethodDict() 755static void createInputMethodDict()
751{ 756{
752 if ( !inputMethodDict ) 757 if ( !inputMethodDict )
753 inputMethodDict = new QPtrDict<void>; 758 inputMethodDict = new QPtrDict<void>;
754} 759}
755 760
756/*! 761/*!
757 Returns the currently set hint to the system as to whether 762 Returns the currently set hint to the system as to whether
758 widget \a w has any use for text input methods. 763 widget \a w has any use for text input methods.
759 764
760 765
761 \sa setInputMethodHint() InputMethodHint 766 \sa setInputMethodHint() InputMethodHint
762*/ 767*/
763QPEApplication::InputMethodHint QPEApplication::inputMethodHint( QWidget * w ) 768QPEApplication::InputMethodHint QPEApplication::inputMethodHint( QWidget * w )
764{ 769{
765 if ( inputMethodDict && w ) 770 if ( inputMethodDict && w )
766 return ( InputMethodHint ) ( int ) inputMethodDict->find( w ); 771 return ( InputMethodHint ) ( int ) inputMethodDict->find( w );
767 return Normal; 772 return Normal;
768} 773}
769 774
770/*! 775/*!
771 \enum QPEApplication::InputMethodHint 776 \enum QPEApplication::InputMethodHint
772 777
773 \value Normal the application sometimes needs text input (the default). 778 \value Normal the application sometimes needs text input (the default).
774 \value AlwaysOff the application never needs text input. 779 \value AlwaysOff the application never needs text input.
775 \value AlwaysOn the application always needs text input. 780 \value AlwaysOn the application always needs text input.
776*/ 781*/
777 782
778/*! 783/*!
779 Hints to the system that widget \a w has use for text input methods 784 Hints to the system that widget \a w has use for text input methods
780 as specified by \a mode. 785 as specified by \a mode.
781 786
782 \sa inputMethodHint() InputMethodHint 787 \sa inputMethodHint() InputMethodHint
783*/ 788*/
784void QPEApplication::setInputMethodHint( QWidget * w, InputMethodHint mode ) 789void QPEApplication::setInputMethodHint( QWidget * w, InputMethodHint mode )
785{ 790{
786 createInputMethodDict(); 791 createInputMethodDict();
787 if ( mode == Normal ) { 792 if ( mode == Normal ) {
788 inputMethodDict->remove 793 inputMethodDict->remove
789 ( w ); 794 ( w );
790 } 795 }
791 else { 796 else {
792 inputMethodDict->insert( w, ( void* ) mode ); 797 inputMethodDict->insert( w, ( void* ) mode );
793 } 798 }
794} 799}
795 800
796class HackDialog : public QDialog 801class HackDialog : public QDialog
797{ 802{
798public: 803public:
799 void acceptIt() 804 void acceptIt()
800 { 805 {
801 accept(); 806 accept();
802 } 807 }
803 void rejectIt() 808 void rejectIt()
804 { 809 {
805 reject(); 810 reject();
806 } 811 }
807}; 812};
808 813
809 814
810void QPEApplication::mapToDefaultAction( QWSKeyEvent * ke, int key ) 815void QPEApplication::mapToDefaultAction( QWSKeyEvent * ke, int key )
811{ 816{
812 // specialised actions for certain widgets. May want to 817 // specialised actions for certain widgets. May want to
813 // add more stuff here. 818 // add more stuff here.
814 if ( activePopupWidget() && activePopupWidget() ->inherits( "QListBox" ) 819 if ( activePopupWidget() && activePopupWidget() ->inherits( "QListBox" )
815 && activePopupWidget() ->parentWidget() 820 && activePopupWidget() ->parentWidget()
816 && activePopupWidget() ->parentWidget() ->inherits( "QComboBox" ) ) 821 && activePopupWidget() ->parentWidget() ->inherits( "QComboBox" ) )
817 key = Qt::Key_Return; 822 key = Qt::Key_Return;
818 823
819 if ( activePopupWidget() && activePopupWidget() ->inherits( "QPopupMenu" ) ) 824 if ( activePopupWidget() && activePopupWidget() ->inherits( "QPopupMenu" ) )
820 key = Qt::Key_Return; 825 key = Qt::Key_Return;
821 826
822#ifdef QWS 827#ifdef QWS
823 828
824 ke->simpleData.keycode = key; 829 ke->simpleData.keycode = key;
825#endif 830#endif
826} 831}
827 832
828class HackWidget : public QWidget 833class HackWidget : public QWidget
829{ 834{
830public: 835public:
831 bool needsOk() 836 bool needsOk()
832 { 837 {
833 return ( getWState() & WState_Reserved1 ); 838 return ( getWState() & WState_Reserved1 );
834 } 839 }
835}; 840};
836 841
837/*! 842/*!
838 \internal 843 \internal
839*/ 844*/
840 845
841#ifdef QWS 846#ifdef QWS
842bool QPEApplication::qwsEventFilter( QWSEvent * e ) 847bool QPEApplication::qwsEventFilter( QWSEvent * e )
843{ 848{
844 if ( !d->notbusysent && e->type == QWSEvent::Focus ) { 849 if ( !d->notbusysent && e->type == QWSEvent::Focus ) {
845 if ( qApp->type() != QApplication::GuiServer ) { 850 if ( qApp->type() != QApplication::GuiServer ) {
846 QCopEnvelope e( "QPE/System", "notBusy(QString)" ); 851 QCopEnvelope e( "QPE/System", "notBusy(QString)" );
847 e << d->appName; 852 e << d->appName;
848 } 853 }
849 d->notbusysent = TRUE; 854 d->notbusysent = TRUE;
850 } 855 }
851 if ( type() == GuiServer ) { 856 if ( type() == GuiServer ) {
852 switch ( e->type ) { 857 switch ( e->type ) {
853 case QWSEvent::Mouse: 858 case QWSEvent::Mouse:
854 if ( e->asMouse() ->simpleData.state && !QWidget::find( e->window() ) ) 859 if ( e->asMouse() ->simpleData.state && !QWidget::find( e->window() ) )
855 emit clientMoused(); 860 emit clientMoused();
856 break; 861 break;
857 default: 862 default:
858 break; 863 break;
859 } 864 }
860 } 865 }
861 if ( e->type == QWSEvent::Key ) { 866 if ( e->type == QWSEvent::Key ) {
862 QWSKeyEvent *ke = ( QWSKeyEvent * ) e; 867 QWSKeyEvent *ke = ( QWSKeyEvent * ) e;
863 if ( ke->simpleData.keycode == Qt::Key_F33 ) { 868 if ( ke->simpleData.keycode == Qt::Key_F33 ) {
864 // Use special "OK" key to press "OK" on top level widgets 869 // Use special "OK" key to press "OK" on top level widgets
865 QWidget * active = activeWindow(); 870 QWidget * active = activeWindow();
866 QWidget *popup = 0; 871 QWidget *popup = 0;
867 if ( active && active->isPopup() ) { 872 if ( active && active->isPopup() ) {
868 popup = active; 873 popup = active;
869 active = active->parentWidget(); 874 active = active->parentWidget();
870 } 875 }
871 if ( active && ( int ) active->winId() == ke->simpleData.window && 876 if ( active && ( int ) active->winId() == ke->simpleData.window &&
872 !active->testWFlags( WStyle_Customize | WType_Popup | WType_Desktop ) ) { 877 !active->testWFlags( WStyle_Customize | WType_Popup | WType_Desktop ) ) {
@@ -1186,351 +1191,410 @@ void QPEApplication::systemMessage( const QCString& msg, const QByteArray& data
1186 } 1191 }
1187 else if ( msg == "quit()" ) { 1192 else if ( msg == "quit()" ) {
1188 if ( type() != GuiServer ) 1193 if ( type() != GuiServer )
1189 tryQuit(); 1194 tryQuit();
1190 } 1195 }
1191 else if ( msg == "forceQuit()" ) { 1196 else if ( msg == "forceQuit()" ) {
1192 if ( type() != GuiServer ) 1197 if ( type() != GuiServer )
1193 quit(); 1198 quit();
1194 } 1199 }
1195 else if ( msg == "restart()" ) { 1200 else if ( msg == "restart()" ) {
1196 if ( type() == GuiServer ) 1201 if ( type() == GuiServer )
1197 restart(); 1202 restart();
1198 } 1203 }
1199 else if ( msg == "language(QString)" ) { 1204 else if ( msg == "language(QString)" ) {
1200 if ( type() == GuiServer ) { 1205 if ( type() == GuiServer ) {
1201 QString l; 1206 QString l;
1202 stream >> l; 1207 stream >> l;
1203 QString cl = getenv( "LANG" ); 1208 QString cl = getenv( "LANG" );
1204 if ( cl != l ) { 1209 if ( cl != l ) {
1205 if ( l.isNull() ) 1210 if ( l.isNull() )
1206 unsetenv( "LANG" ); 1211 unsetenv( "LANG" );
1207 else 1212 else
1208 setenv( "LANG", l.latin1(), 1 ); 1213 setenv( "LANG", l.latin1(), 1 );
1209 restart(); 1214 restart();
1210 } 1215 }
1211 } 1216 }
1212 } 1217 }
1213 else if ( msg == "timeChange(QString)" ) { 1218 else if ( msg == "timeChange(QString)" ) {
1214 QString t; 1219 QString t;
1215 stream >> t; 1220 stream >> t;
1216 if ( t.isNull() ) 1221 if ( t.isNull() )
1217 unsetenv( "TZ" ); 1222 unsetenv( "TZ" );
1218 else 1223 else
1219 setenv( "TZ", t.latin1(), 1 ); 1224 setenv( "TZ", t.latin1(), 1 );
1220 // emit the signal so everyone else knows... 1225 // emit the signal so everyone else knows...
1221 emit timeChanged(); 1226 emit timeChanged();
1222 } 1227 }
1223 else if ( msg == "addAlarm(QDateTime,QCString,QCString,int)" ) { 1228 else if ( msg == "addAlarm(QDateTime,QCString,QCString,int)" ) {
1224 if ( type() == GuiServer ) { 1229 if ( type() == GuiServer ) {
1225 QDateTime when; 1230 QDateTime when;
1226 QCString channel, message; 1231 QCString channel, message;
1227 int data; 1232 int data;
1228 stream >> when >> channel >> message >> data; 1233 stream >> when >> channel >> message >> data;
1229 AlarmServer::addAlarm( when, channel, message, data ); 1234 AlarmServer::addAlarm( when, channel, message, data );
1230 } 1235 }
1231 } 1236 }
1232 else if ( msg == "deleteAlarm(QDateTime,QCString,QCString,int)" ) { 1237 else if ( msg == "deleteAlarm(QDateTime,QCString,QCString,int)" ) {
1233 if ( type() == GuiServer ) { 1238 if ( type() == GuiServer ) {
1234 QDateTime when; 1239 QDateTime when;
1235 QCString channel, message; 1240 QCString channel, message;
1236 int data; 1241 int data;
1237 stream >> when >> channel >> message >> data; 1242 stream >> when >> channel >> message >> data;
1238 AlarmServer::deleteAlarm( when, channel, message, data ); 1243 AlarmServer::deleteAlarm( when, channel, message, data );
1239 } 1244 }
1240 } 1245 }
1241 else if ( msg == "clockChange(bool)" ) { 1246 else if ( msg == "clockChange(bool)" ) {
1242 int tmp; 1247 int tmp;
1243 stream >> tmp; 1248 stream >> tmp;
1244 emit clockChanged( tmp ); 1249 emit clockChanged( tmp );
1245 } 1250 }
1246 else if ( msg == "weekChange(bool)" ) { 1251 else if ( msg == "weekChange(bool)" ) {
1247 int tmp; 1252 int tmp;
1248 stream >> tmp; 1253 stream >> tmp;
1249 emit weekChanged( tmp ); 1254 emit weekChanged( tmp );
1250 } 1255 }
1251 else if ( msg == "setDateFormat(DateFormat)" ) { 1256 else if ( msg == "setDateFormat(DateFormat)" ) {
1252 DateFormat tmp; 1257 DateFormat tmp;
1253 stream >> tmp; 1258 stream >> tmp;
1254 emit dateFormatChanged( tmp ); 1259 emit dateFormatChanged( tmp );
1255 } 1260 }
1256 else if ( msg == "setVolume(int,int)" ) { 1261 else if ( msg == "setVolume(int,int)" ) {
1257 int t, v; 1262 int t, v;
1258 stream >> t >> v; 1263 stream >> t >> v;
1259 setVolume( t, v ); 1264 setVolume( t, v );
1260 emit volumeChanged( muted ); 1265 emit volumeChanged( muted );
1261 } 1266 }
1262 else if ( msg == "volumeChange(bool)" ) { 1267 else if ( msg == "volumeChange(bool)" ) {
1263 stream >> muted; 1268 stream >> muted;
1264 setVolume(); 1269 setVolume();
1265 emit volumeChanged( muted ); 1270 emit volumeChanged( muted );
1266 } 1271 }
1267 else if ( msg == "setMic(int,int)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com> 1272 else if ( msg == "setMic(int,int)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com>
1268 int t, v; 1273 int t, v;
1269 stream >> t >> v; 1274 stream >> t >> v;
1270 setMic( t, v ); 1275 setMic( t, v );
1271 emit micChanged( micMuted ); 1276 emit micChanged( micMuted );
1272 } 1277 }
1273 else if ( msg == "micChange(bool)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com> 1278 else if ( msg == "micChange(bool)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com>
1274 stream >> micMuted; 1279 stream >> micMuted;
1275 setMic(); 1280 setMic();
1276 emit micChanged( micMuted ); 1281 emit micChanged( micMuted );
1277 } 1282 }
1278 else if ( msg == "setBass(int,int)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org> 1283 else if ( msg == "setBass(int,int)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org>
1279 int t, v; 1284 int t, v;
1280 stream >> t >> v; 1285 stream >> t >> v;
1281 setBass( t, v ); 1286 setBass( t, v );
1282 } 1287 }
1283 else if ( msg == "bassChange(bool)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org> 1288 else if ( msg == "bassChange(bool)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org>
1284 setBass(); 1289 setBass();
1285 } 1290 }
1286 else if ( msg == "setTreble(int,int)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org> 1291 else if ( msg == "setTreble(int,int)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org>
1287 int t, v; 1292 int t, v;
1288 stream >> t >> v; 1293 stream >> t >> v;
1289 setTreble( t, v ); 1294 setTreble( t, v );
1290 } 1295 }
1291 else if ( msg == "trebleChange(bool)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org> 1296 else if ( msg == "trebleChange(bool)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org>
1292 setTreble(); 1297 setTreble();
1293 } else if ( msg == "getMarkedText()" ) { 1298 } else if ( msg == "getMarkedText()" ) {
1294 if ( type() == GuiServer ) { 1299 if ( type() == GuiServer ) {
1295 const ushort unicode = 'C'-'@'; 1300 const ushort unicode = 'C'-'@';
1296 const int scan = Key_C; 1301 const int scan = Key_C;
1297 qwsServer->processKeyEvent( unicode, scan, ControlButton, TRUE, FALSE ); 1302 qwsServer->processKeyEvent( unicode, scan, ControlButton, TRUE, FALSE );
1298 qwsServer->processKeyEvent( unicode, scan, ControlButton, FALSE, FALSE ); 1303 qwsServer->processKeyEvent( unicode, scan, ControlButton, FALSE, FALSE );
1299 } 1304 }
1300 } else if ( msg == "newChannel(QString)") { 1305 } else if ( msg == "newChannel(QString)") {
1301 QString myChannel = "QPE/Application/" + d->appName; 1306 QString myChannel = "QPE/Application/" + d->appName;
1302 QString channel; 1307 QString channel;
1303 stream >> channel; 1308 stream >> channel;
1304 if (channel == myChannel) { 1309 if (channel == myChannel) {
1305 processQCopFile(); 1310 processQCopFile();
1306 d->sendQCopQ(); 1311 d->sendQCopQ();
1307 } 1312 }
1308 } 1313 }
1309 1314
1310 1315
1311#endif 1316#endif
1312} 1317}
1313 1318
1319#include <qmetaobject.h>
1320
1321QWidget *QPEApplication::nextWidget(QWidgetList* list, QWidget* _wid) {
1322 QWidget *next = 0;
1323 if ( list->isEmpty() || list->count() == 1 )
1324 next = _wid;
1325 else{
1326 QWidget* wid;
1327 uint idx = list->findRef( _wid );
1328 uint count = list->count();
1329
1330 /* one time through the list hacky we may not start with idx but end with it*/
1331 for (uint i = (idx + 1)%count; true; i=(i+1)%count ) {
1332 wid = list->at(i);
1333 if ( wid == _wid ) {
1334 next = _wid;
1335 break;
1336 }else if ((( wid->inherits("QMainWindow") ||
1337 wid->inherits("QDialog") ) &&
1338 wid != qApp->desktop() && !wid->isHidden() ) ||
1339 ( wid == mainWidget() || wid == d->qpe_main_widget ) ){
1340 next = wid;
1341 break;
1342 }
1343 }
1344 }
1345
1346 delete list;
1347 return next;
1348}
1314/*! 1349/*!
1315 \internal 1350 \internal
1316*/ 1351*/
1352// ########## raise()ing main window should raise and set active
1353// ########## it and then all childen. This belongs in Qt/Embedded
1354/*
1355 * slightly change in behaviour to kill the need of modality in Opie
1356 * If any of the topLevelWidgets !isFullyObscured we highlight the next
1357 * top level window
1358 * 1)If visible and not modal we iterate over the list of top level widgets
1359 * 2)If modal we we make the modal and its parent toplevel widget visible if available
1360 * 3)else make topLevel visible
1361 *
1362 * send qcop if necessary and save current visible widget if not modal
1363 */
1317bool QPEApplication::raiseAppropriateWindow() 1364bool QPEApplication::raiseAppropriateWindow()
1318{ 1365{
1319 bool r = FALSE; 1366 bool r = FALSE;
1320 // ########## raise()ing main window should raise and set active 1367
1321 // ########## it and then all childen. This belongs in Qt/Embedded 1368 QWidget *top = d->qpe_main_widget ? d->qpe_main_widget : mainWidget();
1322 QWidget *top = d->qpe_main_widget; 1369 /* 1. */
1323 if ( !top ) 1370 if ( ( top && (top->isVisible() ) || ( d->lastWidget && d->lastWidget->isVisible() ) ) &&
1324 top = mainWidget(); 1371 !activeModalWidget() ) {
1325 if ( top && d->keep_running ) { 1372 r = TRUE;
1326 if ( top->isVisible() ) 1373 /*wid will be valid and topLevelWidgets will be deleted properly.. */
1327 r = TRUE; 1374 QWidget *wid = nextWidget( topLevelWidgets(),
1328 else if (d->preloaded) { 1375 d->lastWidget ? (QWidget*)d->lastWidget : top );
1329 // We are preloaded and not visible.. pretend we just started.. 1376 /* keep the size window got but not for root*/
1330 QCopEnvelope e("QPE/System", "fastAppShowing(QString)"); 1377 if ( top == wid )
1331 e << d->appName; 1378 d->show_mx(top, d->nomaximize );
1332 } 1379 else
1380 wid->show();
1381
1382 wid->raise();
1383 wid->setActiveWindow();
1384 d->lastWidget = wid;
1385 }else if ( activeModalWidget() ) {
1386 QWidget* mod = activeModalWidget();
1387 /* get the parent of the modal and its topLevelWidget as background widget */
1388 QWidget* par = activeModalWidget()->parentWidget() ? activeModalWidget()->parentWidget()->topLevelWidget() : 0;
1389 if (par ) {
1390 if (par == top )
1391 d->show_mx(par, d->nomaximize );
1392 else
1393 par->show();
1394 par->raise();
1395 par->setActiveWindow();
1396 }
1397 mod->show();
1398 mod->raise();
1399 mod->setActiveWindow();
1400 }else if (top){
1401 d->show_mx(top, d->nomaximize );
1402 top->raise();
1403 top->setActiveWindow();
1404 d->lastWidget = top;
1405 }
1333 1406
1334 d->show_mx(top, d->nomaximize); 1407 if (!r && d->preloaded ) {
1335 top->raise(); 1408 QCopEnvelope e("QPE/System", "fastAppShowing(QString)");
1336 top->setActiveWindow(); 1409 e << d->appName;
1337 } 1410 }
1338 QWidget *topm = activeModalWidget(); 1411
1339 if ( topm && topm != top ) { 1412 return r;
1340 topm->show();
1341 topm->raise();
1342 topm->setActiveWindow();
1343 // If we haven't already handled the fastAppShowing message
1344 if (!top && d->preloaded) {
1345 QCopEnvelope e("QPE/System", "fastAppShowing(QString)");
1346 e << d->appName;
1347 }
1348 r = FALSE;
1349 }
1350 return r;
1351} 1413}
1352 1414
1415
1353void QPEApplication::pidMessage( const QCString& msg, const QByteArray& data) 1416void QPEApplication::pidMessage( const QCString& msg, const QByteArray& data)
1354{ 1417{
1355#ifdef Q_WS_QWS 1418#ifdef Q_WS_QWS
1356 1419
1357 if ( msg == "quit()" ) { 1420 if ( msg == "quit()" ) {
1358 tryQuit(); 1421 tryQuit();
1359 } 1422 }
1360 else if ( msg == "quitIfInvisible()" ) { 1423 else if ( msg == "quitIfInvisible()" ) {
1361 if ( d->qpe_main_widget && !d->qpe_main_widget->isVisible() ) 1424 if ( d->qpe_main_widget && !d->qpe_main_widget->isVisible() )
1362 quit(); 1425 quit();
1363 } 1426 }
1364 else if ( msg == "close()" ) { 1427 else if ( msg == "close()" ) {
1365 hideOrQuit(); 1428 hideOrQuit();
1366 } 1429 }
1367 else if ( msg == "disablePreload()" ) { 1430 else if ( msg == "disablePreload()" ) {
1368 d->preloaded = FALSE; 1431 d->preloaded = FALSE;
1369 d->keep_running = TRUE; 1432 d->keep_running = TRUE;
1370 /* so that quit will quit */ 1433 /* so that quit will quit */
1371 } 1434 }
1372 else if ( msg == "enablePreload()" ) { 1435 else if ( msg == "enablePreload()" ) {
1373 if (d->qpe_main_widget) 1436 if (d->qpe_main_widget)
1374 d->preloaded = TRUE; 1437 d->preloaded = TRUE;
1375 d->keep_running = TRUE; 1438 d->keep_running = TRUE;
1376 /* so next quit won't quit */ 1439 /* so next quit won't quit */
1377 } 1440 }
1378 else if ( msg == "raise()" ) { 1441 else if ( msg == "raise()" ) {
1379 d->keep_running = TRUE; 1442 d->keep_running = TRUE;
1380 d->notbusysent = FALSE; 1443 d->notbusysent = FALSE;
1381 raiseAppropriateWindow(); 1444 raiseAppropriateWindow();
1382 // Tell the system we're still chugging along... 1445 // Tell the system we're still chugging along...
1383 QCopEnvelope e("QPE/System", "appRaised(QString)"); 1446 QCopEnvelope e("QPE/System", "appRaised(QString)");
1384 e << d->appName; 1447 e << d->appName;
1385 } 1448 }
1386 else if ( msg == "flush()" ) { 1449 else if ( msg == "flush()" ) {
1387 emit flush(); 1450 emit flush();
1388 // we need to tell the desktop 1451 // we need to tell the desktop
1389 QCopEnvelope e( "QPE/Desktop", "flushDone(QString)" ); 1452 QCopEnvelope e( "QPE/Desktop", "flushDone(QString)" );
1390 e << d->appName; 1453 e << d->appName;
1391 } 1454 }
1392 else if ( msg == "reload()" ) { 1455 else if ( msg == "reload()" ) {
1393 emit reload(); 1456 emit reload();
1394 } 1457 }
1395 else if ( msg == "setDocument(QString)" ) { 1458 else if ( msg == "setDocument(QString)" ) {
1396 d->keep_running = TRUE; 1459 d->keep_running = TRUE;
1397 QDataStream stream( data, IO_ReadOnly ); 1460 QDataStream stream( data, IO_ReadOnly );
1398 QString doc; 1461 QString doc;
1399 stream >> doc; 1462 stream >> doc;
1400 QWidget *mw = mainWidget(); 1463 QWidget *mw = mainWidget();
1401 if ( !mw ) 1464 if ( !mw )
1402 mw = d->qpe_main_widget; 1465 mw = d->qpe_main_widget;
1403 if ( mw ) 1466 if ( mw )
1404 Global::setDocument( mw, doc ); 1467 Global::setDocument( mw, doc );
1468
1405 } else if ( msg == "QPEProcessQCop()" ) { 1469 } else if ( msg == "QPEProcessQCop()" ) {
1406 processQCopFile(); 1470 processQCopFile();
1407 d->sendQCopQ(); 1471 d->sendQCopQ();
1408 } 1472 }else
1409 { 1473 {
1410 bool p = d->keep_running; 1474 bool p = d->keep_running;
1411 d->keep_running = FALSE; 1475 d->keep_running = FALSE;
1412 emit appMessage( msg, data); 1476 emit appMessage( msg, data);
1413 if ( d->keep_running ) { 1477 if ( d->keep_running ) {
1414 d->notbusysent = FALSE; 1478 d->notbusysent = FALSE;
1415 raiseAppropriateWindow(); 1479 raiseAppropriateWindow();
1416 if ( !p ) { 1480 if ( !p ) {
1417 // Tell the system we're still chugging along... 1481 // Tell the system we're still chugging along...
1418#ifndef QT_NO_COP 1482#ifndef QT_NO_COP
1419 QCopEnvelope e("QPE/System", "appRaised(QString)"); 1483 QCopEnvelope e("QPE/System", "appRaised(QString)");
1420 e << d->appName; 1484 e << d->appName;
1421#endif 1485#endif
1422 } 1486 }
1423 } 1487 }
1424 if ( p ) 1488 if ( p )
1425 d->keep_running = p; 1489 d->keep_running = p;
1426 } 1490 }
1427#endif 1491#endif
1428} 1492}
1429 1493
1430 1494
1431/*! 1495/*!
1432 Sets widget \a mw as the mainWidget() and shows it. For small windows, 1496 Sets widget \a mw as the mainWidget() and shows it. For small windows,
1433 consider passing TRUE for \a nomaximize rather than the default FALSE. 1497 consider passing TRUE for \a nomaximize rather than the default FALSE.
1434 1498
1435 \sa showMainDocumentWidget() 1499 \sa showMainDocumentWidget()
1436*/ 1500*/
1437void QPEApplication::showMainWidget( QWidget* mw, bool nomaximize ) 1501void QPEApplication::showMainWidget( QWidget* mw, bool nomaximize )
1438{ 1502{
1439 d->show(mw, nomaximize ); 1503 d->show(mw, nomaximize );
1440} 1504}
1441 1505
1442/*! 1506/*!
1443 Sets widget \a mw as the mainWidget() and shows it. For small windows, 1507 Sets widget \a mw as the mainWidget() and shows it. For small windows,
1444 consider passing TRUE for \a nomaximize rather than the default FALSE. 1508 consider passing TRUE for \a nomaximize rather than the default FALSE.
1445 1509
1446 This calls designates the application as 1510 This calls designates the application as
1447 a \link docwidget.html document-oriented\endlink application. 1511 a \link docwidget.html document-oriented\endlink application.
1448 1512
1449 The \a mw widget \e must have this slot: setDocument(const QString&). 1513 The \a mw widget \e must have this slot: setDocument(const QString&).
1450 1514
1451 \sa showMainWidget() 1515 \sa showMainWidget()
1452*/ 1516*/
1453void QPEApplication::showMainDocumentWidget( QWidget* mw, bool nomaximize ) 1517void QPEApplication::showMainDocumentWidget( QWidget* mw, bool nomaximize )
1454{ 1518{
1455 if ( mw && argc() == 2 ) 1519 if ( mw && argc() == 2 )
1456 Global::setDocument( mw, QString::fromUtf8(argv()[1]) ); 1520 Global::setDocument( mw, QString::fromUtf8(argv()[1]) );
1457 1521
1458 1522
1459 d->show(mw, nomaximize ); 1523 d->show(mw, nomaximize );
1460} 1524}
1461 1525
1462 1526
1463/*! 1527/*!
1464 If an application is started via a \link qcop.html QCop\endlink 1528 If an application is started via a \link qcop.html QCop\endlink
1465 message, the application will process the \link qcop.html 1529 message, the application will process the \link qcop.html
1466 QCop\endlink message and then quit. If the application calls this 1530 QCop\endlink message and then quit. If the application calls this
1467 function while processing a \link qcop.html QCop\endlink message, 1531 function while processing a \link qcop.html QCop\endlink message,
1468 after processing its outstanding \link qcop.html QCop\endlink 1532 after processing its outstanding \link qcop.html QCop\endlink
1469 messages the application will start 'properly' and show itself. 1533 messages the application will start 'properly' and show itself.
1470 1534
1471 \sa keepRunning() 1535 \sa keepRunning()
1472*/ 1536*/
1473void QPEApplication::setKeepRunning() 1537void QPEApplication::setKeepRunning()
1474{ 1538{
1475 if ( qApp && qApp->inherits( "QPEApplication" ) ) { 1539 if ( qApp && qApp->inherits( "QPEApplication" ) ) {
1476 QPEApplication * qpeApp = ( QPEApplication* ) qApp; 1540 QPEApplication * qpeApp = ( QPEApplication* ) qApp;
1477 qpeApp->d->keep_running = TRUE; 1541 qpeApp->d->keep_running = TRUE;
1478 } 1542 }
1479} 1543}
1480 1544
1481/*! 1545/*!
1482 Returns TRUE if the application will quit after processing the 1546 Returns TRUE if the application will quit after processing the
1483 current list of qcop messages; otherwise returns FALSE. 1547 current list of qcop messages; otherwise returns FALSE.
1484 1548
1485 \sa setKeepRunning() 1549 \sa setKeepRunning()
1486*/ 1550*/
1487bool QPEApplication::keepRunning() const 1551bool QPEApplication::keepRunning() const
1488{ 1552{
1489 return d->keep_running; 1553 return d->keep_running;
1490} 1554}
1491 1555
1492/*! 1556/*!
1493 \internal 1557 \internal
1494*/ 1558*/
1495void QPEApplication::internalSetStyle( const QString &style ) 1559void QPEApplication::internalSetStyle( const QString &style )
1496{ 1560{
1497#if QT_VERSION >= 300 1561#if QT_VERSION >= 300
1498 if ( style == "QPE" ) { 1562 if ( style == "QPE" ) {
1499 setStyle( new QPEStyle ); 1563 setStyle( new QPEStyle );
1500 } 1564 }
1501 else { 1565 else {
1502 QStyle *s = QStyleFactory::create( style ); 1566 QStyle *s = QStyleFactory::create( style );
1503 if ( s ) 1567 if ( s )
1504 setStyle( s ); 1568 setStyle( s );
1505 } 1569 }
1506#else 1570#else
1507 if ( style == "Windows" ) { 1571 if ( style == "Windows" ) {
1508 setStyle( new QWindowsStyle ); 1572 setStyle( new QWindowsStyle );
1509 } 1573 }
1510 else if ( style == "QPE" ) { 1574 else if ( style == "QPE" ) {
1511 setStyle( new QPEStyle ); 1575 setStyle( new QPEStyle );
1512 } 1576 }
1513 else if ( style == "Light" ) { 1577 else if ( style == "Light" ) {
1514 setStyle( new LightStyle ); 1578 setStyle( new LightStyle );
1515 } 1579 }
1516#ifndef QT_NO_STYLE_PLATINUM 1580#ifndef QT_NO_STYLE_PLATINUM
1517 else if ( style == "Platinum" ) { 1581 else if ( style == "Platinum" ) {
1518 setStyle( new QPlatinumStyle ); 1582 setStyle( new QPlatinumStyle );
1519 } 1583 }
1520#endif 1584#endif
1521#ifndef QT_NO_STYLE_MOTIF 1585#ifndef QT_NO_STYLE_MOTIF
1522 else if ( style == "Motif" ) { 1586 else if ( style == "Motif" ) {
1523 setStyle( new QMotifStyle ); 1587 setStyle( new QMotifStyle );
1524 } 1588 }
1525#endif 1589#endif
1526#ifndef QT_NO_STYLE_MOTIFPLUS 1590#ifndef QT_NO_STYLE_MOTIFPLUS
1527 else if ( style == "MotifPlus" ) { 1591 else if ( style == "MotifPlus" ) {
1528 setStyle( new QMotifPlusStyle ); 1592 setStyle( new QMotifPlusStyle );
1529 } 1593 }
1530#endif 1594#endif
1531 1595
1532 else { 1596 else {
1533 QStyle *sty = 0; 1597 QStyle *sty = 0;
1534 QString path = QPEApplication::qpeDir ( ) + "/plugins/styles/"; 1598 QString path = QPEApplication::qpeDir ( ) + "/plugins/styles/";
1535 1599
1536 if ( style. find ( ".so" ) > 0 ) 1600 if ( style. find ( ".so" ) > 0 )