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,1128 +1,1155 @@
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;