summaryrefslogtreecommitdiff
path: root/library/qpeapplication.cpp
authorar <ar>2004-04-19 19:38:01 (UTC)
committer ar <ar>2004-04-19 19:38:01 (UTC)
commita57416ce6dc62bfd2b57d87434c04417ad23cbc5 (patch) (unidiff)
tree183a53a52327a2fe826203bae06ec1a95eb4f5c1 /library/qpeapplication.cpp
parent23edaa3c2240ae3792b507acf55996660c048336 (diff)
downloadopie-a57416ce6dc62bfd2b57d87434c04417ad23cbc5.zip
opie-a57416ce6dc62bfd2b57d87434c04417ad23cbc5.tar.gz
opie-a57416ce6dc62bfd2b57d87434c04417ad23cbc5.tar.bz2
- BigScreen: show MainWidget not maximized on big screens
Diffstat (limited to 'library/qpeapplication.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--library/qpeapplication.cpp13
1 files changed, 1 insertions, 12 deletions
diff --git a/library/qpeapplication.cpp b/library/qpeapplication.cpp
index 755fb19..cf76000 100644
--- a/library/qpeapplication.cpp
+++ b/library/qpeapplication.cpp
@@ -1,2099 +1,2088 @@
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*/ 19*/
20#define QTOPIA_INTERNAL_LANGLIST 20#define QTOPIA_INTERNAL_LANGLIST
21#include <stdlib.h> 21#include <stdlib.h>
22#include <unistd.h> 22#include <unistd.h>
23#ifndef Q_OS_MACX 23#ifndef Q_OS_MACX
24#include <linux/limits.h> // needed for some toolchains (PATH_MAX) 24#include <linux/limits.h> // needed for some toolchains (PATH_MAX)
25#endif 25#endif
26#include <qfile.h> 26#include <qfile.h>
27#include <qqueue.h> 27#include <qqueue.h>
28#ifdef Q_WS_QWS 28#ifdef Q_WS_QWS
29#ifndef QT_NO_COP 29#ifndef QT_NO_COP
30#if QT_VERSION <= 231 30#if QT_VERSION <= 231
31#define private public 31#define private public
32#define sendLocally processEvent 32#define sendLocally processEvent
33#include "qcopenvelope_qws.h" 33#include "qcopenvelope_qws.h"
34#undef private 34#undef private
35#else 35#else
36#include "qcopenvelope_qws.h" 36#include "qcopenvelope_qws.h"
37#endif 37#endif
38#endif 38#endif
39#include <qwindowsystem_qws.h> 39#include <qwindowsystem_qws.h>
40#endif 40#endif
41#include <qtextstream.h> 41#include <qtextstream.h>
42#include <qpalette.h> 42#include <qpalette.h>
43#include <qbuffer.h> 43#include <qbuffer.h>
44#include <qptrdict.h> 44#include <qptrdict.h>
45#include <qregexp.h> 45#include <qregexp.h>
46#include <qdir.h> 46#include <qdir.h>
47#include <qlabel.h> 47#include <qlabel.h>
48#include <qdialog.h> 48#include <qdialog.h>
49#include <qdragobject.h> 49#include <qdragobject.h>
50#include <qtextcodec.h> 50#include <qtextcodec.h>
51#include <qevent.h> 51#include <qevent.h>
52#include <qtooltip.h> 52#include <qtooltip.h>
53#include <qsignal.h> 53#include <qsignal.h>
54#include <qmainwindow.h> 54#include <qmainwindow.h>
55#include <qwidgetlist.h> 55#include <qwidgetlist.h>
56#include <qpixmapcache.h> 56#include <qpixmapcache.h>
57 57
58#if defined(Q_WS_QWS) && !defined(QT_NO_COP) 58#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
59#define QTOPIA_INTERNAL_INITAPP 59#define QTOPIA_INTERNAL_INITAPP
60#include "qpeapplication.h" 60#include "qpeapplication.h"
61#include "qpestyle.h" 61#include "qpestyle.h"
62#include "styleinterface.h" 62#include "styleinterface.h"
63#if QT_VERSION >= 300 63#if QT_VERSION >= 300
64#include <qstylefactory.h> 64#include <qstylefactory.h>
65#else 65#else
66#include <qplatinumstyle.h> 66#include <qplatinumstyle.h>
67#include <qwindowsstyle.h> 67#include <qwindowsstyle.h>
68#include <qmotifstyle.h> 68#include <qmotifstyle.h>
69#include <qmotifplusstyle.h> 69#include <qmotifplusstyle.h>
70#include "lightstyle.h" 70#include "lightstyle.h"
71 71
72#include <qpe/qlibrary.h> 72#include <qpe/qlibrary.h>
73#endif 73#endif
74#include "global.h" 74#include "global.h"
75#include "resource.h" 75#include "resource.h"
76#if QT_VERSION <= 230 && defined(QT_NO_CODECS) 76#if QT_VERSION <= 230 && defined(QT_NO_CODECS)
77#include "qutfcodec.h" 77#include "qutfcodec.h"
78#endif 78#endif
79#include "config.h" 79#include "config.h"
80#include "network.h" 80#include "network.h"
81#ifdef QWS 81#ifdef QWS
82#include "fontmanager.h" 82#include "fontmanager.h"
83#endif 83#endif
84 84
85#include "alarmserver.h" 85#include "alarmserver.h"
86#include "applnk.h" 86#include "applnk.h"
87#include "qpemenubar.h" 87#include "qpemenubar.h"
88#include "textcodecinterface.h" 88#include "textcodecinterface.h"
89#include "imagecodecinterface.h" 89#include "imagecodecinterface.h"
90 90
91#include <unistd.h> 91#include <unistd.h>
92#include <sys/file.h> 92#include <sys/file.h>
93#include <sys/ioctl.h> 93#include <sys/ioctl.h>
94#ifndef QT_NO_SOUND 94#ifndef QT_NO_SOUND
95#include <sys/soundcard.h> 95#include <sys/soundcard.h>
96#endif 96#endif
97#include "qt_override_p.h" 97#include "qt_override_p.h"
98 98
99 99
100class QPEApplicationData 100class QPEApplicationData
101{ 101{
102public: 102public:
103 QPEApplicationData ( ) 103 QPEApplicationData ( )
104 : presstimer( 0 ), presswidget( 0 ), rightpressed( false ), kbgrabbed( false ), 104 : presstimer( 0 ), presswidget( 0 ), rightpressed( false ), kbgrabbed( false ),
105 notbusysent( false ), preloaded( false ), forceshow( false ), nomaximize( false ), 105 notbusysent( false ), preloaded( false ), forceshow( false ), nomaximize( false ),
106 keep_running( true ), qcopQok( false ), qpe_main_widget( 0 ) 106 keep_running( true ), qcopQok( false ), qpe_main_widget( 0 )
107 107
108 {} 108 {}
109 109
110 int presstimer; 110 int presstimer;
111 QWidget* presswidget; 111 QWidget* presswidget;
112 QPoint presspos; 112 QPoint presspos;
113 113
114 bool rightpressed : 1; 114 bool rightpressed : 1;
115 bool kbgrabbed : 1; 115 bool kbgrabbed : 1;
116 bool notbusysent : 1; 116 bool notbusysent : 1;
117 bool preloaded : 1; 117 bool preloaded : 1;
118 bool forceshow : 1; 118 bool forceshow : 1;
119 bool nomaximize : 1; 119 bool nomaximize : 1;
120 bool keep_running : 1; 120 bool keep_running : 1;
121 bool qcopQok : 1; 121 bool qcopQok : 1;
122 122
123 123
124 QStringList langs; 124 QStringList langs;
125 QString appName; 125 QString appName;
126 struct QCopRec 126 struct QCopRec
127 { 127 {
128 QCopRec( const QCString &ch, const QCString &msg, 128 QCopRec( const QCString &ch, const QCString &msg,
129 const QByteArray &d ) : 129 const QByteArray &d ) :
130 channel( ch ), message( msg ), data( d ) 130 channel( ch ), message( msg ), data( d )
131 { } 131 { }
132 132
133 QCString channel; 133 QCString channel;
134 QCString message; 134 QCString message;
135 QByteArray data; 135 QByteArray data;
136 }; 136 };
137 QWidget* qpe_main_widget; 137 QWidget* qpe_main_widget;
138 QGuardedPtr<QWidget> lastraised; 138 QGuardedPtr<QWidget> lastraised;
139 QQueue<QCopRec> qcopq; 139 QQueue<QCopRec> qcopq;
140 QString styleName; 140 QString styleName;
141 QString decorationName; 141 QString decorationName;
142 142
143 void enqueueQCop( const QCString &ch, const QCString &msg, 143 void enqueueQCop( const QCString &ch, const QCString &msg,
144 const QByteArray &data ) 144 const QByteArray &data )
145 { 145 {
146 qcopq.enqueue( new QCopRec( ch, msg, data ) ); 146 qcopq.enqueue( new QCopRec( ch, msg, data ) );
147 } 147 }
148 void sendQCopQ() 148 void sendQCopQ()
149 { 149 {
150 if (!qcopQok ) 150 if (!qcopQok )
151 return; 151 return;
152 152
153 QCopRec * r; 153 QCopRec * r;
154 154
155 while((r=qcopq.dequeue())) { 155 while((r=qcopq.dequeue())) {
156 // remove from queue before sending... 156 // remove from queue before sending...
157 // event loop can come around again before getting 157 // event loop can come around again before getting
158 // back from sendLocally 158 // back from sendLocally
159#ifndef QT_NO_COP 159#ifndef QT_NO_COP
160 QCopChannel::sendLocally( r->channel, r->message, r->data ); 160 QCopChannel::sendLocally( r->channel, r->message, r->data );
161#endif 161#endif
162 162
163 delete r; 163 delete r;
164 } 164 }
165 } 165 }
166 static void show_mx(QWidget* mw, bool nomaximize, const QString & = QString::null ) 166 static void show_mx(QWidget* mw, bool nomaximize, const QString & = QString::null )
167 { 167 {
168 168
169 // ugly hack, remove that later after finding a sane solution 169 // ugly hack, remove that later after finding a sane solution
170 // Addendum: Only Sharp currently has models with high resolution but (physically) small displays, 170 // Addendum: Only Sharp currently has models with high resolution but (physically) small displays,
171 // so this is only useful if QT_QWS_SIMPAD is NOT defined. E.g. SIMpad has 800x600 but has 171 // so this is only useful if QT_QWS_SIMPAD is NOT defined. E.g. SIMpad has 800x600 but has
172 // a (physically) large enough display to use the small icons 172 // a (physically) large enough display to use the small icons
173#if defined(OPIE_HIGH_RES_SMALL_PHY) 173#if defined(OPIE_HIGH_RES_SMALL_PHY)
174 if ( QPEApplication::desktop() ->width() >= 600 && ( mw->inherits("QMainWindow") || mw->isA("QMainWindow") ) ) { 174 if ( QPEApplication::desktop() ->width() >= 600 && ( mw->inherits("QMainWindow") || mw->isA("QMainWindow") ) ) {
175 ( ( QMainWindow* ) mw )->setUsesBigPixmaps( true ); 175 ( ( QMainWindow* ) mw )->setUsesBigPixmaps( true );
176 } 176 }
177#endif 177#endif
178 178
179 if ( mw->layout() && mw->inherits("QDialog") ) { 179 QPEApplication::showWidget( mw, nomaximize );
180 QPEApplication::showDialog((QDialog*)mw, nomaximize);
181 }
182 else {
183#ifdef Q_WS_QWS
184 if ( !nomaximize )
185 mw->showMaximized();
186 else
187#endif
188
189 mw->show();
190 }
191 } 180 }
192 static bool setWidgetCaptionFromAppName( QWidget* /*mw*/, const QString& /*appName*/, const QString& /*appsPath*/ ) 181 static bool setWidgetCaptionFromAppName( QWidget* /*mw*/, const QString& /*appName*/, const QString& /*appsPath*/ )
193 { 182 {
194 /* 183 /*
195 // This works but disable it for now until it is safe to apply 184 // This works but disable it for now until it is safe to apply
196 // What is does is scan the .desktop files of all the apps for 185 // What is does is scan the .desktop files of all the apps for
197 // the applnk that has the corresponding argv[0] as this program 186 // the applnk that has the corresponding argv[0] as this program
198 // then it uses the name stored in the .desktop file as the caption 187 // then it uses the name stored in the .desktop file as the caption
199 // for the main widget. This saves duplicating translations for 188 // for the main widget. This saves duplicating translations for
200 // the app name in the program and in the .desktop files. 189 // the app name in the program and in the .desktop files.
201 190
202 AppLnkSet apps( appsPath ); 191 AppLnkSet apps( appsPath );
203 192
204 QList<AppLnk> appsList = apps.children(); 193 QList<AppLnk> appsList = apps.children();
205 for ( QListIterator<AppLnk> it(appsList); it.current(); ++it ) { 194 for ( QListIterator<AppLnk> it(appsList); it.current(); ++it ) {
206 if ( (*it)->exec() == appName ) { 195 if ( (*it)->exec() == appName ) {
207 mw->setCaption( (*it)->name() ); 196 mw->setCaption( (*it)->name() );
208 return TRUE; 197 return TRUE;
209 } 198 }
210 } 199 }
211 */ 200 */
212 return FALSE; 201 return FALSE;
213 } 202 }
214 203
215 204
216 void show(QWidget* mw, bool nomax) 205 void show(QWidget* mw, bool nomax)
217 { 206 {
218 setWidgetCaptionFromAppName( mw, appName, QPEApplication::qpeDir() + "apps" ); 207 setWidgetCaptionFromAppName( mw, appName, QPEApplication::qpeDir() + "apps" );
219 nomaximize = nomax; 208 nomaximize = nomax;
220 qpe_main_widget = mw; 209 qpe_main_widget = mw;
221 qcopQok = TRUE; 210 qcopQok = TRUE;
222#ifndef QT_NO_COP 211#ifndef QT_NO_COP
223 212
224 sendQCopQ(); 213 sendQCopQ();
225#endif 214#endif
226 215
227 if ( preloaded ) { 216 if ( preloaded ) {
228 if (forceshow) 217 if (forceshow)
229 show_mx(mw, nomax); 218 show_mx(mw, nomax);
230 } 219 }
231 else if ( keep_running ) { 220 else if ( keep_running ) {
232 show_mx(mw, nomax); 221 show_mx(mw, nomax);
233 } 222 }
234 } 223 }
235 224
236 void loadTextCodecs() 225 void loadTextCodecs()
237 { 226 {
238 QString path = QPEApplication::qpeDir() + "/plugins/textcodecs"; 227 QString path = QPEApplication::qpeDir() + "/plugins/textcodecs";
239#ifdef Q_OS_MACX 228#ifdef Q_OS_MACX
240 QDir dir( path, "lib*.dylib" ); 229 QDir dir( path, "lib*.dylib" );
241#else 230#else
242 QDir dir( path, "lib*.so" ); 231 QDir dir( path, "lib*.so" );
243#endif 232#endif
244 QStringList list; 233 QStringList list;
245 if ( dir. exists ( )) 234 if ( dir. exists ( ))
246 list = dir.entryList(); 235 list = dir.entryList();
247 QStringList::Iterator it; 236 QStringList::Iterator it;
248 for ( it = list.begin(); it != list.end(); ++it ) { 237 for ( it = list.begin(); it != list.end(); ++it ) {
249 TextCodecInterface *iface = 0; 238 TextCodecInterface *iface = 0;
250 QLibrary *lib = new QLibrary( path + "/" + *it ); 239 QLibrary *lib = new QLibrary( path + "/" + *it );
251 if ( lib->queryInterface( IID_QtopiaTextCodec, (QUnknownInterface**)&iface ) == QS_OK && iface ) { 240 if ( lib->queryInterface( IID_QtopiaTextCodec, (QUnknownInterface**)&iface ) == QS_OK && iface ) {
252 QValueList<int> mibs = iface->mibEnums(); 241 QValueList<int> mibs = iface->mibEnums();
253 for (QValueList<int>::ConstIterator i = mibs.begin(); i != mibs.end(); ++i) { 242 for (QValueList<int>::ConstIterator i = mibs.begin(); i != mibs.end(); ++i) {
254 (void)iface->createForMib(*i); 243 (void)iface->createForMib(*i);
255 // ### it exists now; need to remember if we can delete it 244 // ### it exists now; need to remember if we can delete it
256 } 245 }
257 } 246 }
258 else { 247 else {
259 lib->unload(); 248 lib->unload();
260 delete lib; 249 delete lib;
261 } 250 }
262 } 251 }
263 } 252 }
264 253
265 void loadImageCodecs() 254 void loadImageCodecs()
266 { 255 {
267 QString path = QPEApplication::qpeDir() + "/plugins/imagecodecs"; 256 QString path = QPEApplication::qpeDir() + "/plugins/imagecodecs";
268#ifdef Q_OS_MACX 257#ifdef Q_OS_MACX
269 QDir dir( path, "lib*.dylib" ); 258 QDir dir( path, "lib*.dylib" );
270#else 259#else
271 QDir dir( path, "lib*.so" ); 260 QDir dir( path, "lib*.so" );
272#endif 261#endif
273 QStringList list; 262 QStringList list;
274 if ( dir. exists ( )) 263 if ( dir. exists ( ))
275 list = dir.entryList(); 264 list = dir.entryList();
276 QStringList::Iterator it; 265 QStringList::Iterator it;
277 for ( it = list.begin(); it != list.end(); ++it ) { 266 for ( it = list.begin(); it != list.end(); ++it ) {
278 ImageCodecInterface *iface = 0; 267 ImageCodecInterface *iface = 0;
279 QLibrary *lib = new QLibrary( path + "/" + *it ); 268 QLibrary *lib = new QLibrary( path + "/" + *it );
280 if ( lib->queryInterface( IID_QtopiaImageCodec, (QUnknownInterface**)&iface ) == QS_OK && iface ) { 269 if ( lib->queryInterface( IID_QtopiaImageCodec, (QUnknownInterface**)&iface ) == QS_OK && iface ) {
281 QStringList formats = iface->keys(); 270 QStringList formats = iface->keys();
282 for (QStringList::ConstIterator i = formats.begin(); i != formats.end(); ++i) { 271 for (QStringList::ConstIterator i = formats.begin(); i != formats.end(); ++i) {
283 (void)iface->installIOHandler(*i); 272 (void)iface->installIOHandler(*i);
284 // ### it exists now; need to remember if we can delete it 273 // ### it exists now; need to remember if we can delete it
285 } 274 }
286 } 275 }
287 else { 276 else {
288 lib->unload(); 277 lib->unload();
289 delete lib; 278 delete lib;
290 } 279 }
291 } 280 }
292 } 281 }
293}; 282};
294 283
295class ResourceMimeFactory : public QMimeSourceFactory 284class ResourceMimeFactory : public QMimeSourceFactory
296{ 285{
297public: 286public:
298 ResourceMimeFactory() : resImage( 0 ) 287 ResourceMimeFactory() : resImage( 0 )
299 { 288 {
300 setFilePath( Global::helpPath() ); 289 setFilePath( Global::helpPath() );
301 setExtensionType( "html", "text/html;charset=UTF-8" ); 290 setExtensionType( "html", "text/html;charset=UTF-8" );
302 } 291 }
303 ~ResourceMimeFactory() { 292 ~ResourceMimeFactory() {
304 delete resImage; 293 delete resImage;
305 } 294 }
306 295
307 const QMimeSource* data( const QString& abs_name ) const 296 const QMimeSource* data( const QString& abs_name ) const
308 { 297 {
309 const QMimeSource * r = QMimeSourceFactory::data( abs_name ); 298 const QMimeSource * r = QMimeSourceFactory::data( abs_name );
310 if ( !r ) { 299 if ( !r ) {
311 int sl = abs_name.length(); 300 int sl = abs_name.length();
312 do { 301 do {
313 sl = abs_name.findRev( '/', sl - 1 ); 302 sl = abs_name.findRev( '/', sl - 1 );
314 QString name = sl >= 0 ? abs_name.mid( sl + 1 ) : abs_name; 303 QString name = sl >= 0 ? abs_name.mid( sl + 1 ) : abs_name;
315 int dot = name.findRev( '.' ); 304 int dot = name.findRev( '.' );
316 if ( dot >= 0 ) 305 if ( dot >= 0 )
317 name = name.left( dot ); 306 name = name.left( dot );
318 QImage img = Resource::loadImage( name ); 307 QImage img = Resource::loadImage( name );
319 if ( !img.isNull() ) { 308 if ( !img.isNull() ) {
320 delete resImage; 309 delete resImage;
321 resImage = new QImageDrag( img ); 310 resImage = new QImageDrag( img );
322 r = resImage; 311 r = resImage;
323 } 312 }
324 } 313 }
325 while ( !r && sl > 0 ); 314 while ( !r && sl > 0 );
326 } 315 }
327 return r; 316 return r;
328 } 317 }
329private: 318private:
330 mutable QImageDrag *resImage; 319 mutable QImageDrag *resImage;
331}; 320};
332 321
333static int& hack(int& i) 322static int& hack(int& i)
334{ 323{
335#if QT_VERSION <= 230 && defined(QT_NO_CODECS) 324#if QT_VERSION <= 230 && defined(QT_NO_CODECS)
336 // These should be created, but aren't in Qt 2.3.0 325 // These should be created, but aren't in Qt 2.3.0
337 (void)new QUtf8Codec; 326 (void)new QUtf8Codec;
338 (void)new QUtf16Codec; 327 (void)new QUtf16Codec;
339#endif 328#endif
340 return i; 329 return i;
341} 330}
342 331
343static int muted = 0; 332static int muted = 0;
344static int micMuted = 0; 333static int micMuted = 0;
345 334
346static void setVolume( int t = 0, int percent = -1 ) 335static void setVolume( int t = 0, int percent = -1 )
347{ 336{
348 switch ( t ) { 337 switch ( t ) {
349 case 0: { 338 case 0: {
350 Config cfg( "qpe" ); 339 Config cfg( "qpe" );
351 cfg.setGroup( "Volume" ); 340 cfg.setGroup( "Volume" );
352 if ( percent < 0 ) 341 if ( percent < 0 )
353 percent = cfg.readNumEntry( "VolumePercent", 50 ); 342 percent = cfg.readNumEntry( "VolumePercent", 50 );
354#ifndef QT_NO_SOUND 343#ifndef QT_NO_SOUND
355 int fd = 0; 344 int fd = 0;
356 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) { 345 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) {
357 int vol = muted ? 0 : percent; 346 int vol = muted ? 0 : percent;
358 // set both channels to same volume 347 // set both channels to same volume
359 vol |= vol << 8; 348 vol |= vol << 8;
360 ioctl( fd, MIXER_WRITE( SOUND_MIXER_VOLUME ), &vol ); 349 ioctl( fd, MIXER_WRITE( SOUND_MIXER_VOLUME ), &vol );
361 ::close( fd ); 350 ::close( fd );
362 } 351 }
363#endif 352#endif
364 } 353 }
365 break; 354 break;
366 } 355 }
367} 356}
368 357
369static void setMic( int t = 0, int percent = -1 ) 358static void setMic( int t = 0, int percent = -1 )
370{ 359{
371 switch ( t ) { 360 switch ( t ) {
372 case 0: { 361 case 0: {
373 Config cfg( "qpe" ); 362 Config cfg( "qpe" );
374 cfg.setGroup( "Volume" ); 363 cfg.setGroup( "Volume" );
375 if ( percent < 0 ) 364 if ( percent < 0 )
376 percent = cfg.readNumEntry( "Mic", 50 ); 365 percent = cfg.readNumEntry( "Mic", 50 );
377 366
378#ifndef QT_NO_SOUND 367#ifndef QT_NO_SOUND
379 int fd = 0; 368 int fd = 0;
380 int mic = micMuted ? 0 : percent; 369 int mic = micMuted ? 0 : percent;
381 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) { 370 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) {
382 ioctl( fd, MIXER_WRITE( SOUND_MIXER_MIC ), &mic ); 371 ioctl( fd, MIXER_WRITE( SOUND_MIXER_MIC ), &mic );
383 ::close( fd ); 372 ::close( fd );
384 } 373 }
385#endif 374#endif
386 } 375 }
387 break; 376 break;
388 } 377 }
389} 378}
390 379
391 380
392static void setBass( int t = 0, int percent = -1 ) 381static void setBass( int t = 0, int percent = -1 )
393{ 382{
394 switch ( t ) { 383 switch ( t ) {
395 case 0: { 384 case 0: {
396 Config cfg( "qpe" ); 385 Config cfg( "qpe" );
397 cfg.setGroup( "Volume" ); 386 cfg.setGroup( "Volume" );
398 if ( percent < 0 ) 387 if ( percent < 0 )
399 percent = cfg.readNumEntry( "BassPercent", 50 ); 388 percent = cfg.readNumEntry( "BassPercent", 50 );
400 389
401#ifndef QT_NO_SOUND 390#ifndef QT_NO_SOUND
402 int fd = 0; 391 int fd = 0;
403 int bass = percent; 392 int bass = percent;
404 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) { 393 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) {
405 ioctl( fd, MIXER_WRITE( SOUND_MIXER_BASS ), &bass ); 394 ioctl( fd, MIXER_WRITE( SOUND_MIXER_BASS ), &bass );
406 ::close( fd ); 395 ::close( fd );
407 } 396 }
408#endif 397#endif
409 } 398 }
410 break; 399 break;
411 } 400 }
412} 401}
413 402
414 403
415static void setTreble( int t = 0, int percent = -1 ) 404static void setTreble( int t = 0, int percent = -1 )
416{ 405{
417 switch ( t ) { 406 switch ( t ) {
418 case 0: { 407 case 0: {
419 Config cfg( "qpe" ); 408 Config cfg( "qpe" );
420 cfg.setGroup( "Volume" ); 409 cfg.setGroup( "Volume" );
421 if ( percent < 0 ) 410 if ( percent < 0 )
422 percent = cfg.readNumEntry( "TreblePercent", 50 ); 411 percent = cfg.readNumEntry( "TreblePercent", 50 );
423 412
424#ifndef QT_NO_SOUND 413#ifndef QT_NO_SOUND
425 int fd = 0; 414 int fd = 0;
426 int treble = percent; 415 int treble = percent;
427 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) { 416 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) {
428 ioctl( fd, MIXER_WRITE( SOUND_MIXER_TREBLE ), &treble ); 417 ioctl( fd, MIXER_WRITE( SOUND_MIXER_TREBLE ), &treble );
429 ::close( fd ); 418 ::close( fd );
430 } 419 }
431#endif 420#endif
432 } 421 }
433 break; 422 break;
434 } 423 }
435} 424}
436 425
437 426
438/** 427/**
439 \class QPEApplication 428 \class QPEApplication
440 \brief The QPEApplication class implements various system services 429 \brief The QPEApplication class implements various system services
441 that are available to all Qtopia applications. 430 that are available to all Qtopia applications.
442 431
443 Simply by using QPEApplication instead of QApplication, a standard Qt 432 Simply by using QPEApplication instead of QApplication, a standard Qt
444 application becomes a Qtopia application. It automatically follows 433 application becomes a Qtopia application. It automatically follows
445 style changes, quits and raises, and in the 434 style changes, quits and raises, and in the
446 case of \link docwidget.html document-oriented\endlink applications, 435 case of \link docwidget.html document-oriented\endlink applications,
447 changes the currently displayed document in response to the environment. 436 changes the currently displayed document in response to the environment.
448 437
449 To create a \link docwidget.html document-oriented\endlink 438 To create a \link docwidget.html document-oriented\endlink
450 application use showMainDocumentWidget(); to create a 439 application use showMainDocumentWidget(); to create a
451 non-document-oriented application use showMainWidget(). The 440 non-document-oriented application use showMainWidget(). The
452 keepRunning() function indicates whether the application will 441 keepRunning() function indicates whether the application will
453 continue running after it's processed the last \link qcop.html 442 continue running after it's processed the last \link qcop.html
454 QCop\endlink message. This can be changed using setKeepRunning(). 443 QCop\endlink message. This can be changed using setKeepRunning().
455 444
456 A variety of signals are emitted when certain events occur, for 445 A variety of signals are emitted when certain events occur, for
457 example, timeChanged(), clockChanged(), weekChanged(), 446 example, timeChanged(), clockChanged(), weekChanged(),
458 dateFormatChanged() and volumeChanged(). If the application receives 447 dateFormatChanged() and volumeChanged(). If the application receives
459 a \link qcop.html QCop\endlink message on the application's 448 a \link qcop.html QCop\endlink message on the application's
460 QPE/Application/\e{appname} channel, the appMessage() signal is 449 QPE/Application/\e{appname} channel, the appMessage() signal is
461 emitted. There are also flush() and reload() signals, which 450 emitted. There are also flush() and reload() signals, which
462 are emitted when synching begins and ends respectively - upon these 451 are emitted when synching begins and ends respectively - upon these
463 signals, the application should save and reload any data 452 signals, the application should save and reload any data
464 files that are involved in synching. Most of these signals will initially 453 files that are involved in synching. Most of these signals will initially
465 be received and unfiltered through the appMessage() signal. 454 be received and unfiltered through the appMessage() signal.
466 455
467 This class also provides a set of useful static functions. The 456 This class also provides a set of useful static functions. The
468 qpeDir() and documentDir() functions return the respective paths. 457 qpeDir() and documentDir() functions return the respective paths.
469 The grabKeyboard() and ungrabKeyboard() functions are used to 458 The grabKeyboard() and ungrabKeyboard() functions are used to
470 control whether the application takes control of the device's 459 control whether the application takes control of the device's
471 physical buttons (e.g. application launch keys). The stylus' mode of 460 physical buttons (e.g. application launch keys). The stylus' mode of
472 operation is set with setStylusOperation() and retrieved with 461 operation is set with setStylusOperation() and retrieved with
473 stylusOperation(). There are also setInputMethodHint() and 462 stylusOperation(). There are also setInputMethodHint() and
474 inputMethodHint() functions. 463 inputMethodHint() functions.
475 464
476 \ingroup qtopiaemb 465 \ingroup qtopiaemb
477*/ 466*/
478 467
479/*! 468/*!
480 \fn void QPEApplication::clientMoused() 469 \fn void QPEApplication::clientMoused()
481 470
482 \internal 471 \internal
483*/ 472*/
484 473
485/*! 474/*!
486 \fn void QPEApplication::timeChanged(); 475 \fn void QPEApplication::timeChanged();
487 This signal is emitted when the time changes outside the normal 476 This signal is emitted when the time changes outside the normal
488 passage of time, i.e. if the time is set backwards or forwards. 477 passage of time, i.e. if the time is set backwards or forwards.
489*/ 478*/
490 479
491/*! 480/*!
492 \fn void QPEApplication::clockChanged( bool ampm ); 481 \fn void QPEApplication::clockChanged( bool ampm );
493 482
494 This signal is emitted when the user changes the clock's style. If 483 This signal is emitted when the user changes the clock's style. If
495 \a ampm is TRUE, the user wants a 12-hour AM/PM clock, otherwise, 484 \a ampm is TRUE, the user wants a 12-hour AM/PM clock, otherwise,
496 they want a 24-hour clock. 485 they want a 24-hour clock.
497*/ 486*/
498 487
499/*! 488/*!
500 \fn void QPEApplication::volumeChanged( bool muted ) 489 \fn void QPEApplication::volumeChanged( bool muted )
501 490
502 This signal is emitted whenever the mute state is changed. If \a 491 This signal is emitted whenever the mute state is changed. If \a
503 muted is TRUE, then sound output has been muted. 492 muted is TRUE, then sound output has been muted.
504*/ 493*/
505 494
506/*! 495/*!
507 \fn void QPEApplication::weekChanged( bool startOnMonday ) 496 \fn void QPEApplication::weekChanged( bool startOnMonday )
508 497
509 This signal is emitted if the week start day is changed. If \a 498 This signal is emitted if the week start day is changed. If \a
510 startOnMonday is TRUE then the first day of the week is Monday; if 499 startOnMonday is TRUE then the first day of the week is Monday; if
511 \a startOnMonday is FALSE then the first day of the week is 500 \a startOnMonday is FALSE then the first day of the week is
512 Sunday. 501 Sunday.
513*/ 502*/
514 503
515/*! 504/*!
516 \fn void QPEApplication::dateFormatChanged(DateFormat) 505 \fn void QPEApplication::dateFormatChanged(DateFormat)
517 506
518 This signal is emitted whenever the date format is changed. 507 This signal is emitted whenever the date format is changed.
519*/ 508*/
520 509
521/*! 510/*!
522 \fn void QPEApplication::flush() 511 \fn void QPEApplication::flush()
523 512
524 ### 513 ###
525*/ 514*/
526 515
527/*! 516/*!
528 \fn void QPEApplication::reload() 517 \fn void QPEApplication::reload()
529 518
530*/ 519*/
531 520
532 521
533 522
534void QPEApplication::processQCopFile() 523void QPEApplication::processQCopFile()
535{ 524{
536 QString qcopfn("/tmp/qcop-msg-"); 525 QString qcopfn("/tmp/qcop-msg-");
537 qcopfn += d->appName; // append command name 526 qcopfn += d->appName; // append command name
538 527
539 QFile f(qcopfn); 528 QFile f(qcopfn);
540 if ( f.open(IO_ReadWrite) ) { 529 if ( f.open(IO_ReadWrite) ) {
541#ifndef Q_OS_WIN32 530#ifndef Q_OS_WIN32
542 flock(f.handle(), LOCK_EX); 531 flock(f.handle(), LOCK_EX);
543#endif 532#endif
544 QDataStream ds(&f); 533 QDataStream ds(&f);
545 QCString channel, message; 534 QCString channel, message;
546 QByteArray data; 535 QByteArray data;
547 while(!ds.atEnd()) { 536 while(!ds.atEnd()) {
548 ds >> channel >> message >> data; 537 ds >> channel >> message >> data;
549 d->enqueueQCop(channel,message,data); 538 d->enqueueQCop(channel,message,data);
550 } 539 }
551 ::ftruncate(f.handle(), 0); 540 ::ftruncate(f.handle(), 0);
552#ifndef Q_OS_WIN32 541#ifndef Q_OS_WIN32
553 f.flush(); 542 f.flush();
554 flock(f.handle(), LOCK_UN); 543 flock(f.handle(), LOCK_UN);
555#endif 544#endif
556 } 545 }
557#endif 546#endif
558} 547}
559 548
560 549
561/*! 550/*!
562 \fn void QPEApplication::appMessage( const QCString& msg, const QByteArray& data ) 551 \fn void QPEApplication::appMessage( const QCString& msg, const QByteArray& data )
563 552
564 This signal is emitted when a message is received on this 553 This signal is emitted when a message is received on this
565 application's QPE/Application/<i>appname</i> \link qcop.html 554 application's QPE/Application/<i>appname</i> \link qcop.html
566 QCop\endlink channel. 555 QCop\endlink channel.
567 556
568 The slot to which you connect this signal uses \a msg and \a data 557 The slot to which you connect this signal uses \a msg and \a data
569 in the following way: 558 in the following way:
570 559
571\code 560\code
572 void MyWidget::receive( const QCString& msg, const QByteArray& data ) 561 void MyWidget::receive( const QCString& msg, const QByteArray& data )
573 { 562 {
574 QDataStream stream( data, IO_ReadOnly ); 563 QDataStream stream( data, IO_ReadOnly );
575 if ( msg == "someMessage(int,int,int)" ) { 564 if ( msg == "someMessage(int,int,int)" ) {
576 int a,b,c; 565 int a,b,c;
577 stream >> a >> b >> c; 566 stream >> a >> b >> c;
578 ... 567 ...
579 } else if ( msg == "otherMessage(QString)" ) { 568 } else if ( msg == "otherMessage(QString)" ) {
580 ... 569 ...
581 } 570 }
582 } 571 }
583\endcode 572\endcode
584 573
585 \sa qcop.html 574 \sa qcop.html
586 Note that messages received here may be processed by qpe application 575 Note that messages received here may be processed by qpe application
587 and emitted as signals, such as flush() and reload(). 576 and emitted as signals, such as flush() and reload().
588*/ 577*/
589 578
590/*! 579/*!
591 Constructs a QPEApplication just as you would construct 580 Constructs a QPEApplication just as you would construct
592 a QApplication, passing \a argc, \a argv, and \a t. 581 a QApplication, passing \a argc, \a argv, and \a t.
593 582
594 For applications, \a t should be the default, GuiClient. Only 583 For applications, \a t should be the default, GuiClient. Only
595 the Qtopia server passes GuiServer. 584 the Qtopia server passes GuiServer.
596*/ 585*/
597QPEApplication::QPEApplication( int & argc, char **argv, Type t ) 586QPEApplication::QPEApplication( int & argc, char **argv, Type t )
598 : QApplication( hack(argc), argv, t ), pidChannel( 0 ) 587 : QApplication( hack(argc), argv, t ), pidChannel( 0 )
599{ 588{
600 QPixmapCache::setCacheLimit(256); // sensible default for smaller devices. 589 QPixmapCache::setCacheLimit(256); // sensible default for smaller devices.
601 590
602 d = new QPEApplicationData; 591 d = new QPEApplicationData;
603 d->loadTextCodecs(); 592 d->loadTextCodecs();
604 d->loadImageCodecs(); 593 d->loadImageCodecs();
605 int dw = desktop() ->width(); 594 int dw = desktop() ->width();
606 595
607 if ( dw < 200 ) { 596 if ( dw < 200 ) {
608 setFont( QFont( "vera", 8 ) ); 597 setFont( QFont( "vera", 8 ) );
609 AppLnk::setSmallIconSize( 10 ); 598 AppLnk::setSmallIconSize( 10 );
610 AppLnk::setBigIconSize( 28 ); 599 AppLnk::setBigIconSize( 28 );
611 } 600 }
612#if defined(OPIE_HIGH_RES_SMALL_PHY) 601#if defined(OPIE_HIGH_RES_SMALL_PHY)
613 else if ( dw > 600 ) { 602 else if ( dw > 600 ) {
614 setFont( QFont( "vera", 16 ) ); 603 setFont( QFont( "vera", 16 ) );
615 AppLnk::setSmallIconSize( 24 ); 604 AppLnk::setSmallIconSize( 24 );
616 AppLnk::setBigIconSize( 48 ); 605 AppLnk::setBigIconSize( 48 );
617 } 606 }
618#endif 607#endif
619 else if ( dw > 200 ) { 608 else if ( dw > 200 ) {
620 setFont( QFont( "vera", 10 ) ); 609 setFont( QFont( "vera", 10 ) );
621 AppLnk::setSmallIconSize( 14 ); 610 AppLnk::setSmallIconSize( 14 );
622 AppLnk::setBigIconSize( 32 ); 611 AppLnk::setBigIconSize( 32 );
623 } 612 }
624 613
625 QMimeSourceFactory::setDefaultFactory( new ResourceMimeFactory ); 614 QMimeSourceFactory::setDefaultFactory( new ResourceMimeFactory );
626 615
627 connect( this, SIGNAL( lastWindowClosed() ), this, SLOT( hideOrQuit() ) ); 616 connect( this, SIGNAL( lastWindowClosed() ), this, SLOT( hideOrQuit() ) );
628 617
629 618
630 sysChannel = new QCopChannel( "QPE/System", this ); 619 sysChannel = new QCopChannel( "QPE/System", this );
631 connect( sysChannel, SIGNAL( received(const QCString&,const QByteArray&) ), 620 connect( sysChannel, SIGNAL( received(const QCString&,const QByteArray&) ),
632 this, SLOT( systemMessage(const QCString&,const QByteArray&) ) ); 621 this, SLOT( systemMessage(const QCString&,const QByteArray&) ) );
633 622
634/* COde now in initapp */ 623/* COde now in initapp */
635#if 0 624#if 0
636#if defined(Q_WS_QWS) && !defined(QT_NO_COP) 625#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
637 626
638 QString qcopfn( "/tmp/qcop-msg-" ); 627 QString qcopfn( "/tmp/qcop-msg-" );
639 qcopfn += QString( argv[ 0 ] ); // append command name 628 qcopfn += QString( argv[ 0 ] ); // append command name
640 629
641 QFile f( qcopfn ); 630 QFile f( qcopfn );
642 if ( f.open( IO_ReadOnly ) ) { 631 if ( f.open( IO_ReadOnly ) ) {
643 flock( f.handle(), LOCK_EX ); 632 flock( f.handle(), LOCK_EX );
644 } 633 }
645 634
646 635
647 636
648 QCString channel = QCString( argv[ 0 ] ); 637 QCString channel = QCString( argv[ 0 ] );
649 channel.replace( QRegExp( ".*/" ), "" ); 638 channel.replace( QRegExp( ".*/" ), "" );
650 d->appName = channel; 639 d->appName = channel;
651 channel = "QPE/Application/" + channel; 640 channel = "QPE/Application/" + channel;
652 pidChannel = new QCopChannel( channel, this ); 641 pidChannel = new QCopChannel( channel, this );
653 connect( pidChannel, SIGNAL( received(const QCString&,const QByteArray&) ), 642 connect( pidChannel, SIGNAL( received(const QCString&,const QByteArray&) ),
654 this, SLOT( pidMessage(const QCString&,const QByteArray&) ) ); 643 this, SLOT( pidMessage(const QCString&,const QByteArray&) ) );
655 644
656 if ( f.isOpen() ) { 645 if ( f.isOpen() ) {
657 d->keep_running = FALSE; 646 d->keep_running = FALSE;
658 QDataStream ds( &f ); 647 QDataStream ds( &f );
659 QCString channel, message; 648 QCString channel, message;
660 QByteArray data; 649 QByteArray data;
661 while ( !ds.atEnd() ) { 650 while ( !ds.atEnd() ) {
662 ds >> channel >> message >> data; 651 ds >> channel >> message >> data;
663 d->enqueueQCop( channel, message, data ); 652 d->enqueueQCop( channel, message, data );
664 } 653 }
665 654
666 flock( f.handle(), LOCK_UN ); 655 flock( f.handle(), LOCK_UN );
667 f.close(); 656 f.close();
668 f.remove(); 657 f.remove();
669 } 658 }
670 659
671 for ( int a = 0; a < argc; a++ ) { 660 for ( int a = 0; a < argc; a++ ) {
672 if ( qstrcmp( argv[ a ], "-preload" ) == 0 ) { 661 if ( qstrcmp( argv[ a ], "-preload" ) == 0 ) {
673 argv[ a ] = argv[ a + 1 ]; 662 argv[ a ] = argv[ a + 1 ];
674 a++; 663 a++;
675 d->preloaded = TRUE; 664 d->preloaded = TRUE;
676 argc -= 1; 665 argc -= 1;
677 } 666 }
678 else if ( qstrcmp( argv[ a ], "-preload-show" ) == 0 ) { 667 else if ( qstrcmp( argv[ a ], "-preload-show" ) == 0 ) {
679 argv[ a ] = argv[ a + 1 ]; 668 argv[ a ] = argv[ a + 1 ];
680 a++; 669 a++;
681 d->preloaded = TRUE; 670 d->preloaded = TRUE;
682 d->forceshow = TRUE; 671 d->forceshow = TRUE;
683 argc -= 1; 672 argc -= 1;
684 } 673 }
685 } 674 }
686 675
687 /* overide stored arguments */ 676 /* overide stored arguments */
688 setArgs( argc, argv ); 677 setArgs( argc, argv );
689 678
690#endif 679#endif
691#else 680#else
692 initApp( argc, argv ); 681 initApp( argc, argv );
693#endif 682#endif
694 // qwsSetDecoration( new QPEDecoration() ); 683 // qwsSetDecoration( new QPEDecoration() );
695 684
696#ifndef QT_NO_TRANSLATION 685#ifndef QT_NO_TRANSLATION
697 686
698 d->langs = Global::languageList(); 687 d->langs = Global::languageList();
699 for ( QStringList::ConstIterator it = d->langs.begin(); it != d->langs.end(); ++it ) { 688 for ( QStringList::ConstIterator it = d->langs.begin(); it != d->langs.end(); ++it ) {
700 QString lang = *it; 689 QString lang = *it;
701 690
702 installTranslation( lang + "/libopie.qm"); 691 installTranslation( lang + "/libopie.qm");
703 installTranslation( lang + "/libqpe.qm" ); 692 installTranslation( lang + "/libqpe.qm" );
704 installTranslation( lang + "/" + d->appName + ".qm" ); 693 installTranslation( lang + "/" + d->appName + ".qm" );
705 694
706 695
707 //###language/font hack; should look it up somewhere 696 //###language/font hack; should look it up somewhere
708#ifdef QWS 697#ifdef QWS
709 698
710 if ( lang == "ja" || lang == "zh_CN" || lang == "zh_TW" || lang == "ko" ) { 699 if ( lang == "ja" || lang == "zh_CN" || lang == "zh_TW" || lang == "ko" ) {
711 QFont fn = FontManager::unicodeFont( FontManager::Proportional ); 700 QFont fn = FontManager::unicodeFont( FontManager::Proportional );
712 setFont( fn ); 701 setFont( fn );
713 } 702 }
714#endif 703#endif
715 } 704 }
716#endif 705#endif
717 706
718 applyStyle(); 707 applyStyle();
719 708
720 if ( type() == GuiServer ) { 709 if ( type() == GuiServer ) {
721 setVolume(); 710 setVolume();
722 } 711 }
723 712
724 installEventFilter( this ); 713 installEventFilter( this );
725 714
726 QPEMenuToolFocusManager::initialize(); 715 QPEMenuToolFocusManager::initialize();
727 716
728#ifdef QT_NO_QWS_CURSOR 717#ifdef QT_NO_QWS_CURSOR
729 // if we have no cursor, probably don't want tooltips 718 // if we have no cursor, probably don't want tooltips
730 QToolTip::setEnabled( FALSE ); 719 QToolTip::setEnabled( FALSE );
731#endif 720#endif
732} 721}
733 722
734 723
735#ifdef QTOPIA_INTERNAL_INITAPP 724#ifdef QTOPIA_INTERNAL_INITAPP
736void QPEApplication::initApp( int argc, char **argv ) 725void QPEApplication::initApp( int argc, char **argv )
737{ 726{
738 delete pidChannel; 727 delete pidChannel;
739 d->keep_running = TRUE; 728 d->keep_running = TRUE;
740 d->preloaded = FALSE; 729 d->preloaded = FALSE;
741 d->forceshow = FALSE; 730 d->forceshow = FALSE;
742 731
743 QCString channel = QCString(argv[0]); 732 QCString channel = QCString(argv[0]);
744 733
745 channel.replace(QRegExp(".*/"),""); 734 channel.replace(QRegExp(".*/"),"");
746 d->appName = channel; 735 d->appName = channel;
747 736
748 #if QT_VERSION > 235 737 #if QT_VERSION > 235
749 qt_fbdpy->setIdentity( channel ); // In Qt/E 2.3.6 738 qt_fbdpy->setIdentity( channel ); // In Qt/E 2.3.6
750 #endif 739 #endif
751 740
752 channel = "QPE/Application/" + channel; 741 channel = "QPE/Application/" + channel;
753 pidChannel = new QCopChannel( channel, this); 742 pidChannel = new QCopChannel( channel, this);
754 connect( pidChannel, SIGNAL(received(const QCString&,const QByteArray&)), 743 connect( pidChannel, SIGNAL(received(const QCString&,const QByteArray&)),
755 this, SLOT(pidMessage(const QCString&,const QByteArray&))); 744 this, SLOT(pidMessage(const QCString&,const QByteArray&)));
756 745
757 746
758 747
759 processQCopFile(); 748 processQCopFile();
760 d->keep_running = d->qcopq.isEmpty(); 749 d->keep_running = d->qcopq.isEmpty();
761 750
762 for (int a=0; a<argc; a++) { 751 for (int a=0; a<argc; a++) {
763 if ( qstrcmp(argv[a],"-preload")==0 ) { 752 if ( qstrcmp(argv[a],"-preload")==0 ) {
764 argv[a] = argv[a+1]; 753 argv[a] = argv[a+1];
765 a++; 754 a++;
766 d->preloaded = TRUE; 755 d->preloaded = TRUE;
767 argc-=1; 756 argc-=1;
768 } else if ( qstrcmp(argv[a],"-preload-show")==0 ) { 757 } else if ( qstrcmp(argv[a],"-preload-show")==0 ) {
769 argv[a] = argv[a+1]; 758 argv[a] = argv[a+1];
770 a++; 759 a++;
771 d->preloaded = TRUE; 760 d->preloaded = TRUE;
772 d->forceshow = TRUE; 761 d->forceshow = TRUE;
773 argc-=1; 762 argc-=1;
774 } 763 }
775 } 764 }
776 765
777 /* overide stored arguments */ 766 /* overide stored arguments */
778 setArgs(argc, argv); 767 setArgs(argc, argv);
779 768
780 /* install translation here */ 769 /* install translation here */
781 for ( QStringList::ConstIterator it = d->langs.begin(); it != d->langs.end(); ++it ) 770 for ( QStringList::ConstIterator it = d->langs.begin(); it != d->langs.end(); ++it )
782 installTranslation( (*it) + "/" + d->appName + ".qm" ); 771 installTranslation( (*it) + "/" + d->appName + ".qm" );
783} 772}
784#endif 773#endif
785 774
786 775
787static QPtrDict<void>* inputMethodDict = 0; 776static QPtrDict<void>* inputMethodDict = 0;
788static void createInputMethodDict() 777static void createInputMethodDict()
789{ 778{
790 if ( !inputMethodDict ) 779 if ( !inputMethodDict )
791 inputMethodDict = new QPtrDict<void>; 780 inputMethodDict = new QPtrDict<void>;
792} 781}
793 782
794/*! 783/*!
795 Returns the currently set hint to the system as to whether 784 Returns the currently set hint to the system as to whether
796 widget \a w has any use for text input methods. 785 widget \a w has any use for text input methods.
797 786
798 787
799 \sa setInputMethodHint() InputMethodHint 788 \sa setInputMethodHint() InputMethodHint
800*/ 789*/
801QPEApplication::InputMethodHint QPEApplication::inputMethodHint( QWidget * w ) 790QPEApplication::InputMethodHint QPEApplication::inputMethodHint( QWidget * w )
802{ 791{
803 if ( inputMethodDict && w ) 792 if ( inputMethodDict && w )
804 return ( InputMethodHint ) ( int ) inputMethodDict->find( w ); 793 return ( InputMethodHint ) ( int ) inputMethodDict->find( w );
805 return Normal; 794 return Normal;
806} 795}
807 796
808/*! 797/*!
809 \enum QPEApplication::InputMethodHint 798 \enum QPEApplication::InputMethodHint
810 799
811 \value Normal the application sometimes needs text input (the default). 800 \value Normal the application sometimes needs text input (the default).
812 \value AlwaysOff the application never needs text input. 801 \value AlwaysOff the application never needs text input.
813 \value AlwaysOn the application always needs text input. 802 \value AlwaysOn the application always needs text input.
814*/ 803*/
815 804
816/*! 805/*!
817 Hints to the system that widget \a w has use for text input methods 806 Hints to the system that widget \a w has use for text input methods
818 as specified by \a mode. 807 as specified by \a mode.
819 808
820 \sa inputMethodHint() InputMethodHint 809 \sa inputMethodHint() InputMethodHint
821*/ 810*/
822void QPEApplication::setInputMethodHint( QWidget * w, InputMethodHint mode ) 811void QPEApplication::setInputMethodHint( QWidget * w, InputMethodHint mode )
823{ 812{
824 createInputMethodDict(); 813 createInputMethodDict();
825 if ( mode == Normal ) { 814 if ( mode == Normal ) {
826 inputMethodDict->remove 815 inputMethodDict->remove
827 ( w ); 816 ( w );
828 } 817 }
829 else { 818 else {
830 inputMethodDict->insert( w, ( void* ) mode ); 819 inputMethodDict->insert( w, ( void* ) mode );
831 } 820 }
832} 821}
833 822
834class HackDialog : public QDialog 823class HackDialog : public QDialog
835{ 824{
836public: 825public:
837 void acceptIt() 826 void acceptIt()
838 { 827 {
839 accept(); 828 accept();
840 } 829 }
841 void rejectIt() 830 void rejectIt()
842 { 831 {
843 reject(); 832 reject();
844 } 833 }
845}; 834};
846 835
847 836
848void QPEApplication::mapToDefaultAction( QWSKeyEvent * ke, int key ) 837void QPEApplication::mapToDefaultAction( QWSKeyEvent * ke, int key )
849{ 838{
850 // specialised actions for certain widgets. May want to 839 // specialised actions for certain widgets. May want to
851 // add more stuff here. 840 // add more stuff here.
852 if ( activePopupWidget() && activePopupWidget() ->inherits( "QListBox" ) 841 if ( activePopupWidget() && activePopupWidget() ->inherits( "QListBox" )
853 && activePopupWidget() ->parentWidget() 842 && activePopupWidget() ->parentWidget()
854 && activePopupWidget() ->parentWidget() ->inherits( "QComboBox" ) ) 843 && activePopupWidget() ->parentWidget() ->inherits( "QComboBox" ) )
855 key = Qt::Key_Return; 844 key = Qt::Key_Return;
856 845
857 if ( activePopupWidget() && activePopupWidget() ->inherits( "QPopupMenu" ) ) 846 if ( activePopupWidget() && activePopupWidget() ->inherits( "QPopupMenu" ) )
858 key = Qt::Key_Return; 847 key = Qt::Key_Return;
859 848
860#ifdef QWS 849#ifdef QWS
861 850
862 ke->simpleData.keycode = key; 851 ke->simpleData.keycode = key;
863#endif 852#endif
864} 853}
865 854
866class HackWidget : public QWidget 855class HackWidget : public QWidget
867{ 856{
868public: 857public:
869 bool needsOk() 858 bool needsOk()
870 { 859 {
871 return ( getWState() & WState_Reserved1 ); 860 return ( getWState() & WState_Reserved1 );
872 } 861 }
873}; 862};
874 863
875/*! 864/*!
876 \internal 865 \internal
877*/ 866*/
878 867
879#ifdef QWS 868#ifdef QWS
880bool QPEApplication::qwsEventFilter( QWSEvent * e ) 869bool QPEApplication::qwsEventFilter( QWSEvent * e )
881{ 870{
882 if ( !d->notbusysent && e->type == QWSEvent::Focus ) { 871 if ( !d->notbusysent && e->type == QWSEvent::Focus ) {
883 if ( qApp->type() != QApplication::GuiServer ) { 872 if ( qApp->type() != QApplication::GuiServer ) {
884 QCopEnvelope e( "QPE/System", "notBusy(QString)" ); 873 QCopEnvelope e( "QPE/System", "notBusy(QString)" );
885 e << d->appName; 874 e << d->appName;
886 } 875 }
887 d->notbusysent = TRUE; 876 d->notbusysent = TRUE;
888 } 877 }
889 if ( type() == GuiServer ) { 878 if ( type() == GuiServer ) {
890 switch ( e->type ) { 879 switch ( e->type ) {
891 case QWSEvent::Mouse: 880 case QWSEvent::Mouse:
892 if ( e->asMouse() ->simpleData.state && !QWidget::find( e->window() ) ) 881 if ( e->asMouse() ->simpleData.state && !QWidget::find( e->window() ) )
893 emit clientMoused(); 882 emit clientMoused();
894 break; 883 break;
895 default: 884 default:
896 break; 885 break;
897 } 886 }
898 } 887 }
899 if ( e->type == QWSEvent::Key ) { 888 if ( e->type == QWSEvent::Key ) {
900 QWSKeyEvent *ke = ( QWSKeyEvent * ) e; 889 QWSKeyEvent *ke = ( QWSKeyEvent * ) e;
901 if ( ke->simpleData.keycode == Qt::Key_F33 ) { 890 if ( ke->simpleData.keycode == Qt::Key_F33 ) {
902 // Use special "OK" key to press "OK" on top level widgets 891 // Use special "OK" key to press "OK" on top level widgets
903 QWidget * active = activeWindow(); 892 QWidget * active = activeWindow();
904 QWidget *popup = 0; 893 QWidget *popup = 0;
905 if ( active && active->isPopup() ) { 894 if ( active && active->isPopup() ) {
906 popup = active; 895 popup = active;
907 active = active->parentWidget(); 896 active = active->parentWidget();
908 } 897 }
909 if ( active && ( int ) active->winId() == ke->simpleData.window && 898 if ( active && ( int ) active->winId() == ke->simpleData.window &&
910 !active->testWFlags( WStyle_Customize | WType_Popup | WType_Desktop ) ) { 899 !active->testWFlags( WStyle_Customize | WType_Popup | WType_Desktop ) ) {
911 if ( ke->simpleData.is_press ) { 900 if ( ke->simpleData.is_press ) {
912 if ( popup ) 901 if ( popup )
913 popup->close(); 902 popup->close();
914 if ( active->inherits( "QDialog" ) ) { 903 if ( active->inherits( "QDialog" ) ) {
915 HackDialog * d = ( HackDialog * ) active; 904 HackDialog * d = ( HackDialog * ) active;
916 d->acceptIt(); 905 d->acceptIt();
917 return TRUE; 906 return TRUE;
918 } 907 }
919 else if ( ( ( HackWidget * ) active ) ->needsOk() ) { 908 else if ( ( ( HackWidget * ) active ) ->needsOk() ) {
920 QSignal s; 909 QSignal s;
921 s.connect( active, SLOT( accept() ) ); 910 s.connect( active, SLOT( accept() ) );
922 s.activate(); 911 s.activate();
923 } 912 }
924 else { 913 else {
925 // do the same as with the select key: Map to the default action of the widget: 914 // do the same as with the select key: Map to the default action of the widget:
926 mapToDefaultAction( ke, Qt::Key_Return ); 915 mapToDefaultAction( ke, Qt::Key_Return );
927 } 916 }
928 } 917 }
929 } 918 }
930 } 919 }
931 else if ( ke->simpleData.keycode == Qt::Key_F30 ) { 920 else if ( ke->simpleData.keycode == Qt::Key_F30 ) {
932 // Use special "select" key to do whatever default action a widget has 921 // Use special "select" key to do whatever default action a widget has
933 mapToDefaultAction( ke, Qt::Key_Space ); 922 mapToDefaultAction( ke, Qt::Key_Space );
934 } 923 }
935 else if ( ke->simpleData.keycode == Qt::Key_Escape && 924 else if ( ke->simpleData.keycode == Qt::Key_Escape &&
936 ke->simpleData.is_press ) { 925 ke->simpleData.is_press ) {
937 // Escape key closes app if focus on toplevel 926 // Escape key closes app if focus on toplevel
938 QWidget * active = activeWindow(); 927 QWidget * active = activeWindow();
939 if ( active && active->testWFlags( WType_TopLevel ) && 928 if ( active && active->testWFlags( WType_TopLevel ) &&
940 ( int ) active->winId() == ke->simpleData.window && 929 ( int ) active->winId() == ke->simpleData.window &&
941 !active->testWFlags( WStyle_Dialog | WStyle_Customize | WType_Popup | WType_Desktop ) ) { 930 !active->testWFlags( WStyle_Dialog | WStyle_Customize | WType_Popup | WType_Desktop ) ) {
942 if ( active->inherits( "QDialog" ) ) { 931 if ( active->inherits( "QDialog" ) ) {
943 HackDialog * d = ( HackDialog * ) active; 932 HackDialog * d = ( HackDialog * ) active;
944 d->rejectIt(); 933 d->rejectIt();
945 return TRUE; 934 return TRUE;
946 } 935 }
947 else if ( strcmp( argv() [ 0 ], "embeddedkonsole" ) != 0 ) { 936 else if ( strcmp( argv() [ 0 ], "embeddedkonsole" ) != 0 ) {
948 active->close(); 937 active->close();
949 } 938 }
950 } 939 }
951 } 940 }
952 else if ( ke->simpleData.keycode >= Qt::Key_F1 && ke->simpleData.keycode <= Qt::Key_F29 ) { 941 else if ( ke->simpleData.keycode >= Qt::Key_F1 && ke->simpleData.keycode <= Qt::Key_F29 ) {
953 // this should be if ( ODevice::inst ( )-> buttonForKeycode ( ... )) 942 // this should be if ( ODevice::inst ( )-> buttonForKeycode ( ... ))
954 // but we cannot access libopie function within libqpe :( 943 // but we cannot access libopie function within libqpe :(
955 944
956 QWidget * active = activeWindow ( ); 945 QWidget * active = activeWindow ( );
957 if ( active && ((int) active-> winId ( ) == ke-> simpleData.window )) { 946 if ( active && ((int) active-> winId ( ) == ke-> simpleData.window )) {
958 if ( d-> kbgrabbed ) { // we grabbed the keyboard 947 if ( d-> kbgrabbed ) { // we grabbed the keyboard
959 QChar ch ( ke-> simpleData.unicode ); 948 QChar ch ( ke-> simpleData.unicode );
960 QKeyEvent qke ( ke-> simpleData. is_press ? QEvent::KeyPress : QEvent::KeyRelease, 949 QKeyEvent qke ( ke-> simpleData. is_press ? QEvent::KeyPress : QEvent::KeyRelease,
961 ke-> simpleData.keycode, 950 ke-> simpleData.keycode,
962 ch. latin1 ( ), 951 ch. latin1 ( ),
963 ke-> simpleData.modifiers, 952 ke-> simpleData.modifiers,
964 QString ( ch ), 953 QString ( ch ),
965 ke-> simpleData.is_auto_repeat, 1 ); 954 ke-> simpleData.is_auto_repeat, 1 );
966 955
967 QObject *which = QWidget::keyboardGrabber ( ); 956 QObject *which = QWidget::keyboardGrabber ( );
968 if ( !which ) 957 if ( !which )
969 which = QApplication::focusWidget ( ); 958 which = QApplication::focusWidget ( );
970 if ( !which ) 959 if ( !which )
971 which = QApplication::activeWindow ( ); 960 which = QApplication::activeWindow ( );
972 if ( !which ) 961 if ( !which )
973 which = qApp; 962 which = qApp;
974 963
975 QApplication::sendEvent ( which, &qke ); 964 QApplication::sendEvent ( which, &qke );
976 } 965 }
977 else { // we didn't grab the keyboard, so send the event to the launcher 966 else { // we didn't grab the keyboard, so send the event to the launcher
978 QCopEnvelope e ( "QPE/Launcher", "deviceButton(int,int,int)" ); 967 QCopEnvelope e ( "QPE/Launcher", "deviceButton(int,int,int)" );
979 e << int( ke-> simpleData.keycode ) << int( ke-> simpleData. is_press ) << int( ke-> simpleData.is_auto_repeat ); 968 e << int( ke-> simpleData.keycode ) << int( ke-> simpleData. is_press ) << int( ke-> simpleData.is_auto_repeat );
980 } 969 }
981 } 970 }
982 return true; 971 return true;
983 } 972 }
984 } 973 }
985 if ( e->type == QWSEvent::Focus ) { 974 if ( e->type == QWSEvent::Focus ) {
986 QWSFocusEvent * fe = ( QWSFocusEvent* ) e; 975 QWSFocusEvent * fe = ( QWSFocusEvent* ) e;
987 if ( !fe->simpleData.get_focus ) { 976 if ( !fe->simpleData.get_focus ) {
988 QWidget * active = activeWindow(); 977 QWidget * active = activeWindow();
989 while ( active && active->isPopup() ) { 978 while ( active && active->isPopup() ) {
990 active->close(); 979 active->close();
991 active = activeWindow(); 980 active = activeWindow();
992 } 981 }
993 } 982 }
994 else { 983 else {
995 // make sure our modal widget is ALWAYS on top 984 // make sure our modal widget is ALWAYS on top
996 QWidget *topm = activeModalWidget(); 985 QWidget *topm = activeModalWidget();
997 if ( topm && static_cast<int>( topm->winId() ) != fe->simpleData.window) { 986 if ( topm && static_cast<int>( topm->winId() ) != fe->simpleData.window) {
998 topm->raise(); 987 topm->raise();
999 } 988 }
1000 } 989 }
1001 if ( fe->simpleData.get_focus && inputMethodDict ) { 990 if ( fe->simpleData.get_focus && inputMethodDict ) {
1002 InputMethodHint m = inputMethodHint( QWidget::find( e->window() ) ); 991 InputMethodHint m = inputMethodHint( QWidget::find( e->window() ) );
1003 if ( m == AlwaysOff ) 992 if ( m == AlwaysOff )
1004 Global::hideInputMethod(); 993 Global::hideInputMethod();
1005 if ( m == AlwaysOn ) 994 if ( m == AlwaysOn )
1006 Global::showInputMethod(); 995 Global::showInputMethod();
1007 } 996 }
1008 } 997 }
1009 998
1010 999
1011 return QApplication::qwsEventFilter( e ); 1000 return QApplication::qwsEventFilter( e );
1012} 1001}
1013#endif 1002#endif
1014 1003
1015/*! 1004/*!
1016 Destroys the QPEApplication. 1005 Destroys the QPEApplication.
1017*/ 1006*/
1018QPEApplication::~QPEApplication() 1007QPEApplication::~QPEApplication()
1019{ 1008{
1020 ungrabKeyboard(); 1009 ungrabKeyboard();
1021#if defined(Q_WS_QWS) && !defined(QT_NO_COP) 1010#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
1022 // Need to delete QCopChannels early, since the display will 1011 // Need to delete QCopChannels early, since the display will
1023 // be gone by the time we get to ~QObject(). 1012 // be gone by the time we get to ~QObject().
1024 delete sysChannel; 1013 delete sysChannel;
1025 delete pidChannel; 1014 delete pidChannel;
1026#endif 1015#endif
1027 1016
1028 delete d; 1017 delete d;
1029} 1018}
1030 1019
1031/*! 1020/*!
1032 Returns <tt>$OPIEDIR/</tt>. 1021 Returns <tt>$OPIEDIR/</tt>.
1033*/ 1022*/
1034QString QPEApplication::qpeDir() 1023QString QPEApplication::qpeDir()
1035{ 1024{
1036 const char * base = getenv( "OPIEDIR" ); 1025 const char * base = getenv( "OPIEDIR" );
1037 if ( base ) 1026 if ( base )
1038 return QString( base ) + "/"; 1027 return QString( base ) + "/";
1039 1028
1040 return QString( "../" ); 1029 return QString( "../" );
1041} 1030}
1042 1031
1043/*! 1032/*!
1044 Returns the user's current Document directory. There is a trailing "/". 1033 Returns the user's current Document directory. There is a trailing "/".
1045 .. well, it does now,, and there's no trailing '/' 1034 .. well, it does now,, and there's no trailing '/'
1046*/ 1035*/
1047QString QPEApplication::documentDir() 1036QString QPEApplication::documentDir()
1048{ 1037{
1049 const char* base = getenv( "HOME"); 1038 const char* base = getenv( "HOME");
1050 if ( base ) 1039 if ( base )
1051 return QString( base ) + "/Documents"; 1040 return QString( base ) + "/Documents";
1052 1041
1053 return QString( "../Documents" ); 1042 return QString( "../Documents" );
1054} 1043}
1055 1044
1056static int deforient = -1; 1045static int deforient = -1;
1057 1046
1058/*! 1047/*!
1059 \internal 1048 \internal
1060*/ 1049*/
1061int QPEApplication::defaultRotation() 1050int QPEApplication::defaultRotation()
1062{ 1051{
1063 if ( deforient < 0 ) { 1052 if ( deforient < 0 ) {
1064 QString d = getenv( "QWS_DISPLAY" ); 1053 QString d = getenv( "QWS_DISPLAY" );
1065 if ( d.contains( "Rot90" ) ) { 1054 if ( d.contains( "Rot90" ) ) {
1066 deforient = 90; 1055 deforient = 90;
1067 } 1056 }
1068 else if ( d.contains( "Rot180" ) ) { 1057 else if ( d.contains( "Rot180" ) ) {
1069 deforient = 180; 1058 deforient = 180;
1070 } 1059 }
1071 else if ( d.contains( "Rot270" ) ) { 1060 else if ( d.contains( "Rot270" ) ) {
1072 deforient = 270; 1061 deforient = 270;
1073 } 1062 }
1074 else { 1063 else {
1075 deforient = 0; 1064 deforient = 0;
1076 } 1065 }
1077 } 1066 }
1078 return deforient; 1067 return deforient;
1079} 1068}
1080 1069
1081/*! 1070/*!
1082 \internal 1071 \internal
1083*/ 1072*/
1084void QPEApplication::setDefaultRotation( int r ) 1073void QPEApplication::setDefaultRotation( int r )
1085{ 1074{
1086 if ( qApp->type() == GuiServer ) { 1075 if ( qApp->type() == GuiServer ) {
1087 deforient = r; 1076 deforient = r;
1088 setenv( "QWS_DISPLAY", QString( "Transformed:Rot%1:0" ).arg( r ).latin1(), 1 ); 1077 setenv( "QWS_DISPLAY", QString( "Transformed:Rot%1:0" ).arg( r ).latin1(), 1 );
1089 Config config("qpe"); 1078 Config config("qpe");
1090 config.setGroup( "Rotation" ); 1079 config.setGroup( "Rotation" );
1091 config.writeEntry( "Rot", r ); 1080 config.writeEntry( "Rot", r );
1092 } 1081 }
1093 else { 1082 else {
1094#ifndef QT_NO_COP 1083#ifndef QT_NO_COP
1095 { QCopEnvelope e( "QPE/System", "setDefaultRotation(int)" ); 1084 { QCopEnvelope e( "QPE/System", "setDefaultRotation(int)" );
1096 e << r; 1085 e << r;
1097 } 1086 }
1098#endif 1087#endif
1099 1088
1100 } 1089 }
1101} 1090}
1102 1091
1103#include <qgfx_qws.h> 1092#include <qgfx_qws.h>
1104#include <qwindowsystem_qws.h> 1093#include <qwindowsystem_qws.h>
1105 1094
1106extern void qws_clearLoadedFonts(); 1095extern void qws_clearLoadedFonts();
1107 1096
1108void QPEApplication::setCurrentMode( int x, int y, int depth ) 1097void QPEApplication::setCurrentMode( int x, int y, int depth )
1109{ 1098{
1110 // Reset the caches 1099 // Reset the caches
1111 qws_clearLoadedFonts(); 1100 qws_clearLoadedFonts();
1112 QPixmapCache::clear(); 1101 QPixmapCache::clear();
1113 1102
1114 // Change the screen mode 1103 // Change the screen mode
1115 qt_screen->setMode(x, y, depth); 1104 qt_screen->setMode(x, y, depth);
1116 1105
1117 if ( qApp->type() == GuiServer ) { 1106 if ( qApp->type() == GuiServer ) {
1118 // Reconfigure the GuiServer 1107 // Reconfigure the GuiServer
1119 qwsServer->beginDisplayReconfigure(); 1108 qwsServer->beginDisplayReconfigure();
1120 qwsServer->endDisplayReconfigure(); 1109 qwsServer->endDisplayReconfigure();
1121 1110
1122 // Get all the running apps to reset 1111 // Get all the running apps to reset
1123 QCopEnvelope env( "QPE/System", "reset()" ); 1112 QCopEnvelope env( "QPE/System", "reset()" );
1124 } 1113 }
1125} 1114}
1126 1115
1127void QPEApplication::reset() { 1116void QPEApplication::reset() {
1128 // Reconnect to the screen 1117 // Reconnect to the screen
1129 qt_screen->disconnect(); 1118 qt_screen->disconnect();
1130 qt_screen->connect( QString::null ); 1119 qt_screen->connect( QString::null );
1131 1120
1132 // Redraw everything 1121 // Redraw everything
1133 applyStyle(); 1122 applyStyle();
1134} 1123}
1135 1124
1136/*! 1125/*!
1137 \internal 1126 \internal
1138*/ 1127*/
1139void QPEApplication::applyStyle() 1128void QPEApplication::applyStyle()
1140{ 1129{
1141 Config config( "qpe" ); 1130 Config config( "qpe" );
1142 config.setGroup( "Appearance" ); 1131 config.setGroup( "Appearance" );
1143 1132
1144#if QT_VERSION > 233 1133#if QT_VERSION > 233
1145#if !defined(OPIE_NO_OVERRIDE_QT) 1134#if !defined(OPIE_NO_OVERRIDE_QT)
1146 // don't block ourselves ... 1135 // don't block ourselves ...
1147 Opie::force_appearance = 0; 1136 Opie::force_appearance = 0;
1148 1137
1149 static QString appname = Opie::binaryName ( ); 1138 static QString appname = Opie::binaryName ( );
1150 1139
1151 QStringList ex = config. readListEntry ( "NoStyle", ';' ); 1140 QStringList ex = config. readListEntry ( "NoStyle", ';' );
1152 int nostyle = 0; 1141 int nostyle = 0;
1153 for ( QStringList::Iterator it = ex. begin ( ); it != ex. end ( ); ++it ) { 1142 for ( QStringList::Iterator it = ex. begin ( ); it != ex. end ( ); ++it ) {
1154 if ( QRegExp (( *it ). mid ( 1 ), false, true ). find ( appname, 0 ) >= 0 ) { 1143 if ( QRegExp (( *it ). mid ( 1 ), false, true ). find ( appname, 0 ) >= 0 ) {
1155 nostyle = ( *it ). left ( 1 ). toInt ( 0, 32 ); 1144 nostyle = ( *it ). left ( 1 ). toInt ( 0, 32 );
1156 break; 1145 break;
1157 } 1146 }
1158 } 1147 }
1159#else 1148#else
1160 int nostyle = 0; 1149 int nostyle = 0;
1161#endif 1150#endif
1162 1151
1163 // Widget style 1152 // Widget style
1164 QString style = config.readEntry( "Style", "FlatStyle" ); 1153 QString style = config.readEntry( "Style", "FlatStyle" );
1165 1154
1166 // don't set a custom style 1155 // don't set a custom style
1167 if ( nostyle & Opie::Force_Style ) 1156 if ( nostyle & Opie::Force_Style )
1168 style = "FlatStyle"; 1157 style = "FlatStyle";
1169 1158
1170 internalSetStyle ( style ); 1159 internalSetStyle ( style );
1171 1160
1172 // Colors - from /etc/colors/Liquid.scheme 1161 // Colors - from /etc/colors/Liquid.scheme
1173 QColor bgcolor( config.readEntry( "Background", "#E0E0E0" ) ); 1162 QColor bgcolor( config.readEntry( "Background", "#E0E0E0" ) );
1174 QColor btncolor( config.readEntry( "Button", "#96c8fa" ) ); 1163 QColor btncolor( config.readEntry( "Button", "#96c8fa" ) );
1175 QPalette pal( btncolor, bgcolor ); 1164 QPalette pal( btncolor, bgcolor );
1176 QString color = config.readEntry( "Highlight", "#73adef" ); 1165 QString color = config.readEntry( "Highlight", "#73adef" );
1177 pal.setColor( QColorGroup::Highlight, QColor( color ) ); 1166 pal.setColor( QColorGroup::Highlight, QColor( color ) );
1178 color = config.readEntry( "HighlightedText", "#FFFFFF" ); 1167 color = config.readEntry( "HighlightedText", "#FFFFFF" );
1179 pal.setColor( QColorGroup::HighlightedText, QColor( color ) ); 1168 pal.setColor( QColorGroup::HighlightedText, QColor( color ) );
1180 color = config.readEntry( "Text", "#000000" ); 1169 color = config.readEntry( "Text", "#000000" );
1181 pal.setColor( QColorGroup::Text, QColor( color ) ); 1170 pal.setColor( QColorGroup::Text, QColor( color ) );
1182 color = config.readEntry( "ButtonText", "#000000" ); 1171 color = config.readEntry( "ButtonText", "#000000" );
1183 pal.setColor( QPalette::Active, QColorGroup::ButtonText, QColor( color ) ); 1172 pal.setColor( QPalette::Active, QColorGroup::ButtonText, QColor( color ) );
1184 color = config.readEntry( "Base", "#FFFFFF" ); 1173 color = config.readEntry( "Base", "#FFFFFF" );
1185 pal.setColor( QColorGroup::Base, QColor( color ) ); 1174 pal.setColor( QColorGroup::Base, QColor( color ) );
1186 1175
1187 pal.setColor( QPalette::Disabled, QColorGroup::Text, 1176 pal.setColor( QPalette::Disabled, QColorGroup::Text,
1188 pal.color( QPalette::Active, QColorGroup::Background ).dark() ); 1177 pal.color( QPalette::Active, QColorGroup::Background ).dark() );
1189 1178
1190 setPalette( pal, TRUE ); 1179 setPalette( pal, TRUE );
1191 1180
1192 // Window Decoration 1181 // Window Decoration
1193 QString dec = config.readEntry( "Decoration", "Flat" ); 1182 QString dec = config.readEntry( "Decoration", "Flat" );
1194 1183
1195 // don't set a custom deco 1184 // don't set a custom deco
1196 if ( nostyle & Opie::Force_Decoration ) 1185 if ( nostyle & Opie::Force_Decoration )
1197 dec = ""; 1186 dec = "";
1198 1187
1199 //qDebug ( "Setting Deco: %s -- old %s (%d)", dec.latin1(), d-> decorationName.latin1(), nostyle); 1188 //qDebug ( "Setting Deco: %s -- old %s (%d)", dec.latin1(), d-> decorationName.latin1(), nostyle);
1200 1189
1201 if ( dec != d->decorationName ) { 1190 if ( dec != d->decorationName ) {
1202 qwsSetDecoration( new QPEDecoration( dec ) ); 1191 qwsSetDecoration( new QPEDecoration( dec ) );
1203 d->decorationName = dec; 1192 d->decorationName = dec;
1204 } 1193 }
1205 1194
1206 // Font 1195 // Font
1207 QString ff = config.readEntry( "FontFamily", font().family() ); 1196 QString ff = config.readEntry( "FontFamily", font().family() );
1208 int fs = config.readNumEntry( "FontSize", font().pointSize() ); 1197 int fs = config.readNumEntry( "FontSize", font().pointSize() );
1209 1198
1210 // don't set a custom font 1199 // don't set a custom font
1211 if ( nostyle & Opie::Force_Font ) { 1200 if ( nostyle & Opie::Force_Font ) {
1212 ff = "Vera"; 1201 ff = "Vera";
1213 fs = 10; 1202 fs = 10;
1214 } 1203 }
1215 1204
1216 setFont ( QFont ( ff, fs ), true ); 1205 setFont ( QFont ( ff, fs ), true );
1217 1206
1218#if !defined(OPIE_NO_OVERRIDE_QT) 1207#if !defined(OPIE_NO_OVERRIDE_QT)
1219 // revert to global blocking policy ... 1208 // revert to global blocking policy ...
1220 Opie::force_appearance = config. readBoolEntry ( "ForceStyle", false ) ? Opie::Force_All : Opie::Force_None; 1209 Opie::force_appearance = config. readBoolEntry ( "ForceStyle", false ) ? Opie::Force_All : Opie::Force_None;
1221 Opie::force_appearance &= ~nostyle; 1210 Opie::force_appearance &= ~nostyle;
1222#endif 1211#endif
1223#endif 1212#endif
1224} 1213}
1225 1214
1226void QPEApplication::systemMessage( const QCString& msg, const QByteArray& data ) 1215void QPEApplication::systemMessage( const QCString& msg, const QByteArray& data )
1227{ 1216{
1228#ifdef Q_WS_QWS 1217#ifdef Q_WS_QWS
1229 QDataStream stream( data, IO_ReadOnly ); 1218 QDataStream stream( data, IO_ReadOnly );
1230 if ( msg == "applyStyle()" ) { 1219 if ( msg == "applyStyle()" ) {
1231 applyStyle(); 1220 applyStyle();
1232 } 1221 }
1233 else if ( msg == "toggleApplicationMenu()" ) { 1222 else if ( msg == "toggleApplicationMenu()" ) {
1234 QWidget *active = activeWindow ( ); 1223 QWidget *active = activeWindow ( );
1235 1224
1236 if ( active ) { 1225 if ( active ) {
1237 QPEMenuToolFocusManager *man = QPEMenuToolFocusManager::manager ( ); 1226 QPEMenuToolFocusManager *man = QPEMenuToolFocusManager::manager ( );
1238 bool oldactive = man-> isActive ( ); 1227 bool oldactive = man-> isActive ( );
1239 1228
1240 man-> setActive( !man-> isActive() ); 1229 man-> setActive( !man-> isActive() );
1241 1230
1242 if ( !oldactive && !man-> isActive ( )) { // no menubar to toggle -> try O-Menu 1231 if ( !oldactive && !man-> isActive ( )) { // no menubar to toggle -> try O-Menu
1243 QCopEnvelope e ( "QPE/TaskBar", "toggleStartMenu()" ); 1232 QCopEnvelope e ( "QPE/TaskBar", "toggleStartMenu()" );
1244 } 1233 }
1245 } 1234 }
1246 } 1235 }
1247 else if ( msg == "setDefaultRotation(int)" ) { 1236 else if ( msg == "setDefaultRotation(int)" ) {
1248 if ( type() == GuiServer ) { 1237 if ( type() == GuiServer ) {
1249 int r; 1238 int r;
1250 stream >> r; 1239 stream >> r;
1251 setDefaultRotation( r ); 1240 setDefaultRotation( r );
1252 } 1241 }
1253 } 1242 }
1254 else if ( msg == "setCurrentMode(int,int,int)" ) { // Added: 2003-06-11 by Tim Ansell <mithro@mithis.net> 1243 else if ( msg == "setCurrentMode(int,int,int)" ) { // Added: 2003-06-11 by Tim Ansell <mithro@mithis.net>
1255 if ( type() == GuiServer ) { 1244 if ( type() == GuiServer ) {
1256 int x, y, depth; 1245 int x, y, depth;
1257 stream >> x; 1246 stream >> x;
1258 stream >> y; 1247 stream >> y;
1259 stream >> depth; 1248 stream >> depth;
1260 setCurrentMode( x, y, depth ); 1249 setCurrentMode( x, y, depth );
1261 } 1250 }
1262 } 1251 }
1263 else if ( msg == "reset()" ) { 1252 else if ( msg == "reset()" ) {
1264 if ( type() != GuiServer ) 1253 if ( type() != GuiServer )
1265 reset(); 1254 reset();
1266 } 1255 }
1267 else if ( msg == "setCurrentRotation(int)" ) { 1256 else if ( msg == "setCurrentRotation(int)" ) {
1268 int r; 1257 int r;
1269 stream >> r; 1258 stream >> r;
1270 setCurrentRotation( r ); 1259 setCurrentRotation( r );
1271 } 1260 }
1272 else if ( msg == "shutdown()" ) { 1261 else if ( msg == "shutdown()" ) {
1273 if ( type() == GuiServer ) 1262 if ( type() == GuiServer )
1274 shutdown(); 1263 shutdown();
1275 } 1264 }
1276 else if ( msg == "quit()" ) { 1265 else if ( msg == "quit()" ) {
1277 if ( type() != GuiServer ) 1266 if ( type() != GuiServer )
1278 tryQuit(); 1267 tryQuit();
1279 } 1268 }
1280 else if ( msg == "forceQuit()" ) { 1269 else if ( msg == "forceQuit()" ) {
1281 if ( type() != GuiServer ) 1270 if ( type() != GuiServer )
1282 quit(); 1271 quit();
1283 } 1272 }
1284 else if ( msg == "restart()" ) { 1273 else if ( msg == "restart()" ) {
1285 if ( type() == GuiServer ) 1274 if ( type() == GuiServer )
1286 restart(); 1275 restart();
1287 } 1276 }
1288 else if ( msg == "language(QString)" ) { 1277 else if ( msg == "language(QString)" ) {
1289 if ( type() == GuiServer ) { 1278 if ( type() == GuiServer ) {
1290 QString l; 1279 QString l;
1291 stream >> l; 1280 stream >> l;
1292 QString cl = getenv( "LANG" ); 1281 QString cl = getenv( "LANG" );
1293 if ( cl != l ) { 1282 if ( cl != l ) {
1294 if ( l.isNull() ) 1283 if ( l.isNull() )
1295 unsetenv( "LANG" ); 1284 unsetenv( "LANG" );
1296 else 1285 else
1297 setenv( "LANG", l.latin1(), 1 ); 1286 setenv( "LANG", l.latin1(), 1 );
1298 restart(); 1287 restart();
1299 } 1288 }
1300 } 1289 }
1301 } 1290 }
1302 else if ( msg == "timeChange(QString)" ) { 1291 else if ( msg == "timeChange(QString)" ) {
1303 QString t; 1292 QString t;
1304 stream >> t; 1293 stream >> t;
1305 if ( t.isNull() ) 1294 if ( t.isNull() )
1306 unsetenv( "TZ" ); 1295 unsetenv( "TZ" );
1307 else 1296 else
1308 setenv( "TZ", t.latin1(), 1 ); 1297 setenv( "TZ", t.latin1(), 1 );
1309 // emit the signal so everyone else knows... 1298 // emit the signal so everyone else knows...
1310 emit timeChanged(); 1299 emit timeChanged();
1311 } 1300 }
1312 else if ( msg == "addAlarm(QDateTime,QCString,QCString,int)" ) { 1301 else if ( msg == "addAlarm(QDateTime,QCString,QCString,int)" ) {
1313 if ( type() == GuiServer ) { 1302 if ( type() == GuiServer ) {
1314 QDateTime when; 1303 QDateTime when;
1315 QCString channel, message; 1304 QCString channel, message;
1316 int data; 1305 int data;
1317 stream >> when >> channel >> message >> data; 1306 stream >> when >> channel >> message >> data;
1318 AlarmServer::addAlarm( when, channel, message, data ); 1307 AlarmServer::addAlarm( when, channel, message, data );
1319 } 1308 }
1320 } 1309 }
1321 else if ( msg == "deleteAlarm(QDateTime,QCString,QCString,int)" ) { 1310 else if ( msg == "deleteAlarm(QDateTime,QCString,QCString,int)" ) {
1322 if ( type() == GuiServer ) { 1311 if ( type() == GuiServer ) {
1323 QDateTime when; 1312 QDateTime when;
1324 QCString channel, message; 1313 QCString channel, message;
1325 int data; 1314 int data;
1326 stream >> when >> channel >> message >> data; 1315 stream >> when >> channel >> message >> data;
1327 AlarmServer::deleteAlarm( when, channel, message, data ); 1316 AlarmServer::deleteAlarm( when, channel, message, data );
1328 } 1317 }
1329 } 1318 }
1330 else if ( msg == "clockChange(bool)" ) { 1319 else if ( msg == "clockChange(bool)" ) {
1331 int tmp; 1320 int tmp;
1332 stream >> tmp; 1321 stream >> tmp;
1333 emit clockChanged( tmp ); 1322 emit clockChanged( tmp );
1334 } 1323 }
1335 else if ( msg == "weekChange(bool)" ) { 1324 else if ( msg == "weekChange(bool)" ) {
1336 int tmp; 1325 int tmp;
1337 stream >> tmp; 1326 stream >> tmp;
1338 emit weekChanged( tmp ); 1327 emit weekChanged( tmp );
1339 } 1328 }
1340 else if ( msg == "setDateFormat(DateFormat)" ) { 1329 else if ( msg == "setDateFormat(DateFormat)" ) {
1341 DateFormat tmp; 1330 DateFormat tmp;
1342 stream >> tmp; 1331 stream >> tmp;
1343 emit dateFormatChanged( tmp ); 1332 emit dateFormatChanged( tmp );
1344 } 1333 }
1345 else if ( msg == "setVolume(int,int)" ) { 1334 else if ( msg == "setVolume(int,int)" ) {
1346 int t, v; 1335 int t, v;
1347 stream >> t >> v; 1336 stream >> t >> v;
1348 setVolume( t, v ); 1337 setVolume( t, v );
1349 emit volumeChanged( muted ); 1338 emit volumeChanged( muted );
1350 } 1339 }
1351 else if ( msg == "volumeChange(bool)" ) { 1340 else if ( msg == "volumeChange(bool)" ) {
1352 stream >> muted; 1341 stream >> muted;
1353 setVolume(); 1342 setVolume();
1354 emit volumeChanged( muted ); 1343 emit volumeChanged( muted );
1355 } 1344 }
1356 else if ( msg == "setMic(int,int)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com> 1345 else if ( msg == "setMic(int,int)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com>
1357 int t, v; 1346 int t, v;
1358 stream >> t >> v; 1347 stream >> t >> v;
1359 setMic( t, v ); 1348 setMic( t, v );
1360 emit micChanged( micMuted ); 1349 emit micChanged( micMuted );
1361 } 1350 }
1362 else if ( msg == "micChange(bool)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com> 1351 else if ( msg == "micChange(bool)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com>
1363 stream >> micMuted; 1352 stream >> micMuted;
1364 setMic(); 1353 setMic();
1365 emit micChanged( micMuted ); 1354 emit micChanged( micMuted );
1366 } 1355 }
1367 else if ( msg == "setBass(int,int)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org> 1356 else if ( msg == "setBass(int,int)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org>
1368 int t, v; 1357 int t, v;
1369 stream >> t >> v; 1358 stream >> t >> v;
1370 setBass( t, v ); 1359 setBass( t, v );
1371 } 1360 }
1372 else if ( msg == "bassChange(bool)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org> 1361 else if ( msg == "bassChange(bool)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org>
1373 setBass(); 1362 setBass();
1374 } 1363 }
1375 else if ( msg == "setTreble(int,int)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org> 1364 else if ( msg == "setTreble(int,int)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org>
1376 int t, v; 1365 int t, v;
1377 stream >> t >> v; 1366 stream >> t >> v;
1378 setTreble( t, v ); 1367 setTreble( t, v );
1379 } 1368 }
1380 else if ( msg == "trebleChange(bool)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org> 1369 else if ( msg == "trebleChange(bool)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org>
1381 setTreble(); 1370 setTreble();
1382 } else if ( msg == "getMarkedText()" ) { 1371 } else if ( msg == "getMarkedText()" ) {
1383 if ( type() == GuiServer ) { 1372 if ( type() == GuiServer ) {
1384 const ushort unicode = 'C'-'@'; 1373 const ushort unicode = 'C'-'@';
1385 const int scan = Key_C; 1374 const int scan = Key_C;
1386 qwsServer->processKeyEvent( unicode, scan, ControlButton, TRUE, FALSE ); 1375 qwsServer->processKeyEvent( unicode, scan, ControlButton, TRUE, FALSE );
1387 qwsServer->processKeyEvent( unicode, scan, ControlButton, FALSE, FALSE ); 1376 qwsServer->processKeyEvent( unicode, scan, ControlButton, FALSE, FALSE );
1388 } 1377 }
1389 } else if ( msg == "newChannel(QString)") { 1378 } else if ( msg == "newChannel(QString)") {
1390 QString myChannel = "QPE/Application/" + d->appName; 1379 QString myChannel = "QPE/Application/" + d->appName;
1391 QString channel; 1380 QString channel;
1392 stream >> channel; 1381 stream >> channel;
1393 if (channel == myChannel) { 1382 if (channel == myChannel) {
1394 processQCopFile(); 1383 processQCopFile();
1395 d->sendQCopQ(); 1384 d->sendQCopQ();
1396 } 1385 }
1397 } 1386 }
1398 1387
1399 1388
1400#endif 1389#endif
1401} 1390}
1402 1391
1403 1392
1404 1393
1405 1394
1406 1395
1407/*! 1396/*!
1408 \internal 1397 \internal
1409*/ 1398*/
1410bool QPEApplication::raiseAppropriateWindow() 1399bool QPEApplication::raiseAppropriateWindow()
1411{ 1400{
1412 bool r=FALSE; 1401 bool r=FALSE;
1413 1402
1414 // 1. Raise the main widget 1403 // 1. Raise the main widget
1415 QWidget *top = d->qpe_main_widget; 1404 QWidget *top = d->qpe_main_widget;
1416 if ( !top ) top = mainWidget(); 1405 if ( !top ) top = mainWidget();
1417 1406
1418 if ( top && d->keep_running ) { 1407 if ( top && d->keep_running ) {
1419 if ( top->isVisible() ) 1408 if ( top->isVisible() )
1420 r = TRUE; 1409 r = TRUE;
1421 else if (d->preloaded) { 1410 else if (d->preloaded) {
1422 // We are preloaded and not visible.. pretend we just started.. 1411 // We are preloaded and not visible.. pretend we just started..
1423#ifndef QT_NO_COP 1412#ifndef QT_NO_COP
1424 QCopEnvelope e("QPE/System", "fastAppShowing(QString)"); 1413 QCopEnvelope e("QPE/System", "fastAppShowing(QString)");
1425 e << d->appName; 1414 e << d->appName;
1426#endif 1415#endif
1427 } 1416 }
1428 1417
1429 d->show_mx(top,d->nomaximize, d->appName); 1418 d->show_mx(top,d->nomaximize, d->appName);
1430 top->raise(); 1419 top->raise();
1431 } 1420 }
1432 1421
1433 QWidget *topm = activeModalWidget(); 1422 QWidget *topm = activeModalWidget();
1434 1423
1435 // 2. Raise any parentless widgets (except top and topm, as they 1424 // 2. Raise any parentless widgets (except top and topm, as they
1436 // are raised before and after this loop). Order from most 1425 // are raised before and after this loop). Order from most
1437 // recently raised as deepest to least recently as top, so 1426 // recently raised as deepest to least recently as top, so
1438 // that repeated calls cycle through widgets. 1427 // that repeated calls cycle through widgets.
1439 QWidgetList *list = topLevelWidgets(); 1428 QWidgetList *list = topLevelWidgets();
1440 if ( list ) { 1429 if ( list ) {
1441 bool foundlast = FALSE; 1430 bool foundlast = FALSE;
1442 QWidget* topsub = 0; 1431 QWidget* topsub = 0;
1443 if ( d->lastraised ) { 1432 if ( d->lastraised ) {
1444 for (QWidget* w = list->first(); w; w = list->next()) { 1433 for (QWidget* w = list->first(); w; w = list->next()) {
1445 if ( !w->parentWidget() && w != topm && w->isVisible() && !w->isDesktop() ) { 1434 if ( !w->parentWidget() && w != topm && w->isVisible() && !w->isDesktop() ) {
1446 if ( w == d->lastraised ) 1435 if ( w == d->lastraised )
1447 foundlast = TRUE; 1436 foundlast = TRUE;
1448 if ( foundlast ) { 1437 if ( foundlast ) {
1449 w->raise(); 1438 w->raise();
1450 topsub = w; 1439 topsub = w;
1451 } 1440 }
1452 } 1441 }
1453 } 1442 }
1454 } 1443 }
1455 for (QWidget* w = list->first(); w; w = list->next()) { 1444 for (QWidget* w = list->first(); w; w = list->next()) {
1456 if ( !w->parentWidget() && w != topm && w->isVisible() && !w->isDesktop() ) { 1445 if ( !w->parentWidget() && w != topm && w->isVisible() && !w->isDesktop() ) {
1457 if ( w == d->lastraised ) 1446 if ( w == d->lastraised )
1458 break; 1447 break;
1459 w->raise(); 1448 w->raise();
1460 topsub = w; 1449 topsub = w;
1461 } 1450 }
1462 } 1451 }
1463 d->lastraised = topsub; 1452 d->lastraised = topsub;
1464 delete list; 1453 delete list;
1465 } 1454 }
1466 1455
1467 // 3. Raise the active modal widget. 1456 // 3. Raise the active modal widget.
1468 if ( topm ) { 1457 if ( topm ) {
1469 topm->show(); 1458 topm->show();
1470 topm->raise(); 1459 topm->raise();
1471 // If we haven't already handled the fastAppShowing message 1460 // If we haven't already handled the fastAppShowing message
1472 if (!top && d->preloaded) { 1461 if (!top && d->preloaded) {
1473#ifndef QT_NO_COP 1462#ifndef QT_NO_COP
1474 QCopEnvelope e("QPE/System", "fastAppShowing(QString)"); 1463 QCopEnvelope e("QPE/System", "fastAppShowing(QString)");
1475 e << d->appName; 1464 e << d->appName;
1476#endif 1465#endif
1477 } 1466 }
1478 r = FALSE; 1467 r = FALSE;
1479 } 1468 }
1480 1469
1481 return r; 1470 return r;
1482} 1471}
1483 1472
1484 1473
1485void QPEApplication::pidMessage( const QCString& msg, const QByteArray& data) 1474void QPEApplication::pidMessage( const QCString& msg, const QByteArray& data)
1486{ 1475{
1487#ifdef Q_WS_QWS 1476#ifdef Q_WS_QWS
1488 1477
1489 if ( msg == "quit()" ) { 1478 if ( msg == "quit()" ) {
1490 tryQuit(); 1479 tryQuit();
1491 } 1480 }
1492 else if ( msg == "quitIfInvisible()" ) { 1481 else if ( msg == "quitIfInvisible()" ) {
1493 if ( d->qpe_main_widget && !d->qpe_main_widget->isVisible() ) 1482 if ( d->qpe_main_widget && !d->qpe_main_widget->isVisible() )
1494 quit(); 1483 quit();
1495 } 1484 }
1496 else if ( msg == "close()" ) { 1485 else if ( msg == "close()" ) {
1497 hideOrQuit(); 1486 hideOrQuit();
1498 } 1487 }
1499 else if ( msg == "disablePreload()" ) { 1488 else if ( msg == "disablePreload()" ) {
1500 d->preloaded = FALSE; 1489 d->preloaded = FALSE;
1501 d->keep_running = TRUE; 1490 d->keep_running = TRUE;
1502 /* so that quit will quit */ 1491 /* so that quit will quit */
1503 } 1492 }
1504 else if ( msg == "enablePreload()" ) { 1493 else if ( msg == "enablePreload()" ) {
1505 if (d->qpe_main_widget) 1494 if (d->qpe_main_widget)
1506 d->preloaded = TRUE; 1495 d->preloaded = TRUE;
1507 d->keep_running = TRUE; 1496 d->keep_running = TRUE;
1508 /* so next quit won't quit */ 1497 /* so next quit won't quit */
1509 } 1498 }
1510 else if ( msg == "raise()" ) { 1499 else if ( msg == "raise()" ) {
1511 d->keep_running = TRUE; 1500 d->keep_running = TRUE;
1512 d->notbusysent = FALSE; 1501 d->notbusysent = FALSE;
1513 raiseAppropriateWindow(); 1502 raiseAppropriateWindow();
1514 // Tell the system we're still chugging along... 1503 // Tell the system we're still chugging along...
1515 QCopEnvelope e("QPE/System", "appRaised(QString)"); 1504 QCopEnvelope e("QPE/System", "appRaised(QString)");
1516 e << d->appName; 1505 e << d->appName;
1517 } 1506 }
1518 else if ( msg == "flush()" ) { 1507 else if ( msg == "flush()" ) {
1519 emit flush(); 1508 emit flush();
1520 // we need to tell the desktop 1509 // we need to tell the desktop
1521 QCopEnvelope e( "QPE/Desktop", "flushDone(QString)" ); 1510 QCopEnvelope e( "QPE/Desktop", "flushDone(QString)" );
1522 e << d->appName; 1511 e << d->appName;
1523 } 1512 }
1524 else if ( msg == "reload()" ) { 1513 else if ( msg == "reload()" ) {
1525 emit reload(); 1514 emit reload();
1526 } 1515 }
1527 else if ( msg == "setDocument(QString)" ) { 1516 else if ( msg == "setDocument(QString)" ) {
1528 d->keep_running = TRUE; 1517 d->keep_running = TRUE;
1529 QDataStream stream( data, IO_ReadOnly ); 1518 QDataStream stream( data, IO_ReadOnly );
1530 QString doc; 1519 QString doc;
1531 stream >> doc; 1520 stream >> doc;
1532 QWidget *mw = mainWidget(); 1521 QWidget *mw = mainWidget();
1533 if ( !mw ) 1522 if ( !mw )
1534 mw = d->qpe_main_widget; 1523 mw = d->qpe_main_widget;
1535 if ( mw ) 1524 if ( mw )
1536 Global::setDocument( mw, doc ); 1525 Global::setDocument( mw, doc );
1537 1526
1538 } else if ( msg == "QPEProcessQCop()" ) { 1527 } else if ( msg == "QPEProcessQCop()" ) {
1539 processQCopFile(); 1528 processQCopFile();
1540 d->sendQCopQ(); 1529 d->sendQCopQ();
1541 }else 1530 }else
1542 { 1531 {
1543 bool p = d->keep_running; 1532 bool p = d->keep_running;
1544 d->keep_running = FALSE; 1533 d->keep_running = FALSE;
1545 emit appMessage( msg, data); 1534 emit appMessage( msg, data);
1546 if ( d->keep_running ) { 1535 if ( d->keep_running ) {
1547 d->notbusysent = FALSE; 1536 d->notbusysent = FALSE;
1548 raiseAppropriateWindow(); 1537 raiseAppropriateWindow();
1549 if ( !p ) { 1538 if ( !p ) {
1550 // Tell the system we're still chugging along... 1539 // Tell the system we're still chugging along...
1551#ifndef QT_NO_COP 1540#ifndef QT_NO_COP
1552 QCopEnvelope e("QPE/System", "appRaised(QString)"); 1541 QCopEnvelope e("QPE/System", "appRaised(QString)");
1553 e << d->appName; 1542 e << d->appName;
1554#endif 1543#endif
1555 } 1544 }
1556 } 1545 }
1557 if ( p ) 1546 if ( p )
1558 d->keep_running = p; 1547 d->keep_running = p;
1559 } 1548 }
1560#endif 1549#endif
1561} 1550}
1562 1551
1563 1552
1564/*! 1553/*!
1565 Sets widget \a mw as the mainWidget() and shows it. For small windows, 1554 Sets widget \a mw as the mainWidget() and shows it. For small windows,
1566 consider passing TRUE for \a nomaximize rather than the default FALSE. 1555 consider passing TRUE for \a nomaximize rather than the default FALSE.
1567 1556
1568 \sa showMainDocumentWidget() 1557 \sa showMainDocumentWidget()
1569*/ 1558*/
1570void QPEApplication::showMainWidget( QWidget* mw, bool nomaximize ) 1559void QPEApplication::showMainWidget( QWidget* mw, bool nomaximize )
1571{ 1560{
1572 // setMainWidget(mw); this breaks FastLoading because lastWindowClose() would quit 1561 // setMainWidget(mw); this breaks FastLoading because lastWindowClose() would quit
1573 d->show(mw, nomaximize ); 1562 d->show(mw, nomaximize );
1574} 1563}
1575 1564
1576/*! 1565/*!
1577 Sets widget \a mw as the mainWidget() and shows it. For small windows, 1566 Sets widget \a mw as the mainWidget() and shows it. For small windows,
1578 consider passing TRUE for \a nomaximize rather than the default FALSE. 1567 consider passing TRUE for \a nomaximize rather than the default FALSE.
1579 1568
1580 This calls designates the application as 1569 This calls designates the application as
1581 a \link docwidget.html document-oriented\endlink application. 1570 a \link docwidget.html document-oriented\endlink application.
1582 1571
1583 The \a mw widget \e must have this slot: setDocument(const QString&). 1572 The \a mw widget \e must have this slot: setDocument(const QString&).
1584 1573
1585 \sa showMainWidget() 1574 \sa showMainWidget()
1586*/ 1575*/
1587void QPEApplication::showMainDocumentWidget( QWidget* mw, bool nomaximize ) 1576void QPEApplication::showMainDocumentWidget( QWidget* mw, bool nomaximize )
1588{ 1577{
1589 if ( mw && argc() == 2 ) 1578 if ( mw && argc() == 2 )
1590 Global::setDocument( mw, QString::fromUtf8(argv()[1]) ); 1579 Global::setDocument( mw, QString::fromUtf8(argv()[1]) );
1591 1580
1592 1581
1593 //setMainWidget(mw); see above 1582 //setMainWidget(mw); see above
1594 d->show(mw, nomaximize ); 1583 d->show(mw, nomaximize );
1595} 1584}
1596 1585
1597 1586
1598/*! 1587/*!
1599 If an application is started via a \link qcop.html QCop\endlink 1588 If an application is started via a \link qcop.html QCop\endlink
1600 message, the application will process the \link qcop.html 1589 message, the application will process the \link qcop.html
1601 QCop\endlink message and then quit. If the application calls this 1590 QCop\endlink message and then quit. If the application calls this
1602 function while processing a \link qcop.html QCop\endlink message, 1591 function while processing a \link qcop.html QCop\endlink message,
1603 after processing its outstanding \link qcop.html QCop\endlink 1592 after processing its outstanding \link qcop.html QCop\endlink
1604 messages the application will start 'properly' and show itself. 1593 messages the application will start 'properly' and show itself.
1605 1594
1606 \sa keepRunning() 1595 \sa keepRunning()
1607*/ 1596*/
1608void QPEApplication::setKeepRunning() 1597void QPEApplication::setKeepRunning()
1609{ 1598{
1610 if ( qApp && qApp->inherits( "QPEApplication" ) ) { 1599 if ( qApp && qApp->inherits( "QPEApplication" ) ) {
1611 QPEApplication * qpeApp = ( QPEApplication* ) qApp; 1600 QPEApplication * qpeApp = ( QPEApplication* ) qApp;
1612 qpeApp->d->keep_running = TRUE; 1601 qpeApp->d->keep_running = TRUE;
1613 } 1602 }
1614} 1603}
1615 1604
1616/*! 1605/*!
1617 Returns TRUE if the application will quit after processing the 1606 Returns TRUE if the application will quit after processing the
1618 current list of qcop messages; otherwise returns FALSE. 1607 current list of qcop messages; otherwise returns FALSE.
1619 1608
1620 \sa setKeepRunning() 1609 \sa setKeepRunning()
1621*/ 1610*/
1622bool QPEApplication::keepRunning() const 1611bool QPEApplication::keepRunning() const
1623{ 1612{
1624 return d->keep_running; 1613 return d->keep_running;
1625} 1614}
1626 1615
1627/*! 1616/*!
1628 \internal 1617 \internal
1629*/ 1618*/
1630void QPEApplication::internalSetStyle( const QString &style ) 1619void QPEApplication::internalSetStyle( const QString &style )
1631{ 1620{
1632#if QT_VERSION >= 300 1621#if QT_VERSION >= 300
1633 if ( style == "QPE" ) { 1622 if ( style == "QPE" ) {
1634 setStyle( new QPEStyle ); 1623 setStyle( new QPEStyle );
1635 } 1624 }
1636 else { 1625 else {
1637 QStyle *s = QStyleFactory::create( style ); 1626 QStyle *s = QStyleFactory::create( style );
1638 if ( s ) 1627 if ( s )
1639 setStyle( s ); 1628 setStyle( s );
1640 } 1629 }
1641#else 1630#else
1642 if ( style == "Windows" ) { 1631 if ( style == "Windows" ) {
1643 setStyle( new QWindowsStyle ); 1632 setStyle( new QWindowsStyle );
1644 } 1633 }
1645 else if ( style == "QPE" ) { 1634 else if ( style == "QPE" ) {
1646 setStyle( new QPEStyle ); 1635 setStyle( new QPEStyle );
1647 } 1636 }
1648 else if ( style == "Light" ) { 1637 else if ( style == "Light" ) {
1649 setStyle( new LightStyle ); 1638 setStyle( new LightStyle );
1650 } 1639 }
1651#ifndef QT_NO_STYLE_PLATINUM 1640#ifndef QT_NO_STYLE_PLATINUM
1652 else if ( style == "Platinum" ) { 1641 else if ( style == "Platinum" ) {
1653 setStyle( new QPlatinumStyle ); 1642 setStyle( new QPlatinumStyle );
1654 } 1643 }
1655#endif 1644#endif
1656#ifndef QT_NO_STYLE_MOTIF 1645#ifndef QT_NO_STYLE_MOTIF
1657 else if ( style == "Motif" ) { 1646 else if ( style == "Motif" ) {
1658 setStyle( new QMotifStyle ); 1647 setStyle( new QMotifStyle );
1659 } 1648 }
1660#endif 1649#endif
1661#ifndef QT_NO_STYLE_MOTIFPLUS 1650#ifndef QT_NO_STYLE_MOTIFPLUS
1662 else if ( style == "MotifPlus" ) { 1651 else if ( style == "MotifPlus" ) {
1663 setStyle( new QMotifPlusStyle ); 1652 setStyle( new QMotifPlusStyle );
1664 } 1653 }
1665#endif 1654#endif
1666 1655
1667 else { 1656 else {
1668 QStyle *sty = 0; 1657 QStyle *sty = 0;
1669 QString path = QPEApplication::qpeDir ( ) + "/plugins/styles/"; 1658 QString path = QPEApplication::qpeDir ( ) + "/plugins/styles/";
1670 1659
1671#ifdef Q_OS_MACX 1660#ifdef Q_OS_MACX
1672 if ( style. find ( ".dylib" ) > 0 ) 1661 if ( style. find ( ".dylib" ) > 0 )
1673 path += style; 1662 path += style;
1674 else 1663 else
1675 path = path + "lib" + style. lower ( ) + ".dylib"; // compatibility 1664 path = path + "lib" + style. lower ( ) + ".dylib"; // compatibility
1676#else 1665#else
1677 if ( style. find ( ".so" ) > 0 ) 1666 if ( style. find ( ".so" ) > 0 )
1678 path += style; 1667 path += style;
1679 else 1668 else
1680 path = path + "lib" + style. lower ( ) + ".so"; // compatibility 1669 path = path + "lib" + style. lower ( ) + ".so"; // compatibility
1681#endif 1670#endif
1682 static QLibrary *lastlib = 0; 1671 static QLibrary *lastlib = 0;
1683 static StyleInterface *lastiface = 0; 1672 static StyleInterface *lastiface = 0;
1684 1673
1685 QLibrary *lib = new QLibrary ( path ); 1674 QLibrary *lib = new QLibrary ( path );
1686 StyleInterface *iface = 0; 1675 StyleInterface *iface = 0;
1687 1676
1688 if (( lib-> queryInterface ( IID_Style, ( QUnknownInterface ** ) &iface ) == QS_OK ) && iface ) 1677 if (( lib-> queryInterface ( IID_Style, ( QUnknownInterface ** ) &iface ) == QS_OK ) && iface )
1689 sty = iface-> style ( ); 1678 sty = iface-> style ( );
1690 1679
1691 if ( sty ) { 1680 if ( sty ) {
1692 setStyle ( sty ); 1681 setStyle ( sty );
1693 1682
1694 if ( lastiface ) 1683 if ( lastiface )
1695 lastiface-> release ( ); 1684 lastiface-> release ( );
1696 lastiface = iface; 1685 lastiface = iface;
1697 1686
1698 if ( lastlib ) { 1687 if ( lastlib ) {
1699 lastlib-> unload ( ); 1688 lastlib-> unload ( );
1700 delete lastlib; 1689 delete lastlib;
1701 } 1690 }
1702 lastlib = lib; 1691 lastlib = lib;
1703 } 1692 }
1704 else { 1693 else {
1705 if ( iface ) 1694 if ( iface )
1706 iface-> release ( ); 1695 iface-> release ( );
1707 delete lib; 1696 delete lib;
1708 1697
1709 setStyle ( new LightStyle ( )); 1698 setStyle ( new LightStyle ( ));
1710 } 1699 }
1711 } 1700 }
1712#endif 1701#endif
1713} 1702}
1714 1703
1715/*! 1704/*!
1716 \internal 1705 \internal
1717*/ 1706*/
1718void QPEApplication::prepareForTermination( bool willrestart ) 1707void QPEApplication::prepareForTermination( bool willrestart )
1719{ 1708{
1720 if ( willrestart ) { 1709 if ( willrestart ) {
1721 // Draw a big wait icon, the image can be altered in later revisions 1710 // Draw a big wait icon, the image can be altered in later revisions
1722 // QWidget *d = QApplication::desktop(); 1711 // QWidget *d = QApplication::desktop();
1723 QImage img = Resource::loadImage( "launcher/new_wait" ); 1712 QImage img = Resource::loadImage( "launcher/new_wait" );
1724 QPixmap pix; 1713 QPixmap pix;
1725 pix.convertFromImage( img.smoothScale( 1 * img.width(), 1 * img.height() ) ); 1714 pix.convertFromImage( img.smoothScale( 1 * img.width(), 1 * img.height() ) );
1726 QLabel *lblWait = new QLabel( 0, "wait hack!", QWidget::WStyle_Customize | 1715 QLabel *lblWait = new QLabel( 0, "wait hack!", QWidget::WStyle_Customize |
1727 QWidget::WStyle_NoBorder | QWidget::WStyle_Tool ); 1716 QWidget::WStyle_NoBorder | QWidget::WStyle_Tool );
1728 lblWait->setPixmap( pix ); 1717 lblWait->setPixmap( pix );
1729 lblWait->setAlignment( QWidget::AlignCenter ); 1718 lblWait->setAlignment( QWidget::AlignCenter );
1730 lblWait->show(); 1719 lblWait->show();
1731 lblWait->showMaximized(); 1720 lblWait->showMaximized();
1732 } 1721 }
1733#ifndef SINGLE_APP 1722#ifndef SINGLE_APP
1734 { QCopEnvelope envelope( "QPE/System", "forceQuit()" ); 1723 { QCopEnvelope envelope( "QPE/System", "forceQuit()" );
1735 } 1724 }
1736 processEvents(); // ensure the message goes out. 1725 processEvents(); // ensure the message goes out.
1737 sleep( 1 ); // You have 1 second to comply. 1726 sleep( 1 ); // You have 1 second to comply.
1738#endif 1727#endif
1739} 1728}
1740 1729
1741/*! 1730/*!
1742 \internal 1731 \internal
1743*/ 1732*/
1744void QPEApplication::shutdown() 1733void QPEApplication::shutdown()
1745{ 1734{
1746 // Implement in server's QPEApplication subclass 1735 // Implement in server's QPEApplication subclass
1747} 1736}
1748 1737
1749/*! 1738/*!
1750 \internal 1739 \internal
1751*/ 1740*/
1752void QPEApplication::restart() 1741void QPEApplication::restart()
1753{ 1742{
1754 // Implement in server's QPEApplication subclass 1743 // Implement in server's QPEApplication subclass
1755} 1744}
1756 1745
1757static QPtrDict<void>* stylusDict = 0; 1746static QPtrDict<void>* stylusDict = 0;
1758static void createDict() 1747static void createDict()
1759{ 1748{
1760 if ( !stylusDict ) 1749 if ( !stylusDict )
1761 stylusDict = new QPtrDict<void>; 1750 stylusDict = new QPtrDict<void>;
1762} 1751}
1763 1752
1764/*! 1753/*!
1765 Returns the current StylusMode for widget \a w. 1754 Returns the current StylusMode for widget \a w.
1766 1755
1767 \sa setStylusOperation() StylusMode 1756 \sa setStylusOperation() StylusMode
1768*/ 1757*/
1769QPEApplication::StylusMode QPEApplication::stylusOperation( QWidget* w ) 1758QPEApplication::StylusMode QPEApplication::stylusOperation( QWidget* w )
1770{ 1759{
1771 if ( stylusDict ) 1760 if ( stylusDict )
1772 return ( StylusMode ) ( int ) stylusDict->find( w ); 1761 return ( StylusMode ) ( int ) stylusDict->find( w );
1773 return LeftOnly; 1762 return LeftOnly;
1774} 1763}
1775 1764
1776/*! 1765/*!
1777 \enum QPEApplication::StylusMode 1766 \enum QPEApplication::StylusMode
1778 1767
1779 \value LeftOnly the stylus only generates LeftButton 1768 \value LeftOnly the stylus only generates LeftButton
1780 events (the default). 1769 events (the default).
1781 \value RightOnHold the stylus generates RightButton events 1770 \value RightOnHold the stylus generates RightButton events
1782 if the user uses the press-and-hold gesture. 1771 if the user uses the press-and-hold gesture.
1783 1772
1784 \sa setStylusOperation() stylusOperation() 1773 \sa setStylusOperation() stylusOperation()
1785*/ 1774*/
1786 1775
1787/*! 1776/*!
1788 Causes widget \a w to receive mouse events according to the stylus 1777 Causes widget \a w to receive mouse events according to the stylus
1789 \a mode. 1778 \a mode.
1790 1779
1791 \sa stylusOperation() StylusMode 1780 \sa stylusOperation() StylusMode
1792*/ 1781*/
1793void QPEApplication::setStylusOperation( QWidget * w, StylusMode mode ) 1782void QPEApplication::setStylusOperation( QWidget * w, StylusMode mode )
1794{ 1783{
1795 createDict(); 1784 createDict();
1796 if ( mode == LeftOnly ) { 1785 if ( mode == LeftOnly ) {
1797 stylusDict->remove 1786 stylusDict->remove
1798 ( w ); 1787 ( w );
1799 w->removeEventFilter( qApp ); 1788 w->removeEventFilter( qApp );
1800 } 1789 }
1801 else { 1790 else {
1802 stylusDict->insert( w, ( void* ) mode ); 1791 stylusDict->insert( w, ( void* ) mode );
1803 connect( w, SIGNAL( destroyed() ), qApp, SLOT( removeSenderFromStylusDict() ) ); 1792 connect( w, SIGNAL( destroyed() ), qApp, SLOT( removeSenderFromStylusDict() ) );
1804 w->installEventFilter( qApp ); 1793 w->installEventFilter( qApp );
1805 } 1794 }
1806} 1795}
1807 1796
1808 1797
1809/*! 1798/*!
1810 \reimp 1799 \reimp
1811*/ 1800*/
1812bool QPEApplication::eventFilter( QObject *o, QEvent *e ) 1801bool QPEApplication::eventFilter( QObject *o, QEvent *e )
1813{ 1802{
1814 if ( !o->isWidgetType() ) 1803 if ( !o->isWidgetType() )
1815 return FALSE; 1804 return FALSE;
1816 1805
1817 if ( stylusDict && e->type() >= QEvent::MouseButtonPress && e->type() <= QEvent::MouseMove ) { 1806 if ( stylusDict && e->type() >= QEvent::MouseButtonPress && e->type() <= QEvent::MouseMove ) {
1818 QMouseEvent * me = ( QMouseEvent* ) e; 1807 QMouseEvent * me = ( QMouseEvent* ) e;
1819 StylusMode mode = (StylusMode)(int)stylusDict->find(o); 1808 StylusMode mode = (StylusMode)(int)stylusDict->find(o);
1820 switch (mode) { 1809 switch (mode) {
1821 case RightOnHold: 1810 case RightOnHold:
1822 switch ( me->type() ) { 1811 switch ( me->type() ) {
1823 case QEvent::MouseButtonPress: 1812 case QEvent::MouseButtonPress:
1824 if ( me->button() == LeftButton ) { 1813 if ( me->button() == LeftButton ) {
1825 if (!d->presstimer ) 1814 if (!d->presstimer )
1826 d->presstimer = startTimer(500); // #### pref. 1815 d->presstimer = startTimer(500); // #### pref.
1827 d->presswidget = (QWidget*)o; 1816 d->presswidget = (QWidget*)o;
1828 d->presspos = me->pos(); 1817 d->presspos = me->pos();
1829 d->rightpressed = FALSE; 1818 d->rightpressed = FALSE;
1830 } 1819 }
1831 break; 1820 break;
1832 case QEvent::MouseMove: 1821 case QEvent::MouseMove:
1833 if (d->presstimer && (me->pos() - d->presspos).manhattanLength() > 8) { 1822 if (d->presstimer && (me->pos() - d->presspos).manhattanLength() > 8) {
1834 killTimer(d->presstimer); 1823 killTimer(d->presstimer);
1835 d->presstimer = 0; 1824 d->presstimer = 0;
1836 } 1825 }
1837 break; 1826 break;
1838 case QEvent::MouseButtonRelease: 1827 case QEvent::MouseButtonRelease:
1839 if ( me->button() == LeftButton ) { 1828 if ( me->button() == LeftButton ) {
1840 if ( d->presstimer ) { 1829 if ( d->presstimer ) {
1841 killTimer(d->presstimer); 1830 killTimer(d->presstimer);
1842 d->presstimer = 0; 1831 d->presstimer = 0;
1843 } 1832 }
1844 if ( d->rightpressed && d->presswidget ) { 1833 if ( d->rightpressed && d->presswidget ) {
1845 // Right released 1834 // Right released
1846 postEvent( d->presswidget, 1835 postEvent( d->presswidget,
1847 new QMouseEvent( QEvent::MouseButtonRelease, me->pos(), 1836 new QMouseEvent( QEvent::MouseButtonRelease, me->pos(),
1848 RightButton, LeftButton + RightButton ) ); 1837 RightButton, LeftButton + RightButton ) );
1849 // Left released, off-widget 1838 // Left released, off-widget
1850 postEvent( d->presswidget, 1839 postEvent( d->presswidget,
1851 new QMouseEvent( QEvent::MouseMove, QPoint( -1, -1), 1840 new QMouseEvent( QEvent::MouseMove, QPoint( -1, -1),
1852 LeftButton, LeftButton ) ); 1841 LeftButton, LeftButton ) );
1853 postEvent( d->presswidget, 1842 postEvent( d->presswidget,
1854 new QMouseEvent( QEvent::MouseButtonRelease, QPoint( -1, -1), 1843 new QMouseEvent( QEvent::MouseButtonRelease, QPoint( -1, -1),
1855 LeftButton, LeftButton ) ); 1844 LeftButton, LeftButton ) );
1856 d->rightpressed = FALSE; 1845 d->rightpressed = FALSE;
1857 return TRUE; // don't send the real Left release 1846 return TRUE; // don't send the real Left release
1858 } 1847 }
1859 } 1848 }
1860 break; 1849 break;
1861 default: 1850 default:
1862 break; 1851 break;
1863 } 1852 }
1864 break; 1853 break;
1865 default: 1854 default:
1866 ; 1855 ;
1867 } 1856 }
1868 } 1857 }
1869 else if ( e->type() == QEvent::KeyPress || e->type() == QEvent::KeyRelease ) { 1858 else if ( e->type() == QEvent::KeyPress || e->type() == QEvent::KeyRelease ) {
1870 QKeyEvent *ke = (QKeyEvent *)e; 1859 QKeyEvent *ke = (QKeyEvent *)e;
1871 if ( ke->key() == Key_Enter ) { 1860 if ( ke->key() == Key_Enter ) {
1872 if ( o->isA( "QRadioButton" ) || o->isA( "QCheckBox" ) ) { 1861 if ( o->isA( "QRadioButton" ) || o->isA( "QCheckBox" ) ) {
1873 postEvent( o, new QKeyEvent( e->type(), Key_Space, ' ', 1862 postEvent( o, new QKeyEvent( e->type(), Key_Space, ' ',
1874 ke->state(), " ", ke->isAutoRepeat(), ke->count() ) ); 1863 ke->state(), " ", ke->isAutoRepeat(), ke->count() ) );
1875 return TRUE; 1864 return TRUE;
1876 } 1865 }
1877 } 1866 }
1878 } 1867 }
1879 return FALSE; 1868 return FALSE;
1880} 1869}
1881 1870
1882/*! 1871/*!
1883 \reimp 1872 \reimp
1884*/ 1873*/
1885void QPEApplication::timerEvent( QTimerEvent *e ) 1874void QPEApplication::timerEvent( QTimerEvent *e )
1886{ 1875{
1887 if ( e->timerId() == d->presstimer && d->presswidget ) { 1876 if ( e->timerId() == d->presstimer && d->presswidget ) {
1888 // Right pressed 1877 // Right pressed
1889 postEvent( d->presswidget, 1878 postEvent( d->presswidget,
1890 new QMouseEvent( QEvent::MouseButtonPress, d->presspos, 1879 new QMouseEvent( QEvent::MouseButtonPress, d->presspos,
1891 RightButton, LeftButton ) ); 1880 RightButton, LeftButton ) );
1892 killTimer( d->presstimer ); 1881 killTimer( d->presstimer );
1893 d->presstimer = 0; 1882 d->presstimer = 0;
1894 d->rightpressed = TRUE; 1883 d->rightpressed = TRUE;
1895 } 1884 }
1896} 1885}
1897 1886
1898void QPEApplication::removeSenderFromStylusDict() 1887void QPEApplication::removeSenderFromStylusDict()
1899{ 1888{
1900 stylusDict->remove 1889 stylusDict->remove
1901 ( ( void* ) sender() ); 1890 ( ( void* ) sender() );
1902 if ( d->presswidget == sender() ) 1891 if ( d->presswidget == sender() )
1903 d->presswidget = 0; 1892 d->presswidget = 0;
1904} 1893}
1905 1894
1906/*! 1895/*!
1907 \internal 1896 \internal
1908*/ 1897*/
1909bool QPEApplication::keyboardGrabbed() const 1898bool QPEApplication::keyboardGrabbed() const
1910{ 1899{
1911 return d->kbgrabbed; 1900 return d->kbgrabbed;
1912} 1901}
1913 1902
1914 1903
1915/*! 1904/*!
1916 Reverses the effect of grabKeyboard(). This is called automatically 1905 Reverses the effect of grabKeyboard(). This is called automatically
1917 on program exit. 1906 on program exit.
1918*/ 1907*/
1919void QPEApplication::ungrabKeyboard() 1908void QPEApplication::ungrabKeyboard()
1920{ 1909{
1921 ((QPEApplication *) qApp )-> d-> kbgrabbed = false; 1910 ((QPEApplication *) qApp )-> d-> kbgrabbed = false;
1922} 1911}
1923 1912
1924/*! 1913/*!
1925 Grabs the physical keyboard keys, e.g. the application's launching 1914 Grabs the physical keyboard keys, e.g. the application's launching
1926 keys. Instead of launching applications when these keys are pressed 1915 keys. Instead of launching applications when these keys are pressed
1927 the signals emitted are sent to this application instead. Some games 1916 the signals emitted are sent to this application instead. Some games
1928 programs take over the launch keys in this way to make interaction 1917 programs take over the launch keys in this way to make interaction
1929 easier. 1918 easier.
1930 1919
1931 \sa ungrabKeyboard() 1920 \sa ungrabKeyboard()
1932*/ 1921*/
1933void QPEApplication::grabKeyboard() 1922void QPEApplication::grabKeyboard()
1934{ 1923{
1935 ((QPEApplication *) qApp )-> d-> kbgrabbed = true; 1924 ((QPEApplication *) qApp )-> d-> kbgrabbed = true;
1936} 1925}
1937 1926
1938/*! 1927/*!
1939 \reimp 1928 \reimp
1940*/ 1929*/
1941int QPEApplication::exec() 1930int QPEApplication::exec()
1942{ 1931{
1943 d->qcopQok = true; 1932 d->qcopQok = true;
1944#ifndef QT_NO_COP 1933#ifndef QT_NO_COP
1945 d->sendQCopQ(); 1934 d->sendQCopQ();
1946 if ( !d->keep_running ) 1935 if ( !d->keep_running )
1947 processEvents(); // we may have received QCop messages in the meantime. 1936 processEvents(); // we may have received QCop messages in the meantime.
1948#endif 1937#endif
1949 1938
1950 if ( d->keep_running ) 1939 if ( d->keep_running )
1951 //|| d->qpe_main_widget && d->qpe_main_widget->isVisible() ) 1940 //|| d->qpe_main_widget && d->qpe_main_widget->isVisible() )
1952 return QApplication::exec(); 1941 return QApplication::exec();
1953 1942
1954#ifndef QT_NO_COP 1943#ifndef QT_NO_COP
1955 1944
1956 { 1945 {
1957 QCopEnvelope e( "QPE/System", "closing(QString)" ); 1946 QCopEnvelope e( "QPE/System", "closing(QString)" );
1958 e << d->appName; 1947 e << d->appName;
1959 } 1948 }
1960#endif 1949#endif
1961 processEvents(); 1950 processEvents();
1962 return 0; 1951 return 0;
1963} 1952}
1964 1953
1965/*! 1954/*!
1966 \internal 1955 \internal
1967 External request for application to quit. Quits if possible without 1956 External request for application to quit. Quits if possible without
1968 loosing state. 1957 loosing state.
1969*/ 1958*/
1970void QPEApplication::tryQuit() 1959void QPEApplication::tryQuit()
1971{ 1960{
1972 if ( activeModalWidget() || strcmp( argv() [ 0 ], "embeddedkonsole" ) == 0 ) 1961 if ( activeModalWidget() || strcmp( argv() [ 0 ], "embeddedkonsole" ) == 0 )
1973 return ; // Inside modal loop or konsole. Too hard to save state. 1962 return ; // Inside modal loop or konsole. Too hard to save state.
1974#ifndef QT_NO_COP 1963#ifndef QT_NO_COP
1975 1964
1976 { 1965 {
1977 QCopEnvelope e( "QPE/System", "closing(QString)" ); 1966 QCopEnvelope e( "QPE/System", "closing(QString)" );
1978 e << d->appName; 1967 e << d->appName;
1979 } 1968 }
1980#endif 1969#endif
1981 processEvents(); 1970 processEvents();
1982 1971
1983 quit(); 1972 quit();
1984} 1973}
1985 1974
1986/*! 1975/*!
1987 \internal 1976 \internal
1988*/ 1977*/
1989void QPEApplication::installTranslation( const QString& baseName ) { 1978void QPEApplication::installTranslation( const QString& baseName ) {
1990 QTranslator* trans = new QTranslator(this); 1979 QTranslator* trans = new QTranslator(this);
1991 QString tfn = qpeDir() + "/i18n/"+baseName; 1980 QString tfn = qpeDir() + "/i18n/"+baseName;
1992 if ( trans->load( tfn ) ) 1981 if ( trans->load( tfn ) )
1993 installTranslator( trans ); 1982 installTranslator( trans );
1994 else 1983 else
1995 delete trans; 1984 delete trans;
1996} 1985}
1997 1986
1998/*! 1987/*!
1999 \internal 1988 \internal
2000 User initiated quit. Makes the window 'Go Away'. If preloaded this means 1989 User initiated quit. Makes the window 'Go Away'. If preloaded this means
2001 hiding the window. If not it means quitting the application. 1990 hiding the window. If not it means quitting the application.
2002 As this is user initiated we don't need to check state. 1991 As this is user initiated we don't need to check state.
2003*/ 1992*/
2004void QPEApplication::hideOrQuit() 1993void QPEApplication::hideOrQuit()
2005{ 1994{
2006 processEvents(); 1995 processEvents();
2007 1996
2008 // If we are a preloaded application we don't actually quit, so emit 1997 // If we are a preloaded application we don't actually quit, so emit
2009 // a System message indicating we're quasi-closing. 1998 // a System message indicating we're quasi-closing.
2010 if ( d->preloaded && d->qpe_main_widget ) 1999 if ( d->preloaded && d->qpe_main_widget )
2011#ifndef QT_NO_COP 2000#ifndef QT_NO_COP
2012 2001
2013 { 2002 {
2014 QCopEnvelope e("QPE/System", "fastAppHiding(QString)" ); 2003 QCopEnvelope e("QPE/System", "fastAppHiding(QString)" );
2015 e << d->appName; 2004 e << d->appName;
2016 d->qpe_main_widget->hide(); 2005 d->qpe_main_widget->hide();
2017 } 2006 }
2018#endif 2007#endif
2019 else 2008 else
2020 quit(); 2009 quit();
2021} 2010}
2022 2011
2023#if (__GNUC__ > 2 ) 2012#if (__GNUC__ > 2 )
2024extern "C" void __cxa_pure_virtual(); 2013extern "C" void __cxa_pure_virtual();
2025 2014
2026void __cxa_pure_virtual() 2015void __cxa_pure_virtual()
2027{ 2016{
2028 fprintf( stderr, "Pure virtual called\n"); 2017 fprintf( stderr, "Pure virtual called\n");
2029 abort(); 2018 abort();
2030 2019
2031} 2020}
2032 2021
2033#endif 2022#endif
2034 2023
2035 2024
2036#if defined(OPIE_NEW_MALLOC) 2025#if defined(OPIE_NEW_MALLOC)
2037 2026
2038// The libraries with the skiff package (and possibly others) have 2027// The libraries with the skiff package (and possibly others) have
2039// completely useless implementations of builtin new and delete that 2028// completely useless implementations of builtin new and delete that
2040// use about 50% of your CPU. Here we revert to the simple libc 2029// use about 50% of your CPU. Here we revert to the simple libc
2041// functions. 2030// functions.
2042 2031
2043void* operator new[]( size_t size ) 2032void* operator new[]( size_t size )
2044{ 2033{
2045 return malloc( size ); 2034 return malloc( size );
2046} 2035}
2047 2036
2048void* operator new( size_t size ) 2037void* operator new( size_t size )
2049{ 2038{
2050 return malloc( size ); 2039 return malloc( size );
2051} 2040}
2052 2041
2053void operator delete[]( void* p ) 2042void operator delete[]( void* p )
2054{ 2043{
2055 free( p ); 2044 free( p );
2056} 2045}
2057 2046
2058void operator delete[]( void* p, size_t /*size*/ ) 2047void operator delete[]( void* p, size_t /*size*/ )
2059{ 2048{
2060 free( p ); 2049 free( p );
2061} 2050}
2062 2051
2063 2052
2064void operator delete( void* p ) 2053void operator delete( void* p )
2065{ 2054{
2066 free( p ); 2055 free( p );
2067} 2056}
2068 2057
2069void operator delete( void* p, size_t /*size*/ ) 2058void operator delete( void* p, size_t /*size*/ )
2070{ 2059{
2071 free( p ); 2060 free( p );
2072} 2061}
2073 2062
2074#endif 2063#endif
2075 2064
2076#if ( QT_VERSION <= 230 ) && !defined(SINGLE_APP) 2065#if ( QT_VERSION <= 230 ) && !defined(SINGLE_APP)
2077#include <qwidgetlist.h> 2066#include <qwidgetlist.h>
2078#ifdef QWS 2067#ifdef QWS
2079#include <qgfx_qws.h> 2068#include <qgfx_qws.h>
2080extern QRect qt_maxWindowRect; 2069extern QRect qt_maxWindowRect;
2081void qt_setMaxWindowRect(const QRect& r ) 2070void qt_setMaxWindowRect(const QRect& r )
2082{ 2071{
2083 qt_maxWindowRect = qt_screen->mapFromDevice( r, 2072 qt_maxWindowRect = qt_screen->mapFromDevice( r,
2084 qt_screen->mapToDevice( QSize( qt_screen->width(), qt_screen->height() ) ) ); 2073 qt_screen->mapToDevice( QSize( qt_screen->width(), qt_screen->height() ) ) );
2085 // Re-resize any maximized windows 2074 // Re-resize any maximized windows
2086 QWidgetList* l = QApplication::topLevelWidgets(); 2075 QWidgetList* l = QApplication::topLevelWidgets();
2087 if ( l ) { 2076 if ( l ) {
2088 QWidget * w = l->first(); 2077 QWidget * w = l->first();
2089 while ( w ) { 2078 while ( w ) {
2090 if ( w->isVisible() && w->isMaximized() ) { 2079 if ( w->isVisible() && w->isMaximized() ) {
2091 w->showMaximized(); 2080 w->showMaximized();
2092 } 2081 }
2093 w = l->next(); 2082 w = l->next();
2094 } 2083 }
2095 delete l; 2084 delete l;
2096 } 2085 }
2097} 2086}
2098#endif 2087#endif
2099#endif 2088#endif