summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--library/qpeapplication.cpp35
1 files changed, 31 insertions, 4 deletions
diff --git a/library/qpeapplication.cpp b/library/qpeapplication.cpp
index c154689..ba9db71 100644
--- a/library/qpeapplication.cpp
+++ b/library/qpeapplication.cpp
@@ -1,1608 +1,1635 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000 Trolltech AS. All rights reserved. 2** Copyright (C) 2000 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qtopia Environment. 4** This file is part of Qtopia Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19** $Id$ 19** $Id$
20** 20**
21**********************************************************************/ 21**********************************************************************/
22#define QTOPIA_INTERNAL_LANGLIST 22#define QTOPIA_INTERNAL_LANGLIST
23#include <stdlib.h> 23#include <stdlib.h>
24#include <unistd.h> 24#include <unistd.h>
25#include <qfile.h> 25#include <qfile.h>
26#ifdef Q_WS_QWS 26#ifdef Q_WS_QWS
27#ifndef QT_NO_COP 27#ifndef QT_NO_COP
28#if QT_VERSION <= 231 28#if QT_VERSION <= 231
29#define private public 29#define private public
30#define sendLocally processEvent 30#define sendLocally processEvent
31#include "qcopenvelope_qws.h" 31#include "qcopenvelope_qws.h"
32#undef private 32#undef private
33#else 33#else
34#include "qcopenvelope_qws.h" 34#include "qcopenvelope_qws.h"
35#endif 35#endif
36#endif 36#endif
37#include <qwindowsystem_qws.h> 37#include <qwindowsystem_qws.h>
38#endif 38#endif
39#include <qtextstream.h> 39#include <qtextstream.h>
40#include <qpalette.h> 40#include <qpalette.h>
41#include <qbuffer.h> 41#include <qbuffer.h>
42#include <qptrdict.h> 42#include <qptrdict.h>
43#include <qregexp.h> 43#include <qregexp.h>
44#include <qdir.h> 44#include <qdir.h>
45#include <qlabel.h> 45#include <qlabel.h>
46#include <qdialog.h> 46#include <qdialog.h>
47#include <qdragobject.h> 47#include <qdragobject.h>
48#include <qevent.h> 48#include <qevent.h>
49#include <qtooltip.h> 49#include <qtooltip.h>
50#include <qsignal.h> 50#include <qsignal.h>
51#include "qpeapplication.h" 51#include "qpeapplication.h"
52#include "qpestyle.h" 52#include "qpestyle.h"
53#if QT_VERSION >= 300 53#if QT_VERSION >= 300
54#include <qstylefactory.h> 54#include <qstylefactory.h>
55#else 55#else
56#include <qplatinumstyle.h> 56#include <qplatinumstyle.h>
57#include <qwindowsstyle.h> 57#include <qwindowsstyle.h>
58#include <qmotifstyle.h> 58#include <qmotifstyle.h>
59#include <qmotifplusstyle.h> 59#include <qmotifplusstyle.h>
60#include "lightstyle.h" 60#include "lightstyle.h"
61#endif 61#endif
62#include "global.h" 62#include "global.h"
63#include "resource.h" 63#include "resource.h"
64#if QT_VERSION <= 230 && defined(QT_NO_CODECS) 64#if QT_VERSION <= 230 && defined(QT_NO_CODECS)
65#include "qutfcodec.h" 65#include "qutfcodec.h"
66#endif 66#endif
67#include "config.h" 67#include "config.h"
68#include "network.h" 68#include "network.h"
69#include "fontmanager.h" 69#include "fontmanager.h"
70#include "power.h" 70#include "power.h"
71#include "alarmserver.h" 71#include "alarmserver.h"
72#include "applnk.h" 72#include "applnk.h"
73#include "qpemenubar.h" 73#include "qpemenubar.h"
74 74
75#include <unistd.h> 75#include <unistd.h>
76#include <sys/file.h> 76#include <sys/file.h>
77#include <sys/ioctl.h> 77#include <sys/ioctl.h>
78#include <sys/soundcard.h> 78#include <sys/soundcard.h>
79 79
80// for setBacklight() 80// for setBacklight()
81#if defined(QT_QWS_IPAQ) || defined(QT_QWS_EBX) 81#if defined(QT_QWS_IPAQ) || defined(QT_QWS_EBX)
82#include <linux/fb.h> 82#include <linux/fb.h>
83#include <sys/types.h> 83#include <sys/types.h>
84#include <sys/stat.h> 84#include <sys/stat.h>
85#endif 85#endif
86#include <stdlib.h> 86#include <stdlib.h>
87 87
88 88
89class QPEApplicationData { 89class QPEApplicationData {
90public: 90public:
91 QPEApplicationData() : presstimer(0), presswidget(0), rightpressed(FALSE), 91 QPEApplicationData() : presstimer(0), presswidget(0), rightpressed(FALSE),
92 kbgrabber(0), kbregrab(FALSE), notbusysent(FALSE), preloaded(FALSE), 92 kbgrabber(0), kbregrab(FALSE), notbusysent(FALSE), preloaded(FALSE),
93 forceshow(FALSE), nomaximize(FALSE), qpe_main_widget(0), 93 forceshow(FALSE), nomaximize(FALSE), qpe_main_widget(0),
94 keep_running(TRUE) 94 keep_running(TRUE)
95 { 95 {
96 qcopq.setAutoDelete(TRUE); 96 qcopq.setAutoDelete(TRUE);
97 } 97 }
98 98
99 int presstimer; 99 int presstimer;
100 QWidget* presswidget; 100 QWidget* presswidget;
101 QPoint presspos; 101 QPoint presspos;
102 bool rightpressed; 102 bool rightpressed;
103 int kbgrabber; 103 int kbgrabber;
104 bool kbregrab; 104 bool kbregrab;
105 bool notbusysent; 105 bool notbusysent;
106 QString appName; 106 QString appName;
107 struct QCopRec { 107 struct QCopRec {
108 QCopRec(const QCString &ch, const QCString &msg, 108 QCopRec(const QCString &ch, const QCString &msg,
109 const QByteArray &d) : 109 const QByteArray &d) :
110 channel(ch), message(msg), data(d) { } 110 channel(ch), message(msg), data(d) { }
111 111
112 QCString channel; 112 QCString channel;
113 QCString message; 113 QCString message;
114 QByteArray data; 114 QByteArray data;
115 }; 115 };
116 bool preloaded; 116 bool preloaded;
117 bool forceshow; 117 bool forceshow;
118 bool nomaximize; 118 bool nomaximize;
119 QWidget* qpe_main_widget; 119 QWidget* qpe_main_widget;
120 bool keep_running; 120 bool keep_running;
121 QList<QCopRec> qcopq; 121 QList<QCopRec> qcopq;
122 122
123 void enqueueQCop(const QCString &ch, const QCString &msg, 123 void enqueueQCop(const QCString &ch, const QCString &msg,
124 const QByteArray &data) 124 const QByteArray &data)
125 { 125 {
126 qcopq.append(new QCopRec(ch,msg,data)); 126 qcopq.append(new QCopRec(ch,msg,data));
127 } 127 }
128 void sendQCopQ() 128 void sendQCopQ()
129 { 129 {
130 QCopRec* r; 130 QCopRec* r;
131 for (QListIterator<QCopRec> it(qcopq); (r=it.current()); ++it) 131 for (QListIterator<QCopRec> it(qcopq); (r=it.current()); ++it)
132 QCopChannel::sendLocally(r->channel,r->message,r->data); 132 QCopChannel::sendLocally(r->channel,r->message,r->data);
133 qcopq.clear(); 133 qcopq.clear();
134 } 134 }
135}; 135};
136 136
137class ResourceMimeFactory : public QMimeSourceFactory { 137class ResourceMimeFactory : public QMimeSourceFactory {
138public: 138public:
139 ResourceMimeFactory() 139 ResourceMimeFactory()
140 { 140 {
141 setFilePath( Global::helpPath() ); 141 setFilePath( Global::helpPath() );
142 setExtensionType("html","text/html;charset=UTF-8"); 142 setExtensionType("html","text/html;charset=UTF-8");
143 } 143 }
144 144
145 const QMimeSource* data(const QString& abs_name) const 145 const QMimeSource* data(const QString& abs_name) const
146 { 146 {
147 const QMimeSource* r = QMimeSourceFactory::data(abs_name); 147 const QMimeSource* r = QMimeSourceFactory::data(abs_name);
148 if ( !r ) { 148 if ( !r ) {
149 int sl = abs_name.length(); 149 int sl = abs_name.length();
150 do { 150 do {
151 sl = abs_name.findRev('/',sl-1); 151 sl = abs_name.findRev('/',sl-1);
152 QString name = sl>=0 ? abs_name.mid(sl+1) : abs_name; 152 QString name = sl>=0 ? abs_name.mid(sl+1) : abs_name;
153 int dot = name.findRev('.'); 153 int dot = name.findRev('.');
154 if ( dot >= 0 ) 154 if ( dot >= 0 )
155 name = name.left(dot); 155 name = name.left(dot);
156 QImage img = Resource::loadImage(name); 156 QImage img = Resource::loadImage(name);
157 if ( !img.isNull() ) 157 if ( !img.isNull() )
158 r = new QImageDrag(img); 158 r = new QImageDrag(img);
159 } while (!r && sl>0); 159 } while (!r && sl>0);
160 } 160 }
161 return r; 161 return r;
162 } 162 }
163}; 163};
164 164
165static int muted=0; 165static int muted=0;
166static int micMuted=0; 166static int micMuted=0;
167 167
168static void setVolume(int t=0, int percent=-1) 168static void setVolume(int t=0, int percent=-1)
169{ 169{
170 switch (t) { 170 switch (t) {
171 case 0: { 171 case 0: {
172 Config cfg("Sound"); 172 Config cfg("Sound");
173 cfg.setGroup("System"); 173 cfg.setGroup("System");
174 if ( percent < 0 ) 174 if ( percent < 0 )
175 percent = cfg.readNumEntry("Volume",50); 175 percent = cfg.readNumEntry("Volume",50);
176 int fd = 0; 176 int fd = 0;
177 if ((fd = open("/dev/mixer", O_RDWR))>=0) { 177 if ((fd = open("/dev/mixer", O_RDWR))>=0) {
178 int vol = muted ? 0 : percent; 178 int vol = muted ? 0 : percent;
179 // set both channels to same volume 179 // set both channels to same volume
180 vol |= vol << 8; 180 vol |= vol << 8;
181 ioctl(fd, MIXER_WRITE(0), &vol); 181 ioctl(fd, MIXER_WRITE(0), &vol);
182 ::close(fd); 182 ::close(fd);
183 } 183 }
184 } break; 184 } break;
185 } 185 }
186} 186}
187 187
188static void setMic(int t=0, int percent=-1) 188static void setMic(int t=0, int percent=-1)
189{ 189{
190 switch (t) { 190 switch (t) {
191 case 0: { 191 case 0: {
192 Config cfg("Sound"); 192 Config cfg("Sound");
193 cfg.setGroup("System"); 193 cfg.setGroup("System");
194 if ( percent < 0 ) 194 if ( percent < 0 )
195 percent = cfg.readNumEntry("Mic",50); 195 percent = cfg.readNumEntry("Mic",50);
196 196
197 int fd = 0; 197 int fd = 0;
198 int mic = micMuted ? 0 : percent; 198 int mic = micMuted ? 0 : percent;
199 if ((fd = open("/dev/mixer", O_RDWR))>=0) { 199 if ((fd = open("/dev/mixer", O_RDWR))>=0) {
200 ioctl(fd, MIXER_WRITE(SOUND_MIXER_MIC), &mic); 200 ioctl(fd, MIXER_WRITE(SOUND_MIXER_MIC), &mic);
201 ::close(fd); 201 ::close(fd);
202 } 202 }
203 } break; 203 } break;
204 } 204 }
205} 205}
206 206
207int qpe_sysBrightnessSteps() 207int qpe_sysBrightnessSteps()
208{ 208{
209#if defined(QT_QWS_IPAQ) 209#if defined(QT_QWS_IPAQ)
210 return 255; 210 return 255;
211#elif defined(QT_QWS_EBX) 211#elif defined(QT_QWS_EBX)
212 return 4; 212 return 4;
213#else 213#else
214 return 255; // ? 214 return 255; // ?
215#endif 215#endif
216} 216}
217 217
218 218
219static int& hack(int& i) 219static int& hack(int& i)
220{ 220{
221#if QT_VERSION <= 230 && defined(QT_NO_CODECS) 221#if QT_VERSION <= 230 && defined(QT_NO_CODECS)
222 // These should be created, but aren't in Qt 2.3.0 222 // These should be created, but aren't in Qt 2.3.0
223 (void)new QUtf8Codec; 223 (void)new QUtf8Codec;
224 (void)new QUtf16Codec; 224 (void)new QUtf16Codec;
225#endif 225#endif
226 return i; 226 return i;
227} 227}
228 228
229static bool forced_off = FALSE; 229static bool forced_off = FALSE;
230static int curbl=-1; 230static int curbl=-1;
231 231
232static int backlight() 232static int backlight()
233{ 233{
234 if ( curbl == -1 ) { 234 if ( curbl == -1 ) {
235 // Read from config 235 // Read from config
236 Config config( "qpe" ); 236 Config config( "qpe" );
237 config.setGroup( "Screensaver" ); 237 config.setGroup( "Screensaver" );
238 curbl = config.readNumEntry("Brightness",255); 238 curbl = config.readNumEntry("Brightness",255);
239 } 239 }
240 return curbl; 240 return curbl;
241} 241}
242 242
243static void setBacklight(int bright) 243static void setBacklight(int bright)
244{ 244{
245 if ( bright == -3 ) { 245 if ( bright == -3 ) {
246 // Forced on 246 // Forced on
247 forced_off = FALSE; 247 forced_off = FALSE;
248 bright = -1; 248 bright = -1;
249 } 249 }
250 if ( forced_off && bright != -2 ) 250 if ( forced_off && bright != -2 )
251 return; 251 return;
252 if ( bright == -2 ) { 252 if ( bright == -2 ) {
253 // Toggle between off and on 253 // Toggle between off and on
254 bright = curbl ? 0 : -1; 254 bright = curbl ? 0 : -1;
255 forced_off = !bright; 255 forced_off = !bright;
256 } 256 }
257 if ( bright == -1 ) { 257 if ( bright == -1 ) {
258 // Read from config 258 // Read from config
259 Config config( "qpe" ); 259 Config config( "qpe" );
260 config.setGroup( "Screensaver" ); 260 config.setGroup( "Screensaver" );
261 bright = config.readNumEntry("Brightness",255); 261 bright = config.readNumEntry("Brightness",255);
262 } 262 }
263#if defined(QT_QWS_IPAQ) || defined(QT_QWS_EBX) 263#if defined(QT_QWS_IPAQ) || defined(QT_QWS_EBX)
264 if ( QFile::exists("/usr/bin/bl") ) { 264 if ( QFile::exists("/usr/bin/bl") ) {
265 QString cmd = "/usr/bin/bl 1 "; 265 QString cmd = "/usr/bin/bl 1 ";
266 cmd += bright<=0 ? "0 " : "1 "; 266 cmd += bright<=0 ? "0 " : "1 ";
267 cmd += QString::number(bright); 267 cmd += QString::number(bright);
268 system(cmd.latin1()); 268 system(cmd.latin1());
269#if defined(QT_QWS_EBX) 269#if defined(QT_QWS_EBX)
270 } else if ( QFile::exists("/dev/fl") ) { 270 } else if ( QFile::exists("/dev/fl") ) {
271#define FL_IOCTL_STEP_CONTRAST 100 271#define FL_IOCTL_STEP_CONTRAST 100
272 int fd = open("/dev/fl", O_WRONLY); 272 int fd = open("/dev/fl", O_WRONLY);
273 if (fd >= 0 ) { 273 if (fd >= 0 ) {
274 int steps = qpe_sysBrightnessSteps(); 274 int steps = qpe_sysBrightnessSteps();
275 int bl = ( bright * steps + 127 ) / 255; 275 int bl = ( bright * steps + 127 ) / 255;
276 if ( bright && !bl ) bl = 1; 276 if ( bright && !bl ) bl = 1;
277 bl = ioctl(fd, FL_IOCTL_STEP_CONTRAST, bl); 277 bl = ioctl(fd, FL_IOCTL_STEP_CONTRAST, bl);
278 close(fd); 278 close(fd);
279 } 279 }
280 } 280 }
281#elif defined(QT_QWS_IPAQ) 281#elif defined(QT_QWS_IPAQ)
282 } else if ( QFile::exists("/dev/ts") || QFile::exists("/dev/h3600_ts") ) { 282 } else if ( QFile::exists("/dev/ts") || QFile::exists("/dev/h3600_ts") ) {
283 typedef struct { 283 typedef struct {
284 unsigned char mode; 284 unsigned char mode;
285 unsigned char pwr; 285 unsigned char pwr;
286 unsigned char brightness; 286 unsigned char brightness;
287 } FLITE_IN; 287 } FLITE_IN;
288# ifndef FLITE_ON 288# ifndef FLITE_ON
289# ifndef _LINUX_IOCTL_H 289# ifndef _LINUX_IOCTL_H
290# include <linux/ioctl.h> 290# include <linux/ioctl.h>
291# endif 291# endif
292# define FLITE_ON _IOW('f', 7, FLITE_IN) 292# define FLITE_ON _IOW('f', 7, FLITE_IN)
293# endif 293# endif
294 int fd; 294 int fd;
295 if ( QFile::exists("/dev/ts") ) 295 if ( QFile::exists("/dev/ts") )
296 fd = open("/dev/ts", O_WRONLY); 296 fd = open("/dev/ts", O_WRONLY);
297 else 297 else
298 fd = open("/dev/h3600_ts", O_WRONLY); 298 fd = open("/dev/h3600_ts", O_WRONLY);
299 if (fd >= 0 ) { 299 if (fd >= 0 ) {
300 FLITE_IN bl; 300 FLITE_IN bl;
301 bl.mode = 1; 301 bl.mode = 1;
302 bl.pwr = bright ? 1 : 0; 302 bl.pwr = bright ? 1 : 0;
303 bl.brightness = bright; 303 bl.brightness = bright;
304 ioctl(fd, FLITE_ON, &bl); 304 ioctl(fd, FLITE_ON, &bl);
305 close(fd); 305 close(fd);
306 } 306 }
307 } 307 }
308#endif 308#endif
309#endif 309#endif
310 curbl = bright; 310 curbl = bright;
311} 311}
312 312
313void qpe_setBacklight(int bright) { setBacklight(bright); } 313void qpe_setBacklight(int bright) { setBacklight(bright); }
314 314
315static bool dim_on = FALSE; 315static bool dim_on = FALSE;
316static bool lightoff_on = FALSE; 316static bool lightoff_on = FALSE;
317static int disable_suspend = 100; 317static int disable_suspend = 100;
318 318
319static bool powerOnline() 319static bool powerOnline()
320{ 320{
321 return PowerStatusManager::readStatus().acStatus() == PowerStatus::Online; 321 return PowerStatusManager::readStatus().acStatus() == PowerStatus::Online;
322} 322}
323 323
324static bool networkOnline() 324static bool networkOnline()
325{ 325{
326 return Network::networkOnline(); 326 return Network::networkOnline();
327} 327}
328 328
329class QPEScreenSaver : public QWSScreenSaver 329class QPEScreenSaver : public QWSScreenSaver
330{ 330{
331private:
332 int LcdOn;
331 333
332public: 334public:
333 QPEScreenSaver() 335 QPEScreenSaver()
334 { 336 {
337 int fd;
338
339 LcdOn = TRUE;
340 // Make sure the LCD is in fact on, (if opie was killed while the LCD is off it would still be off)
341 fd=open("/dev/fb0",O_RDWR);
342 if (fd != -1) { ioctl(fd,FBIOBLANK,VESA_NO_BLANKING); close(fd); }
335 } 343 }
336 void restore() 344 void restore()
337 { 345 {
346 if (!LcdOn) // We must have turned it off
347 {
348 int fd;
349 fd=open("/dev/fb0",O_RDWR);
350 if (fd != -1) { ioctl(fd,FBIOBLANK,VESA_NO_BLANKING); close(fd); }
351 }
338 setBacklight(-1); 352 setBacklight(-1);
339 } 353 }
340 bool save(int level) 354 bool save(int level)
341 { 355 {
356 int fd;
357
342 switch ( level ) { 358 switch ( level ) {
343 case 0: 359 case 0:
344 if ( disable_suspend > 0 && dim_on ) { 360 if ( disable_suspend > 0 && dim_on ) {
345 if (backlight() > 1) 361 if (backlight() > 1)
346 setBacklight(1); // lowest non-off 362 setBacklight(1); // lowest non-off
347 } 363 }
348 return TRUE; 364 return TRUE;
349 break; 365 break;
350 case 1: 366 case 1:
351 if ( disable_suspend > 1 && lightoff_on ) { 367 if ( disable_suspend > 1 && lightoff_on ) {
352 setBacklight(0); // off 368 setBacklight(0); // off
353 } 369 }
354 return TRUE; 370 return TRUE;
355 break; 371 break;
356 case 2: 372 case 2:
357 if ( disable_suspend > 2 && !powerOnline() && !networkOnline() ) { 373 Config config( "qpe" );
358 QWSServer::sendKeyEvent( 0xffff, Qt::Key_F34, FALSE, TRUE, FALSE ); 374 config.setGroup( "Screensaver" );
359 return TRUE; 375 if (config.readNumEntry("LcdOffOnly",0) != 0) // We're only turning off the LCD
360 } 376 {
377 fd=open("/dev/fb0",O_RDWR);
378 if (fd != -1) { ioctl(fd,FBIOBLANK,VESA_POWERDOWN); close(fd); }
379 LcdOn = FALSE;
380 }
381 else // We're going to suspend the whole machine
382 {
383 if ( disable_suspend > 2 && !powerOnline() && !networkOnline() ) {
384 QWSServer::sendKeyEvent( 0xffff, Qt::Key_F34, FALSE, TRUE, FALSE );
385 return TRUE;
386 }
387 }
361 break; 388 break;
362 } 389 }
363 return FALSE; 390 return FALSE;
364 } 391 }
365}; 392};
366 393
367static int ssi(int interval, Config &config, const QString &enable, const QString& value, int def) 394static int ssi(int interval, Config &config, const QString &enable, const QString& value, int def)
368{ 395{
369 if ( !enable.isEmpty() && config.readNumEntry(enable,0) == 0 ) 396 if ( !enable.isEmpty() && config.readNumEntry(enable,0) == 0 )
370 return 0; 397 return 0;
371 398
372 if ( interval < 0 ) { 399 if ( interval < 0 ) {
373 // Restore screen blanking and power saving state 400 // Restore screen blanking and power saving state
374 interval = config.readNumEntry( value, def ); 401 interval = config.readNumEntry( value, def );
375 } 402 }
376 return interval; 403 return interval;
377} 404}
378 405
379static void setScreenSaverIntervals(int i1, int i2, int i3) 406static void setScreenSaverIntervals(int i1, int i2, int i3)
380{ 407{
381 Config config( "qpe" ); 408 Config config( "qpe" );
382 config.setGroup( "Screensaver" ); 409 config.setGroup( "Screensaver" );
383 410
384 int v[4]; 411 int v[4];
385 i1 = ssi(i1, config, "Dim","Interval_Dim", 30); 412 i1 = ssi(i1, config, "Dim","Interval_Dim", 30);
386 i2 = ssi(i2, config, "LightOff","Interval_LightOff", 20); 413 i2 = ssi(i2, config, "LightOff","Interval_LightOff", 20);
387 i3 = ssi(i3, config, "","Interval", 60); 414 i3 = ssi(i3, config, "","Interval", 60);
388 415
389 //qDebug("screen saver intervals: %d %d %d", i1, i2, i3); 416 //qDebug("screen saver intervals: %d %d %d", i1, i2, i3);
390 417
391 v[0] = QMAX( 1000*i1, 100); 418 v[0] = QMAX( 1000*i1, 100);
392 v[1] = QMAX( 1000*i2, 100); 419 v[1] = QMAX( 1000*i2, 100);
393 v[2] = QMAX( 1000*i3, 100); 420 v[2] = QMAX( 1000*i3, 100);
394 v[3] = 0; 421 v[3] = 0;
395 dim_on = ( (i1 != 0) ? config.readNumEntry("Dim",1) : FALSE ); 422 dim_on = ( (i1 != 0) ? config.readNumEntry("Dim",1) : FALSE );
396 lightoff_on = ( (i2 != 0 ) ? config.readNumEntry("LightOff",1) : FALSE ); 423 lightoff_on = ( (i2 != 0 ) ? config.readNumEntry("LightOff",1) : FALSE );
397 if ( !i1 && !i2 && !i3 ) 424 if ( !i1 && !i2 && !i3 )
398 QWSServer::setScreenSaverInterval(0); 425 QWSServer::setScreenSaverInterval(0);
399 else 426 else
400 QWSServer::setScreenSaverIntervals(v); 427 QWSServer::setScreenSaverIntervals(v);
401} 428}
402 429
403static void setScreenSaverInterval(int interval) 430static void setScreenSaverInterval(int interval)
404{ 431{
405 setScreenSaverIntervals(-1,-1,interval); 432 setScreenSaverIntervals(-1,-1,interval);
406} 433}
407 434
408 435
409/*! 436/*!
410 \class QPEApplication qpeapplication.h 437 \class QPEApplication qpeapplication.h
411 \brief The QPEApplication class implements various system services 438 \brief The QPEApplication class implements various system services
412 that are available to all Qtopia applications. 439 that are available to all Qtopia applications.
413 440
414 Simply by using QPEApplication instead of QApplication, a plain Qt 441 Simply by using QPEApplication instead of QApplication, a plain Qt
415 application becomes a Qtopia application. It automatically follows 442 application becomes a Qtopia application. It automatically follows
416 style changes, quits and raises, and in the 443 style changes, quits and raises, and in the
417 case of \link docwidget.html document-oriented\endlink applications, 444 case of \link docwidget.html document-oriented\endlink applications,
418 changes the current displayed document in response to the environment. 445 changes the current displayed document in response to the environment.
419*/ 446*/
420 447
421/*! 448/*!
422 \fn void QPEApplication::clientMoused() 449 \fn void QPEApplication::clientMoused()
423 450
424 \internal 451 \internal
425*/ 452*/
426 453
427/*! 454/*!
428 \fn void QPEApplication::timeChanged(); 455 \fn void QPEApplication::timeChanged();
429 456
430 This signal is emitted when the time jumps forward or backwards 457 This signal is emitted when the time jumps forward or backwards
431 by more than the normal passage of time. 458 by more than the normal passage of time.
432*/ 459*/
433 460
434/*! 461/*!
435 \fn void QPEApplication::clockChanged( bool ampm ); 462 \fn void QPEApplication::clockChanged( bool ampm );
436 463
437 This signal is emitted when the user changes the style 464 This signal is emitted when the user changes the style
438 of clock. If \a ampm is TRUE, the user wants a 12-hour 465 of clock. If \a ampm is TRUE, the user wants a 12-hour
439 AM/PM close, otherwise, they want a 24-hour clock. 466 AM/PM close, otherwise, they want a 24-hour clock.
440*/ 467*/
441 468
442/*! 469/*!
443 \fn void QPEApplication::appMessage( const QCString& msg, const QByteArray& data ) 470 \fn void QPEApplication::appMessage( const QCString& msg, const QByteArray& data )
444 471
445 This signal is emitted when a message is received on the 472 This signal is emitted when a message is received on the
446 QPE/Application/<i>appname</i> QCop channel for this application. 473 QPE/Application/<i>appname</i> QCop channel for this application.
447 474
448 The slot to which you connect this signal uses \a msg and \a data 475 The slot to which you connect this signal uses \a msg and \a data
449 in the following way: 476 in the following way:
450 477
451\code 478\code
452 void MyWidget::receive( const QCString& msg, const QByteArray& data ) 479 void MyWidget::receive( const QCString& msg, const QByteArray& data )
453 { 480 {
454 QDataStream stream( data, IO_ReadOnly ); 481 QDataStream stream( data, IO_ReadOnly );
455 if ( msg == "someMessage(int,int,int)" ) { 482 if ( msg == "someMessage(int,int,int)" ) {
456 int a,b,c; 483 int a,b,c;
457 stream >> a >> b >> c; 484 stream >> a >> b >> c;
458 ... 485 ...
459 } else if ( msg == "otherMessage(QString)" ) { 486 } else if ( msg == "otherMessage(QString)" ) {
460 ... 487 ...
461 } 488 }
462 } 489 }
463\endcode 490\endcode
464 491
465 \sa qcop.html 492 \sa qcop.html
466*/ 493*/
467 494
468/*! 495/*!
469 Constructs a QPEApplication just as you would construct 496 Constructs a QPEApplication just as you would construct
470 a QApplication, passing \a argc, \a argv, and \a t. 497 a QApplication, passing \a argc, \a argv, and \a t.
471*/ 498*/
472QPEApplication::QPEApplication( int& argc, char **argv, Type t ) 499QPEApplication::QPEApplication( int& argc, char **argv, Type t )
473 : QApplication( hack(argc), argv, t ) 500 : QApplication( hack(argc), argv, t )
474{ 501{
475 int dw = desktop()->width(); 502 int dw = desktop()->width();
476 if ( dw < 200 ) { 503 if ( dw < 200 ) {
477 setFont( QFont( "helvetica", 8 ) ); 504 setFont( QFont( "helvetica", 8 ) );
478 AppLnk::setSmallIconSize(10); 505 AppLnk::setSmallIconSize(10);
479 AppLnk::setBigIconSize(28); 506 AppLnk::setBigIconSize(28);
480 } 507 }
481 508
482 d = new QPEApplicationData; 509 d = new QPEApplicationData;
483 QMimeSourceFactory::setDefaultFactory(new ResourceMimeFactory); 510 QMimeSourceFactory::setDefaultFactory(new ResourceMimeFactory);
484 511
485 connect(this, SIGNAL(lastWindowClosed()), this, SLOT(hideOrQuit())); 512 connect(this, SIGNAL(lastWindowClosed()), this, SLOT(hideOrQuit()));
486#if defined(Q_WS_QWS) && !defined(QT_NO_COP) 513#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
487 514
488 QString qcopfn("/tmp/qcop-msg-"); 515 QString qcopfn("/tmp/qcop-msg-");
489 qcopfn += QString(argv[0]); // append command name 516 qcopfn += QString(argv[0]); // append command name
490 517
491 QFile f(qcopfn); 518 QFile f(qcopfn);
492 if ( f.open(IO_ReadOnly) ) { 519 if ( f.open(IO_ReadOnly) ) {
493 flock(f.handle(), LOCK_EX); 520 flock(f.handle(), LOCK_EX);
494 } 521 }
495 522
496 sysChannel = new QCopChannel( "QPE/System", this ); 523 sysChannel = new QCopChannel( "QPE/System", this );
497 connect( sysChannel, SIGNAL(received(const QCString &, const QByteArray &)), 524 connect( sysChannel, SIGNAL(received(const QCString &, const QByteArray &)),
498 this, SLOT(systemMessage( const QCString &, const QByteArray &)) ); 525 this, SLOT(systemMessage( const QCString &, const QByteArray &)) );
499 526
500 QCString channel = QCString(argv[0]); 527 QCString channel = QCString(argv[0]);
501 channel.replace(QRegExp(".*/"),""); 528 channel.replace(QRegExp(".*/"),"");
502 d->appName = channel; 529 d->appName = channel;
503 channel = "QPE/Application/" + channel; 530 channel = "QPE/Application/" + channel;
504 pidChannel = new QCopChannel( channel, this); 531 pidChannel = new QCopChannel( channel, this);
505 connect( pidChannel, SIGNAL(received(const QCString &, const QByteArray &)), 532 connect( pidChannel, SIGNAL(received(const QCString &, const QByteArray &)),
506 this, SLOT(pidMessage(const QCString &, const QByteArray &))); 533 this, SLOT(pidMessage(const QCString &, const QByteArray &)));
507 534
508 if ( f.isOpen() ) { 535 if ( f.isOpen() ) {
509 d->keep_running = FALSE; 536 d->keep_running = FALSE;
510 QDataStream ds(&f); 537 QDataStream ds(&f);
511 QCString channel, message; 538 QCString channel, message;
512 QByteArray data; 539 QByteArray data;
513 while(!ds.atEnd()) { 540 while(!ds.atEnd()) {
514 ds >> channel >> message >> data; 541 ds >> channel >> message >> data;
515 d->enqueueQCop(channel,message,data); 542 d->enqueueQCop(channel,message,data);
516 } 543 }
517 544
518 flock(f.handle(), LOCK_UN); 545 flock(f.handle(), LOCK_UN);
519 f.close(); 546 f.close();
520 f.remove(); 547 f.remove();
521 } 548 }
522 549
523 for (int a=0; a<argc; a++) { 550 for (int a=0; a<argc; a++) {
524 if ( qstrcmp(argv[a],"-preload")==0 ) { 551 if ( qstrcmp(argv[a],"-preload")==0 ) {
525 argv[a] = argv[a+1]; 552 argv[a] = argv[a+1];
526 a++; 553 a++;
527 d->preloaded = TRUE; 554 d->preloaded = TRUE;
528 argc-=1; 555 argc-=1;
529 } else if ( qstrcmp(argv[a],"-preload-show")==0 ) { 556 } else if ( qstrcmp(argv[a],"-preload-show")==0 ) {
530 argv[a] = argv[a+1]; 557 argv[a] = argv[a+1];
531 a++; 558 a++;
532 d->preloaded = TRUE; 559 d->preloaded = TRUE;
533 d->forceshow = TRUE; 560 d->forceshow = TRUE;
534 argc-=1; 561 argc-=1;
535 } 562 }
536 } 563 }
537 564
538 /* overide stored arguments */ 565 /* overide stored arguments */
539 setArgs(argc, argv); 566 setArgs(argc, argv);
540 567
541#endif 568#endif
542 569
543 qwsSetDecoration( new QPEDecoration() ); 570 qwsSetDecoration( new QPEDecoration() );
544 571
545#ifndef QT_NO_TRANSLATION 572#ifndef QT_NO_TRANSLATION
546 QStringList langs = Global::languageList(); 573 QStringList langs = Global::languageList();
547 for (QStringList::ConstIterator it = langs.begin(); it!=langs.end(); ++it) { 574 for (QStringList::ConstIterator it = langs.begin(); it!=langs.end(); ++it) {
548 QString lang = *it; 575 QString lang = *it;
549 576
550 QTranslator * trans; 577 QTranslator * trans;
551 QString tfn; 578 QString tfn;
552 579
553 trans = new QTranslator(this); 580 trans = new QTranslator(this);
554 tfn = qpeDir()+"/i18n/"+lang+"/libqpe.qm"; 581 tfn = qpeDir()+"/i18n/"+lang+"/libqpe.qm";
555 if ( trans->load( tfn )) 582 if ( trans->load( tfn ))
556 installTranslator( trans ); 583 installTranslator( trans );
557 else 584 else
558 delete trans; 585 delete trans;
559 586
560 trans = new QTranslator(this); 587 trans = new QTranslator(this);
561 tfn = qpeDir()+"/i18n/"+lang+"/"+d->appName+".qm"; 588 tfn = qpeDir()+"/i18n/"+lang+"/"+d->appName+".qm";
562 if ( trans->load( tfn )) 589 if ( trans->load( tfn ))
563 installTranslator( trans ); 590 installTranslator( trans );
564 else 591 else
565 delete trans; 592 delete trans;
566 593
567 //###language/font hack; should look it up somewhere 594 //###language/font hack; should look it up somewhere
568 if ( lang == "ja" || lang == "zh_CN" || lang == "zh_TW" || lang == "ko" ) { 595 if ( lang == "ja" || lang == "zh_CN" || lang == "zh_TW" || lang == "ko" ) {
569 QFont fn = FontManager::unicodeFont( FontManager::Proportional ); 596 QFont fn = FontManager::unicodeFont( FontManager::Proportional );
570 setFont( fn ); 597 setFont( fn );
571 } 598 }
572 } 599 }
573#endif 600#endif
574 601
575 applyStyle(); 602 applyStyle();
576 603
577 if ( type() == GuiServer ) { 604 if ( type() == GuiServer ) {
578 setScreenSaverInterval(-1); 605 setScreenSaverInterval(-1);
579 setVolume(); 606 setVolume();
580 QWSServer::setScreenSaver(new QPEScreenSaver); 607 QWSServer::setScreenSaver(new QPEScreenSaver);
581 } 608 }
582 609
583 installEventFilter( this ); 610 installEventFilter( this );
584 611
585 QPEMenuToolFocusManager::initialize(); 612 QPEMenuToolFocusManager::initialize();
586 613
587#ifdef QT_NO_QWS_CURSOR 614#ifdef QT_NO_QWS_CURSOR
588 // if we have no cursor, probably don't want tooltips 615 // if we have no cursor, probably don't want tooltips
589 QToolTip::setEnabled( FALSE ); 616 QToolTip::setEnabled( FALSE );
590#endif 617#endif
591} 618}
592 619
593static QPtrDict<void>* inputMethodDict=0; 620static QPtrDict<void>* inputMethodDict=0;
594static void createInputMethodDict() 621static void createInputMethodDict()
595{ 622{
596 if ( !inputMethodDict ) 623 if ( !inputMethodDict )
597 inputMethodDict = new QPtrDict<void>; 624 inputMethodDict = new QPtrDict<void>;
598} 625}
599 626
600/*! 627/*!
601 Returns the currently set hint to the system as to whether 628 Returns the currently set hint to the system as to whether
602 \a w has any use for text input methods. 629 \a w has any use for text input methods.
603 630
604 \sa setInputMethodHint() 631 \sa setInputMethodHint()
605*/ 632*/
606QPEApplication::InputMethodHint QPEApplication::inputMethodHint( QWidget* w ) 633QPEApplication::InputMethodHint QPEApplication::inputMethodHint( QWidget* w )
607{ 634{
608 if ( inputMethodDict && w ) 635 if ( inputMethodDict && w )
609 return (InputMethodHint)(int)inputMethodDict->find(w); 636 return (InputMethodHint)(int)inputMethodDict->find(w);
610 return Normal; 637 return Normal;
611} 638}
612 639
613/*! 640/*!
614 \enum QPEApplication::InputMethodHint 641 \enum QPEApplication::InputMethodHint
615 642
616 \value Normal the application sometimes needs text input (the default). 643 \value Normal the application sometimes needs text input (the default).
617 \value AlwaysOff the application never needs text input. 644 \value AlwaysOff the application never needs text input.
618 \value AlwaysOn the application always needs text input. 645 \value AlwaysOn the application always needs text input.
619*/ 646*/
620 647
621/*! 648/*!
622 Hints to the system that \a w has use for text input methods 649 Hints to the system that \a w has use for text input methods
623 as specified by \a mode. 650 as specified by \a mode.
624 651
625 \sa inputMethodHint() 652 \sa inputMethodHint()
626*/ 653*/
627void QPEApplication::setInputMethodHint( QWidget* w, InputMethodHint mode ) 654void QPEApplication::setInputMethodHint( QWidget* w, InputMethodHint mode )
628{ 655{
629 createInputMethodDict(); 656 createInputMethodDict();
630 if ( mode == Normal ) { 657 if ( mode == Normal ) {
631 inputMethodDict->remove(w); 658 inputMethodDict->remove(w);
632 } else { 659 } else {
633 inputMethodDict->insert(w,(void*)mode); 660 inputMethodDict->insert(w,(void*)mode);
634 } 661 }
635} 662}
636 663
637class HackDialog : public QDialog 664class HackDialog : public QDialog
638{ 665{
639public: 666public:
640 void acceptIt() { accept(); } 667 void acceptIt() { accept(); }
641 void rejectIt() { reject(); } 668 void rejectIt() { reject(); }
642}; 669};
643 670
644 671
645void QPEApplication::mapToDefaultAction( QWSKeyEvent *ke, int key ) 672void QPEApplication::mapToDefaultAction( QWSKeyEvent *ke, int key )
646{ 673{
647 // specialised actions for certain widgets. May want to 674 // specialised actions for certain widgets. May want to
648 // add more stuff here. 675 // add more stuff here.
649 if ( activePopupWidget() && activePopupWidget()->inherits( "QListBox" ) 676 if ( activePopupWidget() && activePopupWidget()->inherits( "QListBox" )
650 && activePopupWidget()->parentWidget() 677 && activePopupWidget()->parentWidget()
651 && activePopupWidget()->parentWidget()->inherits( "QComboBox" ) ) 678 && activePopupWidget()->parentWidget()->inherits( "QComboBox" ) )
652 key = Qt::Key_Return; 679 key = Qt::Key_Return;
653 680
654 if ( activePopupWidget() && activePopupWidget()->inherits( "QPopupMenu" ) ) 681 if ( activePopupWidget() && activePopupWidget()->inherits( "QPopupMenu" ) )
655 key = Qt::Key_Return; 682 key = Qt::Key_Return;
656 683
657 ke->simpleData.keycode = key; 684 ke->simpleData.keycode = key;
658} 685}
659 686
660class HackWidget : public QWidget 687class HackWidget : public QWidget
661{ 688{
662public: 689public:
663 bool needsOk() 690 bool needsOk()
664 { return (getWState() & WState_Reserved1 ); } 691 { return (getWState() & WState_Reserved1 ); }
665}; 692};
666 693
667/*! 694/*!
668 \internal 695 \internal
669*/ 696*/
670bool QPEApplication::qwsEventFilter( QWSEvent *e ) 697bool QPEApplication::qwsEventFilter( QWSEvent *e )
671{ 698{
672 if ( !d->notbusysent && e->type == QWSEvent::Focus ) { 699 if ( !d->notbusysent && e->type == QWSEvent::Focus ) {
673 if ( qApp->type() != QApplication::GuiServer ) { 700 if ( qApp->type() != QApplication::GuiServer ) {
674 QCopEnvelope e("QPE/System", "notBusy(QString)" ); 701 QCopEnvelope e("QPE/System", "notBusy(QString)" );
675 e << d->appName; 702 e << d->appName;
676 } 703 }
677 d->notbusysent=TRUE; 704 d->notbusysent=TRUE;
678 } 705 }
679 if ( type() == GuiServer ) { 706 if ( type() == GuiServer ) {
680 switch ( e->type ) { 707 switch ( e->type ) {
681 case QWSEvent::Mouse: 708 case QWSEvent::Mouse:
682 if ( e->asMouse()->simpleData.state && !QWidget::find(e->window()) ) 709 if ( e->asMouse()->simpleData.state && !QWidget::find(e->window()) )
683 emit clientMoused(); 710 emit clientMoused();
684 } 711 }
685 } 712 }
686 if ( e->type == QWSEvent::Key ) { 713 if ( e->type == QWSEvent::Key ) {
687 if ( d->kbgrabber == 1 ) 714 if ( d->kbgrabber == 1 )
688 return TRUE; 715 return TRUE;
689 QWSKeyEvent *ke = (QWSKeyEvent *)e; 716 QWSKeyEvent *ke = (QWSKeyEvent *)e;
690 if ( ke->simpleData.keycode == Qt::Key_F33 ) { 717 if ( ke->simpleData.keycode == Qt::Key_F33 ) {
691 // Use special "OK" key to press "OK" on top level widgets 718 // Use special "OK" key to press "OK" on top level widgets
692 QWidget *active = activeWindow(); 719 QWidget *active = activeWindow();
693 QWidget *popup = 0; 720 QWidget *popup = 0;
694 if ( active && active->isPopup() ) { 721 if ( active && active->isPopup() ) {
695 popup = active; 722 popup = active;
696 active = active->parentWidget(); 723 active = active->parentWidget();
697 } 724 }
698 if ( active && (int)active->winId() == ke->simpleData.window && 725 if ( active && (int)active->winId() == ke->simpleData.window &&
699 !active->testWFlags( WStyle_Customize|WType_Popup|WType_Desktop )) { 726 !active->testWFlags( WStyle_Customize|WType_Popup|WType_Desktop )) {
700 if ( ke->simpleData.is_press ) { 727 if ( ke->simpleData.is_press ) {
701 if ( popup ) 728 if ( popup )
702 popup->close(); 729 popup->close();
703 if ( active->inherits( "QDialog" ) ) { 730 if ( active->inherits( "QDialog" ) ) {
704 HackDialog *d = (HackDialog *)active; 731 HackDialog *d = (HackDialog *)active;
705 d->acceptIt(); 732 d->acceptIt();
706 return TRUE; 733 return TRUE;
707 } else if ( ((HackWidget *)active)->needsOk() ) { 734 } else if ( ((HackWidget *)active)->needsOk() ) {
708 QSignal s; 735 QSignal s;
709 s.connect( active, SLOT( accept() ) ); 736 s.connect( active, SLOT( accept() ) );
710 s.activate(); 737 s.activate();
711 } else { 738 } else {
712 // do the same as with the select key: Map to the default action of the widget: 739 // do the same as with the select key: Map to the default action of the widget:
713 mapToDefaultAction( ke, Qt::Key_Return ); 740 mapToDefaultAction( ke, Qt::Key_Return );
714 } 741 }
715 } 742 }
716 } 743 }
717 } else if ( ke->simpleData.keycode == Qt::Key_F30 ) { 744 } else if ( ke->simpleData.keycode == Qt::Key_F30 ) {
718 // Use special "select" key to do whatever default action a widget has 745 // Use special "select" key to do whatever default action a widget has
719 mapToDefaultAction( ke, Qt::Key_Space ); 746 mapToDefaultAction( ke, Qt::Key_Space );
720 } else if ( ke->simpleData.keycode == Qt::Key_Escape && 747 } else if ( ke->simpleData.keycode == Qt::Key_Escape &&
721 ke->simpleData.is_press ) { 748 ke->simpleData.is_press ) {
722 // Escape key closes app if focus on toplevel 749 // Escape key closes app if focus on toplevel
723 QWidget *active = activeWindow(); 750 QWidget *active = activeWindow();
724 if ( active && active->testWFlags( WType_TopLevel ) && 751 if ( active && active->testWFlags( WType_TopLevel ) &&
725 (int)active->winId() == ke->simpleData.window && 752 (int)active->winId() == ke->simpleData.window &&
726 !active->testWFlags( WStyle_Dialog|WStyle_Customize|WType_Popup|WType_Desktop )) { 753 !active->testWFlags( WStyle_Dialog|WStyle_Customize|WType_Popup|WType_Desktop )) {
727 if ( active->inherits( "QDialog" ) ) { 754 if ( active->inherits( "QDialog" ) ) {
728 HackDialog *d = (HackDialog *)active; 755 HackDialog *d = (HackDialog *)active;
729 d->rejectIt(); 756 d->rejectIt();
730 return TRUE; 757 return TRUE;
731 } else if ( strcmp( argv()[0], "embeddedkonsole") != 0 ) { 758 } else if ( strcmp( argv()[0], "embeddedkonsole") != 0 ) {
732 active->close(); 759 active->close();
733 } 760 }
734 } 761 }
735 } 762 }
736 763
737#if QT_VERSION < 231 764#if QT_VERSION < 231
738 // Filter out the F4/Launcher key from apps 765 // Filter out the F4/Launcher key from apps
739 // ### The launcher key may not always be F4 on all devices 766 // ### The launcher key may not always be F4 on all devices
740 if ( ((QWSKeyEvent *)e)->simpleData.keycode == Qt::Key_F4 ) 767 if ( ((QWSKeyEvent *)e)->simpleData.keycode == Qt::Key_F4 )
741 return TRUE; 768 return TRUE;
742#endif 769#endif
743 } 770 }
744 if ( e->type == QWSEvent::Focus ) { 771 if ( e->type == QWSEvent::Focus ) {
745 QWSFocusEvent *fe = (QWSFocusEvent*)e; 772 QWSFocusEvent *fe = (QWSFocusEvent*)e;
746 QWidget* nfw = QWidget::find(e->window()); 773 QWidget* nfw = QWidget::find(e->window());
747 if ( !fe->simpleData.get_focus ) { 774 if ( !fe->simpleData.get_focus ) {
748 QWidget *active = activeWindow(); 775 QWidget *active = activeWindow();
749 while ( active && active->isPopup() ) { 776 while ( active && active->isPopup() ) {
750 active->close(); 777 active->close();
751 active = activeWindow(); 778 active = activeWindow();
752 } 779 }
753 if ( !nfw && d->kbgrabber == 2 ) { 780 if ( !nfw && d->kbgrabber == 2 ) {
754 ungrabKeyboard(); 781 ungrabKeyboard();
755 d->kbregrab = TRUE; // want kb back when we're active 782 d->kbregrab = TRUE; // want kb back when we're active
756 } 783 }
757 } else { 784 } else {
758 // make sure our modal widget is ALWAYS on top 785 // make sure our modal widget is ALWAYS on top
759 QWidget *topm = activeModalWidget(); 786 QWidget *topm = activeModalWidget();
760 if ( topm ) { 787 if ( topm ) {
761 topm->raise(); 788 topm->raise();
762 } 789 }
763 if ( d->kbregrab ) { 790 if ( d->kbregrab ) {
764 grabKeyboard(); 791 grabKeyboard();
765 d->kbregrab = FALSE; 792 d->kbregrab = FALSE;
766 } 793 }
767 } 794 }
768 if ( fe->simpleData.get_focus && inputMethodDict ) { 795 if ( fe->simpleData.get_focus && inputMethodDict ) {
769 InputMethodHint m = inputMethodHint( QWidget::find(e->window()) ); 796 InputMethodHint m = inputMethodHint( QWidget::find(e->window()) );
770 if ( m == AlwaysOff ) 797 if ( m == AlwaysOff )
771 Global::hideInputMethod(); 798 Global::hideInputMethod();
772 if ( m == AlwaysOn ) 799 if ( m == AlwaysOn )
773 Global::showInputMethod(); 800 Global::showInputMethod();
774 } 801 }
775 } 802 }
776 return QApplication::qwsEventFilter( e ); 803 return QApplication::qwsEventFilter( e );
777} 804}
778 805
779/*! 806/*!
780 Destroys the QPEApplication. 807 Destroys the QPEApplication.
781*/ 808*/
782QPEApplication::~QPEApplication() 809QPEApplication::~QPEApplication()
783{ 810{
784 ungrabKeyboard(); 811 ungrabKeyboard();
785#if defined(Q_WS_QWS) && !defined(QT_NO_COP) 812#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
786 // Need to delete QCopChannels early, since the display will 813 // Need to delete QCopChannels early, since the display will
787 // be gone by the time we get to ~QObject(). 814 // be gone by the time we get to ~QObject().
788 delete sysChannel; 815 delete sysChannel;
789 delete pidChannel; 816 delete pidChannel;
790#endif 817#endif
791 delete d; 818 delete d;
792} 819}
793 820
794/*! 821/*!
795 Returns <tt>$OPIEDIR/</tt>. 822 Returns <tt>$OPIEDIR/</tt>.
796*/ 823*/
797QString QPEApplication::qpeDir() 824QString QPEApplication::qpeDir()
798{ 825{
799 const char *base = getenv( "OPIEDIR" ); 826 const char *base = getenv( "OPIEDIR" );
800 if ( base ) 827 if ( base )
801 return QString( base ) + "/"; 828 return QString( base ) + "/";
802 829
803 return QString( "../" ); 830 return QString( "../" );
804} 831}
805 832
806/*! 833/*!
807 Returns the user's current Document directory. There is a trailing "/". 834 Returns the user's current Document directory. There is a trailing "/".
808*/ 835*/
809QString QPEApplication::documentDir() 836QString QPEApplication::documentDir()
810{ 837{
811 const char *base = getenv( "HOME" ); 838 const char *base = getenv( "HOME" );
812 if ( base ) 839 if ( base )
813 return QString( base ) + "/Documents/"; 840 return QString( base ) + "/Documents/";
814 841
815 return QString( "../Documents/" ); 842 return QString( "../Documents/" );
816} 843}
817 844
818static int deforient=-1; 845static int deforient=-1;
819 846
820/*! 847/*!
821 \internal 848 \internal
822*/ 849*/
823int QPEApplication::defaultRotation() 850int QPEApplication::defaultRotation()
824{ 851{
825 if ( deforient < 0 ) { 852 if ( deforient < 0 ) {
826 QString d = getenv("QWS_DISPLAY"); 853 QString d = getenv("QWS_DISPLAY");
827 if ( d.contains("Rot90") ) { 854 if ( d.contains("Rot90") ) {
828 deforient = 90; 855 deforient = 90;
829 } else if ( d.contains("Rot180") ) { 856 } else if ( d.contains("Rot180") ) {
830 deforient = 180; 857 deforient = 180;
831 } else if ( d.contains("Rot270") ) { 858 } else if ( d.contains("Rot270") ) {
832 deforient = 270; 859 deforient = 270;
833 } else { 860 } else {
834 deforient=0; 861 deforient=0;
835 } 862 }
836 } 863 }
837 return deforient; 864 return deforient;
838} 865}
839 866
840/*! 867/*!
841 \internal 868 \internal
842*/ 869*/
843void QPEApplication::setDefaultRotation(int r) 870void QPEApplication::setDefaultRotation(int r)
844{ 871{
845 if ( qApp->type() == GuiServer ) { 872 if ( qApp->type() == GuiServer ) {
846 deforient = r; 873 deforient = r;
847 setenv("QWS_DISPLAY", QString("Transformed:Rot%1:0").arg(r).latin1(), 1); 874 setenv("QWS_DISPLAY", QString("Transformed:Rot%1:0").arg(r).latin1(), 1);
848 } else { 875 } else {
849 QCopEnvelope("QPE/System", "setDefaultRotation(int)") << r; 876 QCopEnvelope("QPE/System", "setDefaultRotation(int)") << r;
850 } 877 }
851} 878}
852 879
853/*! 880/*!
854 \internal 881 \internal
855*/ 882*/
856void QPEApplication::applyStyle() 883void QPEApplication::applyStyle()
857{ 884{
858 Config config( "qpe" ); 885 Config config( "qpe" );
859 886
860 config.setGroup( "Appearance" ); 887 config.setGroup( "Appearance" );
861 888
862 // Widget style 889 // Widget style
863 QString style = config.readEntry( "Style", "Light" ); 890 QString style = config.readEntry( "Style", "Light" );
864 internalSetStyle( style ); 891 internalSetStyle( style );
865 892
866 // Colors 893 // Colors
867 QColor bgcolor( config.readEntry( "Background", "#E5E1D5" ) ); 894 QColor bgcolor( config.readEntry( "Background", "#E5E1D5" ) );
868 QColor btncolor( config.readEntry( "Button", "#D6CDBB" ) ); 895 QColor btncolor( config.readEntry( "Button", "#D6CDBB" ) );
869 QPalette pal( btncolor, bgcolor ); 896 QPalette pal( btncolor, bgcolor );
870 QString color = config.readEntry( "Highlight", "#800000" ); 897 QString color = config.readEntry( "Highlight", "#800000" );
871 pal.setColor( QColorGroup::Highlight, QColor(color) ); 898 pal.setColor( QColorGroup::Highlight, QColor(color) );
872 color = config.readEntry( "HighlightedText", "#FFFFFF" ); 899 color = config.readEntry( "HighlightedText", "#FFFFFF" );
873 pal.setColor( QColorGroup::HighlightedText, QColor(color) ); 900 pal.setColor( QColorGroup::HighlightedText, QColor(color) );
874 color = config.readEntry( "Text", "#000000" ); 901 color = config.readEntry( "Text", "#000000" );
875 pal.setColor( QColorGroup::Text, QColor(color) ); 902 pal.setColor( QColorGroup::Text, QColor(color) );
876 color = config.readEntry( "ButtonText", "#000000" ); 903 color = config.readEntry( "ButtonText", "#000000" );
877 pal.setColor( QPalette::Active, QColorGroup::ButtonText, QColor(color) ); 904 pal.setColor( QPalette::Active, QColorGroup::ButtonText, QColor(color) );
878 color = config.readEntry( "Base", "#FFFFFF" ); 905 color = config.readEntry( "Base", "#FFFFFF" );
879 pal.setColor( QColorGroup::Base, QColor(color) ); 906 pal.setColor( QColorGroup::Base, QColor(color) );
880 907
881 pal.setColor( QPalette::Disabled, QColorGroup::Text, 908 pal.setColor( QPalette::Disabled, QColorGroup::Text,
882 pal.color(QPalette::Active, QColorGroup::Background).dark() ); 909 pal.color(QPalette::Active, QColorGroup::Background).dark() );
883 910
884 setPalette( pal, TRUE ); 911 setPalette( pal, TRUE );
885} 912}
886 913
887void QPEApplication::systemMessage( const QCString &msg, const QByteArray &data) 914void QPEApplication::systemMessage( const QCString &msg, const QByteArray &data)
888{ 915{
889#ifdef Q_WS_QWS 916#ifdef Q_WS_QWS
890 QDataStream stream( data, IO_ReadOnly ); 917 QDataStream stream( data, IO_ReadOnly );
891 if ( msg == "applyStyle()" ) { 918 if ( msg == "applyStyle()" ) {
892 applyStyle(); 919 applyStyle();
893 } else if ( msg == "setScreenSaverInterval(int)" ) { 920 } else if ( msg == "setScreenSaverInterval(int)" ) {
894 if ( type() == GuiServer ) { 921 if ( type() == GuiServer ) {
895 int time; 922 int time;
896 stream >> time; 923 stream >> time;
897 setScreenSaverInterval(time); 924 setScreenSaverInterval(time);
898 } 925 }
899 } else if ( msg == "setScreenSaverIntervals(int,int,int)" ) { 926 } else if ( msg == "setScreenSaverIntervals(int,int,int)" ) {
900 if ( type() == GuiServer ) { 927 if ( type() == GuiServer ) {
901 int t1,t2,t3; 928 int t1,t2,t3;
902 stream >> t1 >> t2 >> t3; 929 stream >> t1 >> t2 >> t3;
903 setScreenSaverIntervals(t1,t2,t3); 930 setScreenSaverIntervals(t1,t2,t3);
904 } 931 }
905 } else if ( msg == "setBacklight(int)" ) { 932 } else if ( msg == "setBacklight(int)" ) {
906 if ( type() == GuiServer ) { 933 if ( type() == GuiServer ) {
907 int bright; 934 int bright;
908 stream >> bright; 935 stream >> bright;
909 setBacklight(bright); 936 setBacklight(bright);
910 } 937 }
911 } else if ( msg == "setDefaultRotation(int)" ) { 938 } else if ( msg == "setDefaultRotation(int)" ) {
912 if ( type() == GuiServer ) { 939 if ( type() == GuiServer ) {
913 int r; 940 int r;
914 stream >> r; 941 stream >> r;
915 setDefaultRotation(r); 942 setDefaultRotation(r);
916 } 943 }
917 } else if ( msg == "shutdown()" ) { 944 } else if ( msg == "shutdown()" ) {
918 if ( type() == GuiServer ) 945 if ( type() == GuiServer )
919 shutdown(); 946 shutdown();
920 } else if ( msg == "quit()" ) { 947 } else if ( msg == "quit()" ) {
921 if ( type() != GuiServer ) 948 if ( type() != GuiServer )
922 tryQuit(); 949 tryQuit();
923 } else if ( msg == "forceQuit()" ) { 950 } else if ( msg == "forceQuit()" ) {
924 if ( type() != GuiServer ) 951 if ( type() != GuiServer )
925 quit(); 952 quit();
926 } else if ( msg == "restart()" ) { 953 } else if ( msg == "restart()" ) {
927 if ( type() == GuiServer ) 954 if ( type() == GuiServer )
928 restart(); 955 restart();
929 } else if ( msg == "grabKeyboard(QString)" ) { 956 } else if ( msg == "grabKeyboard(QString)" ) {
930 QString who; 957 QString who;
931 stream >> who; 958 stream >> who;
932 if ( who.isEmpty() ) 959 if ( who.isEmpty() )
933 d->kbgrabber = 0; 960 d->kbgrabber = 0;
934 else if ( who != d->appName ) 961 else if ( who != d->appName )
935 d->kbgrabber = 1; 962 d->kbgrabber = 1;
936 else 963 else
937 d->kbgrabber = 2; 964 d->kbgrabber = 2;
938 } else if ( msg == "language(QString)" ) { 965 } else if ( msg == "language(QString)" ) {
939 if ( type() == GuiServer ) { 966 if ( type() == GuiServer ) {
940 QString l; 967 QString l;
941 stream >> l; 968 stream >> l;
942 QString cl = getenv("LANG"); 969 QString cl = getenv("LANG");
943 if ( cl != l ) { 970 if ( cl != l ) {
944 if ( l.isNull() ) 971 if ( l.isNull() )
945 unsetenv( "LANG" ); 972 unsetenv( "LANG" );
946 else 973 else
947 setenv( "LANG", l.latin1(), 1 ); 974 setenv( "LANG", l.latin1(), 1 );
948 restart(); 975 restart();
949 } 976 }
950 } 977 }
951 } else if ( msg == "timeChange(QString)" ) { 978 } else if ( msg == "timeChange(QString)" ) {
952 QString t; 979 QString t;
953 stream >> t; 980 stream >> t;
954 if ( t.isNull() ) 981 if ( t.isNull() )
955 unsetenv( "TZ" ); 982 unsetenv( "TZ" );
956 else 983 else
957 setenv( "TZ", t.latin1(), 1 ); 984 setenv( "TZ", t.latin1(), 1 );
958 // emit the signal so everyone else knows... 985 // emit the signal so everyone else knows...
959 emit timeChanged(); 986 emit timeChanged();
960 } else if ( msg == "execute(QString)" ) { 987 } else if ( msg == "execute(QString)" ) {
961 if ( type() == GuiServer ) { 988 if ( type() == GuiServer ) {
962 QString t; 989 QString t;
963 stream >> t; 990 stream >> t;
964 Global::execute( t ); 991 Global::execute( t );
965 } 992 }
966 } else if ( msg == "execute(QString,QString)" ) { 993 } else if ( msg == "execute(QString,QString)" ) {
967 if ( type() == GuiServer ) { 994 if ( type() == GuiServer ) {
968 QString t,d; 995 QString t,d;
969 stream >> t >> d; 996 stream >> t >> d;
970 Global::execute( t, d ); 997 Global::execute( t, d );
971 } 998 }
972 } else if ( msg == "addAlarm(QDateTime,QCString,QCString,int)" ) { 999 } else if ( msg == "addAlarm(QDateTime,QCString,QCString,int)" ) {
973 if ( type() == GuiServer ) { 1000 if ( type() == GuiServer ) {
974 QDateTime when; 1001 QDateTime when;
975 QCString channel, message; 1002 QCString channel, message;
976 int data; 1003 int data;
977 stream >> when >> channel >> message >> data; 1004 stream >> when >> channel >> message >> data;
978 AlarmServer::addAlarm( when, channel, message, data ); 1005 AlarmServer::addAlarm( when, channel, message, data );
979 } 1006 }
980 } else if ( msg == "deleteAlarm(QDateTime,QCString,QCString,int)" ) { 1007 } else if ( msg == "deleteAlarm(QDateTime,QCString,QCString,int)" ) {
981 if ( type() == GuiServer ) { 1008 if ( type() == GuiServer ) {
982 QDateTime when; 1009 QDateTime when;
983 QCString channel, message; 1010 QCString channel, message;
984 int data; 1011 int data;
985 stream >> when >> channel >> message >> data; 1012 stream >> when >> channel >> message >> data;
986 AlarmServer::deleteAlarm( when, channel, message, data ); 1013 AlarmServer::deleteAlarm( when, channel, message, data );
987 } 1014 }
988 } else if ( msg == "clockChange(bool)" ) { 1015 } else if ( msg == "clockChange(bool)" ) {
989 int tmp; 1016 int tmp;
990 stream >> tmp; 1017 stream >> tmp;
991 emit clockChanged( tmp ); 1018 emit clockChanged( tmp );
992 } else if ( msg == "weekChange(bool)" ) { 1019 } else if ( msg == "weekChange(bool)" ) {
993 int tmp; 1020 int tmp;
994 stream >> tmp; 1021 stream >> tmp;
995 emit weekChanged( tmp ); 1022 emit weekChanged( tmp );
996 } else if ( msg == "setDateFormat(DateFormat)" ) { 1023 } else if ( msg == "setDateFormat(DateFormat)" ) {
997 DateFormat tmp; 1024 DateFormat tmp;
998 stream >> tmp; 1025 stream >> tmp;
999 emit dateFormatChanged( tmp ); 1026 emit dateFormatChanged( tmp );
1000 } else if ( msg == "setVolume(int,int)" ) { 1027 } else if ( msg == "setVolume(int,int)" ) {
1001 int t,v; 1028 int t,v;
1002 stream >> t >> v; 1029 stream >> t >> v;
1003 setVolume(t,v); 1030 setVolume(t,v);
1004 emit volumeChanged( muted ); 1031 emit volumeChanged( muted );
1005 } else if ( msg == "volumeChange(bool)" ) { 1032 } else if ( msg == "volumeChange(bool)" ) {
1006 stream >> muted; 1033 stream >> muted;
1007 setVolume(); 1034 setVolume();
1008 emit volumeChanged( muted ); 1035 emit volumeChanged( muted );
1009 } else if ( msg == "setMic(int,int)") { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com> 1036 } else if ( msg == "setMic(int,int)") { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com>
1010 int t,v; 1037 int t,v;
1011 stream >> t >> v; 1038 stream >> t >> v;
1012 setMic(t,v); 1039 setMic(t,v);
1013 emit micChanged( micMuted ); 1040 emit micChanged( micMuted );
1014 } else if ( msg == "micChange(bool)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com> 1041 } else if ( msg == "micChange(bool)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com>
1015 stream >> micMuted; 1042 stream >> micMuted;
1016 setMic(); 1043 setMic();
1017 emit micChanged( micMuted ); 1044 emit micChanged( micMuted );
1018 } else if ( msg == "setScreenSaverMode(int)" ) { 1045 } else if ( msg == "setScreenSaverMode(int)" ) {
1019 if ( type() == GuiServer ) { 1046 if ( type() == GuiServer ) {
1020 int old = disable_suspend; 1047 int old = disable_suspend;
1021 stream >> disable_suspend; 1048 stream >> disable_suspend;
1022 //qDebug("setScreenSaverMode(%d)", disable_suspend ); 1049 //qDebug("setScreenSaverMode(%d)", disable_suspend );
1023 if ( disable_suspend > old ) 1050 if ( disable_suspend > old )
1024 setScreenSaverInterval( -1 ); 1051 setScreenSaverInterval( -1 );
1025 } 1052 }
1026 } 1053 }
1027#endif 1054#endif
1028} 1055}
1029 1056
1030/*! 1057/*!
1031 \internal 1058 \internal
1032*/ 1059*/
1033bool QPEApplication::raiseAppropriateWindow() 1060bool QPEApplication::raiseAppropriateWindow()
1034{ 1061{
1035 bool r=FALSE; 1062 bool r=FALSE;
1036 // ########## raise()ing main window should raise and set active 1063 // ########## raise()ing main window should raise and set active
1037 // ########## it and then all childen. This belongs in Qt/Embedded 1064 // ########## it and then all childen. This belongs in Qt/Embedded
1038 QWidget *top = d->qpe_main_widget; 1065 QWidget *top = d->qpe_main_widget;
1039 if ( !top ) top =mainWidget(); 1066 if ( !top ) top =mainWidget();
1040 if ( top && d->keep_running ) { 1067 if ( top && d->keep_running ) {
1041 if ( top->isVisible() ) 1068 if ( top->isVisible() )
1042 r = TRUE; 1069 r = TRUE;
1043#ifdef Q_WS_QWS 1070#ifdef Q_WS_QWS
1044 if ( !d->nomaximize ) 1071 if ( !d->nomaximize )
1045 top->showMaximized(); 1072 top->showMaximized();
1046 else 1073 else
1047#endif 1074#endif
1048 top->show(); 1075 top->show();
1049 top->raise(); 1076 top->raise();
1050 top->setActiveWindow(); 1077 top->setActiveWindow();
1051 } 1078 }
1052 QWidget *topm = activeModalWidget(); 1079 QWidget *topm = activeModalWidget();
1053 if ( topm && topm != top ) { 1080 if ( topm && topm != top ) {
1054 topm->show(); 1081 topm->show();
1055 topm->raise(); 1082 topm->raise();
1056 topm->setActiveWindow(); 1083 topm->setActiveWindow();
1057 r = FALSE; 1084 r = FALSE;
1058 } 1085 }
1059 return r; 1086 return r;
1060} 1087}
1061 1088
1062void QPEApplication::pidMessage( const QCString &msg, const QByteArray & data) 1089void QPEApplication::pidMessage( const QCString &msg, const QByteArray & data)
1063{ 1090{
1064#ifdef Q_WS_QWS 1091#ifdef Q_WS_QWS
1065 1092
1066 if ( msg == "quit()" ) { 1093 if ( msg == "quit()" ) {
1067 tryQuit(); 1094 tryQuit();
1068 } else if ( msg == "quitIfInvisible()" ) { 1095 } else if ( msg == "quitIfInvisible()" ) {
1069 if ( d->qpe_main_widget && !d->qpe_main_widget->isVisible() ) 1096 if ( d->qpe_main_widget && !d->qpe_main_widget->isVisible() )
1070 quit(); 1097 quit();
1071 } else if ( msg == "close()" ) { 1098 } else if ( msg == "close()" ) {
1072 hideOrQuit(); 1099 hideOrQuit();
1073 } else if ( msg == "disablePreload()" ) { 1100 } else if ( msg == "disablePreload()" ) {
1074 d->preloaded = FALSE; 1101 d->preloaded = FALSE;
1075 d->keep_running = TRUE; 1102 d->keep_running = TRUE;
1076 /* so that quit will quit */ 1103 /* so that quit will quit */
1077 } else if ( msg == "enablePreload()" ) { 1104 } else if ( msg == "enablePreload()" ) {
1078 d->preloaded = TRUE; 1105 d->preloaded = TRUE;
1079 d->keep_running = TRUE; 1106 d->keep_running = TRUE;
1080 /* so next quit won't quit */ 1107 /* so next quit won't quit */
1081 } else if ( msg == "raise()" ) { 1108 } else if ( msg == "raise()" ) {
1082 d->keep_running = TRUE; 1109 d->keep_running = TRUE;
1083 d->notbusysent = FALSE; 1110 d->notbusysent = FALSE;
1084 raiseAppropriateWindow(); 1111 raiseAppropriateWindow();
1085 } else if ( msg == "flush()" ) { 1112 } else if ( msg == "flush()" ) {
1086 emit flush(); 1113 emit flush();
1087 // we need to tell the desktop 1114 // we need to tell the desktop
1088 QCopEnvelope e( "QPE/Desktop", "flushDone(QString)" ); 1115 QCopEnvelope e( "QPE/Desktop", "flushDone(QString)" );
1089 e << d->appName; 1116 e << d->appName;
1090 } else if ( msg == "reload()" ) { 1117 } else if ( msg == "reload()" ) {
1091 emit reload(); 1118 emit reload();
1092 } else if ( msg == "setDocument(QString)" ) { 1119 } else if ( msg == "setDocument(QString)" ) {
1093 d->keep_running = TRUE; 1120 d->keep_running = TRUE;
1094 QDataStream stream( data, IO_ReadOnly ); 1121 QDataStream stream( data, IO_ReadOnly );
1095 QString doc; 1122 QString doc;
1096 stream >> doc; 1123 stream >> doc;
1097 QWidget *mw = mainWidget(); 1124 QWidget *mw = mainWidget();
1098 if ( !mw ) 1125 if ( !mw )
1099 mw = d->qpe_main_widget; 1126 mw = d->qpe_main_widget;
1100 if ( mw ) 1127 if ( mw )
1101 Global::setDocument( mw, doc ); 1128 Global::setDocument( mw, doc );
1102 } else if ( msg == "nextView()" ) { 1129 } else if ( msg == "nextView()" ) {
1103 if ( raiseAppropriateWindow() ) 1130 if ( raiseAppropriateWindow() )
1104 emit appMessage( msg, data); 1131 emit appMessage( msg, data);
1105 } else { 1132 } else {
1106 emit appMessage( msg, data); 1133 emit appMessage( msg, data);
1107 } 1134 }
1108#endif 1135#endif
1109} 1136}
1110 1137
1111 1138
1112static bool setWidgetCaptionFromAppName( QWidget* /*mw*/, const QString& /*appName*/, const QString& /*appsPath*/ ) 1139static bool setWidgetCaptionFromAppName( QWidget* /*mw*/, const QString& /*appName*/, const QString& /*appsPath*/ )
1113{ 1140{
1114/* 1141/*
1115 // This works but disable it for now until it is safe to apply 1142 // This works but disable it for now until it is safe to apply
1116 // What is does is scan the .desktop files of all the apps for 1143 // What is does is scan the .desktop files of all the apps for
1117 // the applnk that has the corresponding argv[0] as this program 1144 // the applnk that has the corresponding argv[0] as this program
1118 // then it uses the name stored in the .desktop file as the caption 1145 // then it uses the name stored in the .desktop file as the caption
1119 // for the main widget. This saves duplicating translations for 1146 // for the main widget. This saves duplicating translations for
1120 // the app name in the program and in the .desktop files. 1147 // the app name in the program and in the .desktop files.
1121 1148
1122 AppLnkSet apps( appsPath ); 1149 AppLnkSet apps( appsPath );
1123 1150
1124 QList<AppLnk> appsList = apps.children(); 1151 QList<AppLnk> appsList = apps.children();
1125 for ( QListIterator<AppLnk> it(appsList); it.current(); ++it ) { 1152 for ( QListIterator<AppLnk> it(appsList); it.current(); ++it ) {
1126 if ( (*it)->exec() == appName ) { 1153 if ( (*it)->exec() == appName ) {
1127 mw->setCaption( (*it)->name() ); 1154 mw->setCaption( (*it)->name() );
1128 return TRUE; 1155 return TRUE;
1129 } 1156 }
1130 } 1157 }
1131*/ 1158*/
1132 return FALSE; 1159 return FALSE;
1133} 1160}
1134 1161
1135 1162
1136/*! 1163/*!
1137 Sets \a mw as the mainWidget() and shows it. For small windows, 1164 Sets \a mw as the mainWidget() and shows it. For small windows,
1138 consider passing TRUE for \a nomaximize rather than the default FALSE. 1165 consider passing TRUE for \a nomaximize rather than the default FALSE.
1139 1166
1140 \sa showMainDocumentWidget() 1167 \sa showMainDocumentWidget()
1141*/ 1168*/
1142void QPEApplication::showMainWidget( QWidget* mw, bool nomaximize ) 1169void QPEApplication::showMainWidget( QWidget* mw, bool nomaximize )
1143{ 1170{
1144 setWidgetCaptionFromAppName( mw, d->appName, qpeDir() + "apps" ); 1171 setWidgetCaptionFromAppName( mw, d->appName, qpeDir() + "apps" );
1145 1172
1146 d->nomaximize = nomaximize; 1173 d->nomaximize = nomaximize;
1147 d->qpe_main_widget = mw; 1174 d->qpe_main_widget = mw;
1148 d->sendQCopQ(); 1175 d->sendQCopQ();
1149 if ( d->preloaded ) { 1176 if ( d->preloaded ) {
1150 if(d->forceshow) { 1177 if(d->forceshow) {
1151#ifdef Q_WS_QWS 1178#ifdef Q_WS_QWS
1152 if ( !nomaximize ) 1179 if ( !nomaximize )
1153 mw->showMaximized(); 1180 mw->showMaximized();
1154 else 1181 else
1155#endif 1182#endif
1156 mw->show(); 1183 mw->show();
1157 } 1184 }
1158 } else if ( d->keep_running ) { 1185 } else if ( d->keep_running ) {
1159#ifdef Q_WS_QWS 1186#ifdef Q_WS_QWS
1160 if ( !nomaximize ) 1187 if ( !nomaximize )
1161 mw->showMaximized(); 1188 mw->showMaximized();
1162 else 1189 else
1163#endif 1190#endif
1164 mw->show(); 1191 mw->show();
1165 } 1192 }
1166} 1193}
1167 1194
1168/*! 1195/*!
1169 Sets \a mw as the mainWidget() and shows it. For small windows, 1196 Sets \a mw as the mainWidget() and shows it. For small windows,
1170 consider passing TRUE for \a nomaximize rather than the default FALSE. 1197 consider passing TRUE for \a nomaximize rather than the default FALSE.
1171 1198
1172 This calls designates the application as 1199 This calls designates the application as
1173 a \link docwidget.html document-oriented\endlink application. 1200 a \link docwidget.html document-oriented\endlink application.
1174 1201
1175 The \a mw widget must have a slot: setDocument(const QString&). 1202 The \a mw widget must have a slot: setDocument(const QString&).
1176 1203
1177 \sa showMainWidget() 1204 \sa showMainWidget()
1178*/ 1205*/
1179void QPEApplication::showMainDocumentWidget( QWidget* mw, bool nomaximize ) 1206void QPEApplication::showMainDocumentWidget( QWidget* mw, bool nomaximize )
1180{ 1207{
1181 setWidgetCaptionFromAppName( mw, d->appName, qpeDir() + "apps" ); 1208 setWidgetCaptionFromAppName( mw, d->appName, qpeDir() + "apps" );
1182 1209
1183 if ( mw && argc() == 2 ) 1210 if ( mw && argc() == 2 )
1184 Global::setDocument( mw, QString::fromUtf8(argv()[1]) ); 1211 Global::setDocument( mw, QString::fromUtf8(argv()[1]) );
1185 d->nomaximize = nomaximize; 1212 d->nomaximize = nomaximize;
1186 d->qpe_main_widget = mw; 1213 d->qpe_main_widget = mw;
1187 d->sendQCopQ(); 1214 d->sendQCopQ();
1188 if ( d->preloaded ) { 1215 if ( d->preloaded ) {
1189 if(d->forceshow) { 1216 if(d->forceshow) {
1190#ifdef Q_WS_QWS 1217#ifdef Q_WS_QWS
1191 if ( !nomaximize ) 1218 if ( !nomaximize )
1192 mw->showMaximized(); 1219 mw->showMaximized();
1193 else 1220 else
1194#endif 1221#endif
1195 mw->show(); 1222 mw->show();
1196 } 1223 }
1197 } else if ( d->keep_running ) { 1224 } else if ( d->keep_running ) {
1198#ifdef Q_WS_QWS 1225#ifdef Q_WS_QWS
1199 if ( !nomaximize ) 1226 if ( !nomaximize )
1200 mw->showMaximized(); 1227 mw->showMaximized();
1201 else 1228 else
1202#endif 1229#endif
1203 mw->show(); 1230 mw->show();
1204 } 1231 }
1205} 1232}
1206 1233
1207 1234
1208/*! 1235/*!
1209 Sets that the application should continue running after processing 1236 Sets that the application should continue running after processing
1210 qcop messages. Normally if an application is started via a qcop message, 1237 qcop messages. Normally if an application is started via a qcop message,
1211 the application will process the qcop message and then quit. If while 1238 the application will process the qcop message and then quit. If while
1212 processing the qcop message it calls this function, then the application 1239 processing the qcop message it calls this function, then the application
1213 will show and start proper once it has finished processing qcop messages. 1240 will show and start proper once it has finished processing qcop messages.
1214 1241
1215 \sa keepRunning() 1242 \sa keepRunning()
1216*/ 1243*/
1217void QPEApplication::setKeepRunning() 1244void QPEApplication::setKeepRunning()
1218{ 1245{
1219 if ( qApp && qApp->inherits( "QPEApplication" ) ) { 1246 if ( qApp && qApp->inherits( "QPEApplication" ) ) {
1220 QPEApplication *qpeApp = (QPEApplication*)qApp; 1247 QPEApplication *qpeApp = (QPEApplication*)qApp;
1221 qpeApp->d->keep_running = TRUE; 1248 qpeApp->d->keep_running = TRUE;
1222 } 1249 }
1223} 1250}
1224 1251
1225/*! 1252/*!
1226 Returns whether the application will quit after processing the current 1253 Returns whether the application will quit after processing the current
1227 list of qcop messages. 1254 list of qcop messages.
1228 1255
1229 \sa setKeepRunning() 1256 \sa setKeepRunning()
1230*/ 1257*/
1231bool QPEApplication::keepRunning() const 1258bool QPEApplication::keepRunning() const
1232{ 1259{
1233 return d->keep_running; 1260 return d->keep_running;
1234} 1261}
1235 1262
1236/*! 1263/*!
1237 \internal 1264 \internal
1238*/ 1265*/
1239void QPEApplication::internalSetStyle( const QString &style ) 1266void QPEApplication::internalSetStyle( const QString &style )
1240{ 1267{
1241#if QT_VERSION >= 300 1268#if QT_VERSION >= 300
1242 if ( style == "QPE" ) { 1269 if ( style == "QPE" ) {
1243 setStyle( new QPEStyle ); 1270 setStyle( new QPEStyle );
1244 } else { 1271 } else {
1245 QStyle *s = QStyleFactory::create(style); 1272 QStyle *s = QStyleFactory::create(style);
1246 if ( s ) setStyle(s); 1273 if ( s ) setStyle(s);
1247 } 1274 }
1248#else 1275#else
1249 if ( style == "Windows" ) { 1276 if ( style == "Windows" ) {
1250 setStyle( new QWindowsStyle ); 1277 setStyle( new QWindowsStyle );
1251 } else if ( style == "QPE" ) { 1278 } else if ( style == "QPE" ) {
1252 setStyle( new QPEStyle ); 1279 setStyle( new QPEStyle );
1253 } else if ( style == "Light" ) { 1280 } else if ( style == "Light" ) {
1254 setStyle( new LightStyle ); 1281 setStyle( new LightStyle );
1255 } 1282 }
1256#ifndef QT_NO_STYLE_PLATINUM 1283#ifndef QT_NO_STYLE_PLATINUM
1257 else if ( style == "Platinum" ) { 1284 else if ( style == "Platinum" ) {
1258 setStyle( new QPlatinumStyle ); 1285 setStyle( new QPlatinumStyle );
1259 } 1286 }
1260#endif 1287#endif
1261#ifndef QT_NO_STYLE_MOTIF 1288#ifndef QT_NO_STYLE_MOTIF
1262 else if ( style == "Motif" ) { 1289 else if ( style == "Motif" ) {
1263 setStyle( new QMotifStyle ); 1290 setStyle( new QMotifStyle );
1264 } 1291 }
1265#endif 1292#endif
1266#ifndef QT_NO_STYLE_MOTIFPLUS 1293#ifndef QT_NO_STYLE_MOTIFPLUS
1267 else if ( style == "MotifPlus" ) { 1294 else if ( style == "MotifPlus" ) {
1268 setStyle( new QMotifPlusStyle ); 1295 setStyle( new QMotifPlusStyle );
1269 } 1296 }
1270#endif 1297#endif
1271#endif 1298#endif
1272} 1299}
1273 1300
1274/*! 1301/*!
1275 \internal 1302 \internal
1276*/ 1303*/
1277void QPEApplication::prepareForTermination(bool willrestart) 1304void QPEApplication::prepareForTermination(bool willrestart)
1278{ 1305{
1279 if ( willrestart ) { 1306 if ( willrestart ) {
1280 // Draw a big wait icon, the image can be altered in later revisions 1307 // Draw a big wait icon, the image can be altered in later revisions
1281 //QWidget *d = QApplication::desktop(); 1308 //QWidget *d = QApplication::desktop();
1282 QImage img = Resource::loadImage( "launcher/new_wait" ); 1309 QImage img = Resource::loadImage( "launcher/new_wait" );
1283 QPixmap pix; 1310 QPixmap pix;
1284 pix.convertFromImage(img.smoothScale(1*img.width(), 1*img.height())); 1311 pix.convertFromImage(img.smoothScale(1*img.width(), 1*img.height()));
1285 QLabel *lblWait = new QLabel(0, "wait hack!", QWidget::WStyle_Customize | 1312 QLabel *lblWait = new QLabel(0, "wait hack!", QWidget::WStyle_Customize |
1286 QWidget::WStyle_NoBorder | QWidget::WStyle_Tool ); 1313 QWidget::WStyle_NoBorder | QWidget::WStyle_Tool );
1287 lblWait->setPixmap( pix ); 1314 lblWait->setPixmap( pix );
1288 lblWait->setAlignment( QWidget::AlignCenter ); 1315 lblWait->setAlignment( QWidget::AlignCenter );
1289 lblWait->show(); 1316 lblWait->show();
1290 lblWait->showMaximized(); 1317 lblWait->showMaximized();
1291 } 1318 }
1292#ifndef SINGLE_APP 1319#ifndef SINGLE_APP
1293 { QCopEnvelope envelope("QPE/System", "forceQuit()"); } 1320 { QCopEnvelope envelope("QPE/System", "forceQuit()"); }
1294 processEvents(); // ensure the message goes out. 1321 processEvents(); // ensure the message goes out.
1295 sleep(1); // You have 1 second to comply. 1322 sleep(1); // You have 1 second to comply.
1296#endif 1323#endif
1297} 1324}
1298 1325
1299/*! 1326/*!
1300 \internal 1327 \internal
1301*/ 1328*/
1302void QPEApplication::shutdown() 1329void QPEApplication::shutdown()
1303{ 1330{
1304 // Implement in server's QPEApplication subclass 1331 // Implement in server's QPEApplication subclass
1305} 1332}
1306 1333
1307/*! 1334/*!
1308 \internal 1335 \internal
1309*/ 1336*/
1310void QPEApplication::restart() 1337void QPEApplication::restart()
1311{ 1338{
1312 // Implement in server's QPEApplication subclass 1339 // Implement in server's QPEApplication subclass
1313} 1340}
1314 1341
1315static QPtrDict<void>* stylusDict=0; 1342static QPtrDict<void>* stylusDict=0;
1316static void createDict() 1343static void createDict()
1317{ 1344{
1318 if ( !stylusDict ) 1345 if ( !stylusDict )
1319 stylusDict = new QPtrDict<void>; 1346 stylusDict = new QPtrDict<void>;
1320} 1347}
1321 1348
1322/*! 1349/*!
1323 Returns the current StylusMode for \a w. 1350 Returns the current StylusMode for \a w.
1324 1351
1325 \sa setStylusOperation() 1352 \sa setStylusOperation()
1326*/ 1353*/
1327QPEApplication::StylusMode QPEApplication::stylusOperation( QWidget* w ) 1354QPEApplication::StylusMode QPEApplication::stylusOperation( QWidget* w )
1328{ 1355{
1329 if ( stylusDict ) 1356 if ( stylusDict )
1330 return (StylusMode)(int)stylusDict->find(w); 1357 return (StylusMode)(int)stylusDict->find(w);
1331 return LeftOnly; 1358 return LeftOnly;
1332} 1359}
1333 1360
1334/*! 1361/*!
1335 \enum QPEApplication::StylusMode 1362 \enum QPEApplication::StylusMode
1336 1363
1337 \value LeftOnly the stylus only generates LeftButton 1364 \value LeftOnly the stylus only generates LeftButton
1338 events (the default). 1365 events (the default).
1339 \value RightOnHold the stylus generates RightButton events 1366 \value RightOnHold the stylus generates RightButton events
1340 if the user uses the press-and-hold gesture. 1367 if the user uses the press-and-hold gesture.
1341 1368
1342 See setStylusOperation(). 1369 See setStylusOperation().
1343*/ 1370*/
1344 1371
1345/*! 1372/*!
1346 Causes \a w to receive mouse events according to \a mode. 1373 Causes \a w to receive mouse events according to \a mode.
1347 1374
1348 \sa stylusOperation() 1375 \sa stylusOperation()
1349*/ 1376*/
1350void QPEApplication::setStylusOperation( QWidget* w, StylusMode mode ) 1377void QPEApplication::setStylusOperation( QWidget* w, StylusMode mode )
1351{ 1378{
1352 createDict(); 1379 createDict();
1353 if ( mode == LeftOnly ) { 1380 if ( mode == LeftOnly ) {
1354 stylusDict->remove(w); 1381 stylusDict->remove(w);
1355 w->removeEventFilter(qApp); 1382 w->removeEventFilter(qApp);
1356 } else { 1383 } else {
1357 stylusDict->insert(w,(void*)mode); 1384 stylusDict->insert(w,(void*)mode);
1358 connect(w,SIGNAL(destroyed()),qApp,SLOT(removeSenderFromStylusDict())); 1385 connect(w,SIGNAL(destroyed()),qApp,SLOT(removeSenderFromStylusDict()));
1359 w->installEventFilter(qApp); 1386 w->installEventFilter(qApp);
1360 } 1387 }
1361} 1388}
1362 1389
1363 1390
1364/*! 1391/*!
1365 \reimp 1392 \reimp
1366*/ 1393*/
1367bool QPEApplication::eventFilter( QObject *o, QEvent *e ) 1394bool QPEApplication::eventFilter( QObject *o, QEvent *e )
1368{ 1395{
1369 if ( stylusDict && e->type() >= QEvent::MouseButtonPress && e->type() <= QEvent::MouseMove ) { 1396 if ( stylusDict && e->type() >= QEvent::MouseButtonPress && e->type() <= QEvent::MouseMove ) {
1370 QMouseEvent* me = (QMouseEvent*)e; 1397 QMouseEvent* me = (QMouseEvent*)e;
1371 if ( me->button() == LeftButton ) { 1398 if ( me->button() == LeftButton ) {
1372 StylusMode mode = (StylusMode)(int)stylusDict->find(o); 1399 StylusMode mode = (StylusMode)(int)stylusDict->find(o);
1373 switch (mode) { 1400 switch (mode) {
1374 case RightOnHold: 1401 case RightOnHold:
1375 switch ( me->type() ) { 1402 switch ( me->type() ) {
1376 case QEvent::MouseButtonPress: 1403 case QEvent::MouseButtonPress:
1377 d->presstimer = startTimer(500); // #### pref. 1404 d->presstimer = startTimer(500); // #### pref.
1378 d->presswidget = (QWidget*)o; 1405 d->presswidget = (QWidget*)o;
1379 d->presspos = me->pos(); 1406 d->presspos = me->pos();
1380 d->rightpressed = FALSE; 1407 d->rightpressed = FALSE;
1381 break; 1408 break;
1382 case QEvent::MouseButtonRelease: 1409 case QEvent::MouseButtonRelease:
1383 if ( d->presstimer ) { 1410 if ( d->presstimer ) {
1384 killTimer(d->presstimer); 1411 killTimer(d->presstimer);
1385 d->presstimer = 0; 1412 d->presstimer = 0;
1386 } 1413 }
1387 if ( d->rightpressed && d->presswidget ) { 1414 if ( d->rightpressed && d->presswidget ) {
1388 // Right released 1415 // Right released
1389 postEvent( d->presswidget, 1416 postEvent( d->presswidget,
1390 new QMouseEvent( QEvent::MouseButtonRelease, me->pos(), 1417 new QMouseEvent( QEvent::MouseButtonRelease, me->pos(),
1391 RightButton, LeftButton+RightButton ) ); 1418 RightButton, LeftButton+RightButton ) );
1392 // Left released, off-widget 1419 // Left released, off-widget
1393 postEvent( d->presswidget, 1420 postEvent( d->presswidget,
1394 new QMouseEvent( QEvent::MouseMove, QPoint(-1,-1), 1421 new QMouseEvent( QEvent::MouseMove, QPoint(-1,-1),
1395 LeftButton, LeftButton ) ); 1422 LeftButton, LeftButton ) );
1396 postEvent( d->presswidget, 1423 postEvent( d->presswidget,
1397 new QMouseEvent( QEvent::MouseButtonRelease, QPoint(-1,-1), 1424 new QMouseEvent( QEvent::MouseButtonRelease, QPoint(-1,-1),
1398 LeftButton, LeftButton ) ); 1425 LeftButton, LeftButton ) );
1399 d->rightpressed = FALSE; 1426 d->rightpressed = FALSE;
1400 return TRUE; // don't send the real Left release 1427 return TRUE; // don't send the real Left release
1401 } 1428 }
1402 break; 1429 break;
1403 default: 1430 default:
1404 break; 1431 break;
1405 } 1432 }
1406 break; 1433 break;
1407 default: 1434 default:
1408 ; 1435 ;
1409 } 1436 }
1410 } 1437 }
1411 } else if ( e->type() == QEvent::KeyPress || e->type() == QEvent::KeyRelease ) { 1438 } else if ( e->type() == QEvent::KeyPress || e->type() == QEvent::KeyRelease ) {
1412 QKeyEvent *ke = (QKeyEvent *)e; 1439 QKeyEvent *ke = (QKeyEvent *)e;
1413 if ( ke->key() == Key_Enter ) { 1440 if ( ke->key() == Key_Enter ) {
1414 if ( o->isA( "QRadioButton" ) || o->isA( "QCheckBox" ) ) { 1441 if ( o->isA( "QRadioButton" ) || o->isA( "QCheckBox" ) ) {
1415 postEvent( o, new QKeyEvent( e->type(), Key_Space, ' ', 1442 postEvent( o, new QKeyEvent( e->type(), Key_Space, ' ',
1416 ke->state(), " ", ke->isAutoRepeat(), ke->count() ) ); 1443 ke->state(), " ", ke->isAutoRepeat(), ke->count() ) );
1417 return TRUE; 1444 return TRUE;
1418 } 1445 }
1419 } 1446 }
1420 } 1447 }
1421 1448
1422 return FALSE; 1449 return FALSE;
1423} 1450}
1424 1451
1425/*! 1452/*!
1426 \reimp 1453 \reimp
1427*/ 1454*/
1428void QPEApplication::timerEvent( QTimerEvent *e ) 1455void QPEApplication::timerEvent( QTimerEvent *e )
1429{ 1456{
1430 if ( e->timerId() == d->presstimer && d->presswidget ) { 1457 if ( e->timerId() == d->presstimer && d->presswidget ) {
1431 // Right pressed 1458 // Right pressed
1432 postEvent( d->presswidget, 1459 postEvent( d->presswidget,
1433 new QMouseEvent( QEvent::MouseButtonPress, d->presspos, 1460 new QMouseEvent( QEvent::MouseButtonPress, d->presspos,
1434 RightButton, LeftButton ) ); 1461 RightButton, LeftButton ) );
1435 killTimer( d->presstimer ); 1462 killTimer( d->presstimer );
1436 d->presstimer = 0; 1463 d->presstimer = 0;
1437 d->rightpressed = TRUE; 1464 d->rightpressed = TRUE;
1438 } 1465 }
1439} 1466}
1440 1467
1441void QPEApplication::removeSenderFromStylusDict() 1468void QPEApplication::removeSenderFromStylusDict()
1442{ 1469{
1443 stylusDict->remove((void*)sender()); 1470 stylusDict->remove((void*)sender());
1444 if ( d->presswidget == sender() ) 1471 if ( d->presswidget == sender() )
1445 d->presswidget = 0; 1472 d->presswidget = 0;
1446} 1473}
1447 1474
1448/*! 1475/*!
1449 \internal 1476 \internal
1450*/ 1477*/
1451bool QPEApplication::keyboardGrabbed() const 1478bool QPEApplication::keyboardGrabbed() const
1452{ 1479{
1453 return d->kbgrabber; 1480 return d->kbgrabber;
1454} 1481}
1455 1482
1456 1483
1457/*! 1484/*!
1458 Reverses the effect of grabKeyboard(). This is called automatically 1485 Reverses the effect of grabKeyboard(). This is called automatically
1459 on program exit. 1486 on program exit.
1460*/ 1487*/
1461void QPEApplication::ungrabKeyboard() 1488void QPEApplication::ungrabKeyboard()
1462{ 1489{
1463 QPEApplicationData* d = ((QPEApplication*)qApp)->d; 1490 QPEApplicationData* d = ((QPEApplication*)qApp)->d;
1464 if ( d->kbgrabber == 2 ) { 1491 if ( d->kbgrabber == 2 ) {
1465 QCopEnvelope e("QPE/System", "grabKeyboard(QString)" ); 1492 QCopEnvelope e("QPE/System", "grabKeyboard(QString)" );
1466 e << QString::null; 1493 e << QString::null;
1467 d->kbregrab = FALSE; 1494 d->kbregrab = FALSE;
1468 d->kbgrabber = 0; 1495 d->kbgrabber = 0;
1469 } 1496 }
1470} 1497}
1471 1498
1472/*! 1499/*!
1473 Grabs the keyboard such that the system's application launching 1500 Grabs the keyboard such that the system's application launching
1474 keys no longer work, and instead they are receivable by this 1501 keys no longer work, and instead they are receivable by this
1475 application. 1502 application.
1476 1503
1477 \sa ungrabKeyboard() 1504 \sa ungrabKeyboard()
1478*/ 1505*/
1479void QPEApplication::grabKeyboard() 1506void QPEApplication::grabKeyboard()
1480{ 1507{
1481 QPEApplicationData* d = ((QPEApplication*)qApp)->d; 1508 QPEApplicationData* d = ((QPEApplication*)qApp)->d;
1482 if ( qApp->type() == QApplication::GuiServer ) 1509 if ( qApp->type() == QApplication::GuiServer )
1483 d->kbgrabber = 0; 1510 d->kbgrabber = 0;
1484 else { 1511 else {
1485 QCopEnvelope e("QPE/System", "grabKeyboard(QString)" ); 1512 QCopEnvelope e("QPE/System", "grabKeyboard(QString)" );
1486 e << d->appName; 1513 e << d->appName;
1487 d->kbgrabber = 2; // me 1514 d->kbgrabber = 2; // me
1488 } 1515 }
1489} 1516}
1490 1517
1491/*! 1518/*!
1492 \reimp 1519 \reimp
1493*/ 1520*/
1494int QPEApplication::exec() 1521int QPEApplication::exec()
1495{ 1522{
1496 d->sendQCopQ(); 1523 d->sendQCopQ();
1497 if ( d->keep_running) 1524 if ( d->keep_running)
1498 //|| d->qpe_main_widget && d->qpe_main_widget->isVisible() ) 1525 //|| d->qpe_main_widget && d->qpe_main_widget->isVisible() )
1499 return QApplication::exec(); 1526 return QApplication::exec();
1500 1527
1501 { 1528 {
1502 QCopEnvelope e("QPE/System", "closing(QString)" ); 1529 QCopEnvelope e("QPE/System", "closing(QString)" );
1503 e << d->appName; 1530 e << d->appName;
1504 } 1531 }
1505 processEvents(); 1532 processEvents();
1506 return 0; 1533 return 0;
1507} 1534}
1508 1535
1509/*! 1536/*!
1510 \internal 1537 \internal
1511 External request for application to quit. Quits if possible without 1538 External request for application to quit. Quits if possible without
1512 loosing state. 1539 loosing state.
1513*/ 1540*/
1514void QPEApplication::tryQuit() 1541void QPEApplication::tryQuit()
1515{ 1542{
1516 if ( activeModalWidget() || strcmp( argv()[0], "embeddedkonsole") == 0 ) 1543 if ( activeModalWidget() || strcmp( argv()[0], "embeddedkonsole") == 0 )
1517 return; // Inside modal loop or konsole. Too hard to save state. 1544 return; // Inside modal loop or konsole. Too hard to save state.
1518 { 1545 {
1519 QCopEnvelope e("QPE/System", "closing(QString)" ); 1546 QCopEnvelope e("QPE/System", "closing(QString)" );
1520 e << d->appName; 1547 e << d->appName;
1521 } 1548 }
1522 processEvents(); 1549 processEvents();
1523 1550
1524 quit(); 1551 quit();
1525} 1552}
1526 1553
1527/*! 1554/*!
1528 \internal 1555 \internal
1529 User initiated quit. Makes the window 'Go Away'. If preloaded this means 1556 User initiated quit. Makes the window 'Go Away'. If preloaded this means
1530 hiding the window. If not it means quitting the application. 1557 hiding the window. If not it means quitting the application.
1531 As this is user initiated we don't need to check state. 1558 As this is user initiated we don't need to check state.
1532*/ 1559*/
1533void QPEApplication::hideOrQuit() 1560void QPEApplication::hideOrQuit()
1534{ 1561{
1535 // notify of our demise :) 1562 // notify of our demise :)
1536 { 1563 {
1537 QCopEnvelope e("QPE/System", "closing(QString)" ); 1564 QCopEnvelope e("QPE/System", "closing(QString)" );
1538 e << d->appName; 1565 e << d->appName;
1539 } 1566 }
1540 processEvents(); 1567 processEvents();
1541 if ( d->preloaded && d->qpe_main_widget ) 1568 if ( d->preloaded && d->qpe_main_widget )
1542 d->qpe_main_widget->hide(); 1569 d->qpe_main_widget->hide();
1543 else 1570 else
1544 quit(); 1571 quit();
1545} 1572}
1546 1573
1547#if defined(QT_QWS_IPAQ) || defined(QT_QWS_EBX) 1574#if defined(QT_QWS_IPAQ) || defined(QT_QWS_EBX)
1548 1575
1549// The libraries with the skiff package (and possibly others) have 1576// The libraries with the skiff package (and possibly others) have
1550// completely useless implementations of builtin new and delete that 1577// completely useless implementations of builtin new and delete that
1551// use about 50% of your CPU. Here we revert to the simple libc 1578// use about 50% of your CPU. Here we revert to the simple libc
1552// functions. 1579// functions.
1553 1580
1554void* operator new[](size_t size) 1581void* operator new[](size_t size)
1555{ 1582{
1556 return malloc(size); 1583 return malloc(size);
1557} 1584}
1558 1585
1559void* operator new(size_t size) 1586void* operator new(size_t size)
1560{ 1587{
1561 return malloc(size); 1588 return malloc(size);
1562} 1589}
1563 1590
1564void operator delete[](void* p) 1591void operator delete[](void* p)
1565{ 1592{
1566 free(p); 1593 free(p);
1567} 1594}
1568 1595
1569void operator delete[](void* p, size_t /*size*/) 1596void operator delete[](void* p, size_t /*size*/)
1570{ 1597{
1571 free(p); 1598 free(p);
1572} 1599}
1573 1600
1574void operator delete(void* p) 1601void operator delete(void* p)
1575{ 1602{
1576 free(p); 1603 free(p);
1577} 1604}
1578 1605
1579void operator delete(void* p, size_t /*size*/) 1606void operator delete(void* p, size_t /*size*/)
1580{ 1607{
1581 free(p); 1608 free(p);
1582} 1609}
1583 1610
1584#endif 1611#endif
1585 1612
1586#if ( QT_VERSION <= 230 ) && !defined(SINGLE_APP) 1613#if ( QT_VERSION <= 230 ) && !defined(SINGLE_APP)
1587#include <qwidgetlist.h> 1614#include <qwidgetlist.h>
1588#include <qgfx_qws.h> 1615#include <qgfx_qws.h>
1589extern QRect qt_maxWindowRect; 1616extern QRect qt_maxWindowRect;
1590void qt_setMaxWindowRect(const QRect& r) 1617void qt_setMaxWindowRect(const QRect& r)
1591{ 1618{
1592 qt_maxWindowRect = qt_screen->mapFromDevice(r, 1619 qt_maxWindowRect = qt_screen->mapFromDevice(r,
1593 qt_screen->mapToDevice(QSize(qt_screen->width(),qt_screen->height()))); 1620 qt_screen->mapToDevice(QSize(qt_screen->width(),qt_screen->height())));
1594 // Re-resize any maximized windows 1621 // Re-resize any maximized windows
1595 QWidgetList* l = QApplication::topLevelWidgets(); 1622 QWidgetList* l = QApplication::topLevelWidgets();
1596 if ( l ) { 1623 if ( l ) {
1597 QWidget *w = l->first(); 1624 QWidget *w = l->first();
1598 while ( w ) { 1625 while ( w ) {
1599 if ( w->isVisible() && w->isMaximized() ) 1626 if ( w->isVisible() && w->isMaximized() )
1600 { 1627 {
1601 w->showMaximized(); 1628 w->showMaximized();
1602 } 1629 }
1603 w = l->next(); 1630 w = l->next();
1604 } 1631 }
1605 delete l; 1632 delete l;
1606 } 1633 }
1607} 1634}
1608#endif 1635#endif