summaryrefslogtreecommitdiff
authorar <ar>2004-04-19 19:38:01 (UTC)
committer ar <ar>2004-04-19 19:38:01 (UTC)
commita57416ce6dc62bfd2b57d87434c04417ad23cbc5 (patch) (unidiff)
tree183a53a52327a2fe826203bae06ec1a95eb4f5c1
parent23edaa3c2240ae3792b507acf55996660c048336 (diff)
downloadopie-a57416ce6dc62bfd2b57d87434c04417ad23cbc5.zip
opie-a57416ce6dc62bfd2b57d87434c04417ad23cbc5.tar.gz
opie-a57416ce6dc62bfd2b57d87434c04417ad23cbc5.tar.bz2
- BigScreen: show MainWidget not maximized on big screens
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--library/qpeapplication.cpp13
1 files changed, 1 insertions, 12 deletions
diff --git a/library/qpeapplication.cpp b/library/qpeapplication.cpp
index 755fb19..cf76000 100644
--- a/library/qpeapplication.cpp
+++ b/library/qpeapplication.cpp
@@ -1,574 +1,563 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. 2** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of the Qtopia Environment. 4** This file is part of the Qtopia Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19*/ 19*/
20#define QTOPIA_INTERNAL_LANGLIST 20#define QTOPIA_INTERNAL_LANGLIST
21#include <stdlib.h> 21#include <stdlib.h>
22#include <unistd.h> 22#include <unistd.h>
23#ifndef Q_OS_MACX 23#ifndef Q_OS_MACX
24#include <linux/limits.h> // needed for some toolchains (PATH_MAX) 24#include <linux/limits.h> // needed for some toolchains (PATH_MAX)
25#endif 25#endif
26#include <qfile.h> 26#include <qfile.h>
27#include <qqueue.h> 27#include <qqueue.h>
28#ifdef Q_WS_QWS 28#ifdef Q_WS_QWS
29#ifndef QT_NO_COP 29#ifndef QT_NO_COP
30#if QT_VERSION <= 231 30#if QT_VERSION <= 231
31#define private public 31#define private public
32#define sendLocally processEvent 32#define sendLocally processEvent
33#include "qcopenvelope_qws.h" 33#include "qcopenvelope_qws.h"
34#undef private 34#undef private
35#else 35#else
36#include "qcopenvelope_qws.h" 36#include "qcopenvelope_qws.h"
37#endif 37#endif
38#endif 38#endif
39#include <qwindowsystem_qws.h> 39#include <qwindowsystem_qws.h>
40#endif 40#endif
41#include <qtextstream.h> 41#include <qtextstream.h>
42#include <qpalette.h> 42#include <qpalette.h>
43#include <qbuffer.h> 43#include <qbuffer.h>
44#include <qptrdict.h> 44#include <qptrdict.h>
45#include <qregexp.h> 45#include <qregexp.h>
46#include <qdir.h> 46#include <qdir.h>
47#include <qlabel.h> 47#include <qlabel.h>
48#include <qdialog.h> 48#include <qdialog.h>
49#include <qdragobject.h> 49#include <qdragobject.h>
50#include <qtextcodec.h> 50#include <qtextcodec.h>
51#include <qevent.h> 51#include <qevent.h>
52#include <qtooltip.h> 52#include <qtooltip.h>
53#include <qsignal.h> 53#include <qsignal.h>
54#include <qmainwindow.h> 54#include <qmainwindow.h>
55#include <qwidgetlist.h> 55#include <qwidgetlist.h>
56#include <qpixmapcache.h> 56#include <qpixmapcache.h>
57 57
58#if defined(Q_WS_QWS) && !defined(QT_NO_COP) 58#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
59#define QTOPIA_INTERNAL_INITAPP 59#define QTOPIA_INTERNAL_INITAPP
60#include "qpeapplication.h" 60#include "qpeapplication.h"
61#include "qpestyle.h" 61#include "qpestyle.h"
62#include "styleinterface.h" 62#include "styleinterface.h"
63#if QT_VERSION >= 300 63#if QT_VERSION >= 300
64#include <qstylefactory.h> 64#include <qstylefactory.h>
65#else 65#else
66#include <qplatinumstyle.h> 66#include <qplatinumstyle.h>
67#include <qwindowsstyle.h> 67#include <qwindowsstyle.h>
68#include <qmotifstyle.h> 68#include <qmotifstyle.h>
69#include <qmotifplusstyle.h> 69#include <qmotifplusstyle.h>
70#include "lightstyle.h" 70#include "lightstyle.h"
71 71
72#include <qpe/qlibrary.h> 72#include <qpe/qlibrary.h>
73#endif 73#endif
74#include "global.h" 74#include "global.h"
75#include "resource.h" 75#include "resource.h"
76#if QT_VERSION <= 230 && defined(QT_NO_CODECS) 76#if QT_VERSION <= 230 && defined(QT_NO_CODECS)
77#include "qutfcodec.h" 77#include "qutfcodec.h"
78#endif 78#endif
79#include "config.h" 79#include "config.h"
80#include "network.h" 80#include "network.h"
81#ifdef QWS 81#ifdef QWS
82#include "fontmanager.h" 82#include "fontmanager.h"
83#endif 83#endif
84 84
85#include "alarmserver.h" 85#include "alarmserver.h"
86#include "applnk.h" 86#include "applnk.h"
87#include "qpemenubar.h" 87#include "qpemenubar.h"
88#include "textcodecinterface.h" 88#include "textcodecinterface.h"
89#include "imagecodecinterface.h" 89#include "imagecodecinterface.h"
90 90
91#include <unistd.h> 91#include <unistd.h>
92#include <sys/file.h> 92#include <sys/file.h>
93#include <sys/ioctl.h> 93#include <sys/ioctl.h>
94#ifndef QT_NO_SOUND 94#ifndef QT_NO_SOUND
95#include <sys/soundcard.h> 95#include <sys/soundcard.h>
96#endif 96#endif
97#include "qt_override_p.h" 97#include "qt_override_p.h"
98 98
99 99
100class QPEApplicationData 100class QPEApplicationData
101{ 101{
102public: 102public:
103 QPEApplicationData ( ) 103 QPEApplicationData ( )
104 : presstimer( 0 ), presswidget( 0 ), rightpressed( false ), kbgrabbed( false ), 104 : presstimer( 0 ), presswidget( 0 ), rightpressed( false ), kbgrabbed( false ),
105 notbusysent( false ), preloaded( false ), forceshow( false ), nomaximize( false ), 105 notbusysent( false ), preloaded( false ), forceshow( false ), nomaximize( false ),
106 keep_running( true ), qcopQok( false ), qpe_main_widget( 0 ) 106 keep_running( true ), qcopQok( false ), qpe_main_widget( 0 )
107 107
108 {} 108 {}
109 109
110 int presstimer; 110 int presstimer;
111 QWidget* presswidget; 111 QWidget* presswidget;
112 QPoint presspos; 112 QPoint presspos;
113 113
114 bool rightpressed : 1; 114 bool rightpressed : 1;
115 bool kbgrabbed : 1; 115 bool kbgrabbed : 1;
116 bool notbusysent : 1; 116 bool notbusysent : 1;
117 bool preloaded : 1; 117 bool preloaded : 1;
118 bool forceshow : 1; 118 bool forceshow : 1;
119 bool nomaximize : 1; 119 bool nomaximize : 1;
120 bool keep_running : 1; 120 bool keep_running : 1;
121 bool qcopQok : 1; 121 bool qcopQok : 1;
122 122
123 123
124 QStringList langs; 124 QStringList langs;
125 QString appName; 125 QString appName;
126 struct QCopRec 126 struct QCopRec
127 { 127 {
128 QCopRec( const QCString &ch, const QCString &msg, 128 QCopRec( const QCString &ch, const QCString &msg,
129 const QByteArray &d ) : 129 const QByteArray &d ) :
130 channel( ch ), message( msg ), data( d ) 130 channel( ch ), message( msg ), data( d )
131 { } 131 { }
132 132
133 QCString channel; 133 QCString channel;
134 QCString message; 134 QCString message;
135 QByteArray data; 135 QByteArray data;
136 }; 136 };
137 QWidget* qpe_main_widget; 137 QWidget* qpe_main_widget;
138 QGuardedPtr<QWidget> lastraised; 138 QGuardedPtr<QWidget> lastraised;
139 QQueue<QCopRec> qcopq; 139 QQueue<QCopRec> qcopq;
140 QString styleName; 140 QString styleName;
141 QString decorationName; 141 QString decorationName;
142 142
143 void enqueueQCop( const QCString &ch, const QCString &msg, 143 void enqueueQCop( const QCString &ch, const QCString &msg,
144 const QByteArray &data ) 144 const QByteArray &data )
145 { 145 {
146 qcopq.enqueue( new QCopRec( ch, msg, data ) ); 146 qcopq.enqueue( new QCopRec( ch, msg, data ) );
147 } 147 }
148 void sendQCopQ() 148 void sendQCopQ()
149 { 149 {
150 if (!qcopQok ) 150 if (!qcopQok )
151 return; 151 return;
152 152
153 QCopRec * r; 153 QCopRec * r;
154 154
155 while((r=qcopq.dequeue())) { 155 while((r=qcopq.dequeue())) {
156 // remove from queue before sending... 156 // remove from queue before sending...
157 // event loop can come around again before getting 157 // event loop can come around again before getting
158 // back from sendLocally 158 // back from sendLocally
159#ifndef QT_NO_COP 159#ifndef QT_NO_COP
160 QCopChannel::sendLocally( r->channel, r->message, r->data ); 160 QCopChannel::sendLocally( r->channel, r->message, r->data );
161#endif 161#endif
162 162
163 delete r; 163 delete r;
164 } 164 }
165 } 165 }
166 static void show_mx(QWidget* mw, bool nomaximize, const QString & = QString::null ) 166 static void show_mx(QWidget* mw, bool nomaximize, const QString & = QString::null )
167 { 167 {
168 168
169 // ugly hack, remove that later after finding a sane solution 169 // ugly hack, remove that later after finding a sane solution
170 // Addendum: Only Sharp currently has models with high resolution but (physically) small displays, 170 // Addendum: Only Sharp currently has models with high resolution but (physically) small displays,
171 // so this is only useful if QT_QWS_SIMPAD is NOT defined. E.g. SIMpad has 800x600 but has 171 // so this is only useful if QT_QWS_SIMPAD is NOT defined. E.g. SIMpad has 800x600 but has
172 // a (physically) large enough display to use the small icons 172 // a (physically) large enough display to use the small icons
173#if defined(OPIE_HIGH_RES_SMALL_PHY) 173#if defined(OPIE_HIGH_RES_SMALL_PHY)
174 if ( QPEApplication::desktop() ->width() >= 600 && ( mw->inherits("QMainWindow") || mw->isA("QMainWindow") ) ) { 174 if ( QPEApplication::desktop() ->width() >= 600 && ( mw->inherits("QMainWindow") || mw->isA("QMainWindow") ) ) {
175 ( ( QMainWindow* ) mw )->setUsesBigPixmaps( true ); 175 ( ( QMainWindow* ) mw )->setUsesBigPixmaps( true );
176 } 176 }
177#endif 177#endif
178 178
179 if ( mw->layout() && mw->inherits("QDialog") ) { 179 QPEApplication::showWidget( mw, nomaximize );
180 QPEApplication::showDialog((QDialog*)mw, nomaximize);
181 }
182 else {
183#ifdef Q_WS_QWS
184 if ( !nomaximize )
185 mw->showMaximized();
186 else
187#endif
188
189 mw->show();
190 }
191 } 180 }
192 static bool setWidgetCaptionFromAppName( QWidget* /*mw*/, const QString& /*appName*/, const QString& /*appsPath*/ ) 181 static bool setWidgetCaptionFromAppName( QWidget* /*mw*/, const QString& /*appName*/, const QString& /*appsPath*/ )
193 { 182 {
194 /* 183 /*
195 // This works but disable it for now until it is safe to apply 184 // This works but disable it for now until it is safe to apply
196 // What is does is scan the .desktop files of all the apps for 185 // What is does is scan the .desktop files of all the apps for
197 // the applnk that has the corresponding argv[0] as this program 186 // the applnk that has the corresponding argv[0] as this program
198 // then it uses the name stored in the .desktop file as the caption 187 // then it uses the name stored in the .desktop file as the caption
199 // for the main widget. This saves duplicating translations for 188 // for the main widget. This saves duplicating translations for
200 // the app name in the program and in the .desktop files. 189 // the app name in the program and in the .desktop files.
201 190
202 AppLnkSet apps( appsPath ); 191 AppLnkSet apps( appsPath );
203 192
204 QList<AppLnk> appsList = apps.children(); 193 QList<AppLnk> appsList = apps.children();
205 for ( QListIterator<AppLnk> it(appsList); it.current(); ++it ) { 194 for ( QListIterator<AppLnk> it(appsList); it.current(); ++it ) {
206 if ( (*it)->exec() == appName ) { 195 if ( (*it)->exec() == appName ) {
207 mw->setCaption( (*it)->name() ); 196 mw->setCaption( (*it)->name() );
208 return TRUE; 197 return TRUE;
209 } 198 }
210 } 199 }
211 */ 200 */
212 return FALSE; 201 return FALSE;
213 } 202 }
214 203
215 204
216 void show(QWidget* mw, bool nomax) 205 void show(QWidget* mw, bool nomax)
217 { 206 {
218 setWidgetCaptionFromAppName( mw, appName, QPEApplication::qpeDir() + "apps" ); 207 setWidgetCaptionFromAppName( mw, appName, QPEApplication::qpeDir() + "apps" );
219 nomaximize = nomax; 208 nomaximize = nomax;
220 qpe_main_widget = mw; 209 qpe_main_widget = mw;
221 qcopQok = TRUE; 210 qcopQok = TRUE;
222#ifndef QT_NO_COP 211#ifndef QT_NO_COP
223 212
224 sendQCopQ(); 213 sendQCopQ();
225#endif 214#endif
226 215
227 if ( preloaded ) { 216 if ( preloaded ) {
228 if (forceshow) 217 if (forceshow)
229 show_mx(mw, nomax); 218 show_mx(mw, nomax);
230 } 219 }
231 else if ( keep_running ) { 220 else if ( keep_running ) {
232 show_mx(mw, nomax); 221 show_mx(mw, nomax);
233 } 222 }
234 } 223 }
235 224
236 void loadTextCodecs() 225 void loadTextCodecs()
237 { 226 {
238 QString path = QPEApplication::qpeDir() + "/plugins/textcodecs"; 227 QString path = QPEApplication::qpeDir() + "/plugins/textcodecs";
239#ifdef Q_OS_MACX 228#ifdef Q_OS_MACX
240 QDir dir( path, "lib*.dylib" ); 229 QDir dir( path, "lib*.dylib" );
241#else 230#else
242 QDir dir( path, "lib*.so" ); 231 QDir dir( path, "lib*.so" );
243#endif 232#endif
244 QStringList list; 233 QStringList list;
245 if ( dir. exists ( )) 234 if ( dir. exists ( ))
246 list = dir.entryList(); 235 list = dir.entryList();
247 QStringList::Iterator it; 236 QStringList::Iterator it;
248 for ( it = list.begin(); it != list.end(); ++it ) { 237 for ( it = list.begin(); it != list.end(); ++it ) {
249 TextCodecInterface *iface = 0; 238 TextCodecInterface *iface = 0;
250 QLibrary *lib = new QLibrary( path + "/" + *it ); 239 QLibrary *lib = new QLibrary( path + "/" + *it );
251 if ( lib->queryInterface( IID_QtopiaTextCodec, (QUnknownInterface**)&iface ) == QS_OK && iface ) { 240 if ( lib->queryInterface( IID_QtopiaTextCodec, (QUnknownInterface**)&iface ) == QS_OK && iface ) {
252 QValueList<int> mibs = iface->mibEnums(); 241 QValueList<int> mibs = iface->mibEnums();
253 for (QValueList<int>::ConstIterator i = mibs.begin(); i != mibs.end(); ++i) { 242 for (QValueList<int>::ConstIterator i = mibs.begin(); i != mibs.end(); ++i) {
254 (void)iface->createForMib(*i); 243 (void)iface->createForMib(*i);
255 // ### it exists now; need to remember if we can delete it 244 // ### it exists now; need to remember if we can delete it
256 } 245 }
257 } 246 }
258 else { 247 else {
259 lib->unload(); 248 lib->unload();
260 delete lib; 249 delete lib;
261 } 250 }
262 } 251 }
263 } 252 }
264 253
265 void loadImageCodecs() 254 void loadImageCodecs()
266 { 255 {
267 QString path = QPEApplication::qpeDir() + "/plugins/imagecodecs"; 256 QString path = QPEApplication::qpeDir() + "/plugins/imagecodecs";
268#ifdef Q_OS_MACX 257#ifdef Q_OS_MACX
269 QDir dir( path, "lib*.dylib" ); 258 QDir dir( path, "lib*.dylib" );
270#else 259#else
271 QDir dir( path, "lib*.so" ); 260 QDir dir( path, "lib*.so" );
272#endif 261#endif
273 QStringList list; 262 QStringList list;
274 if ( dir. exists ( )) 263 if ( dir. exists ( ))
275 list = dir.entryList(); 264 list = dir.entryList();
276 QStringList::Iterator it; 265 QStringList::Iterator it;
277 for ( it = list.begin(); it != list.end(); ++it ) { 266 for ( it = list.begin(); it != list.end(); ++it ) {
278 ImageCodecInterface *iface = 0; 267 ImageCodecInterface *iface = 0;
279 QLibrary *lib = new QLibrary( path + "/" + *it ); 268 QLibrary *lib = new QLibrary( path + "/" + *it );
280 if ( lib->queryInterface( IID_QtopiaImageCodec, (QUnknownInterface**)&iface ) == QS_OK && iface ) { 269 if ( lib->queryInterface( IID_QtopiaImageCodec, (QUnknownInterface**)&iface ) == QS_OK && iface ) {
281 QStringList formats = iface->keys(); 270 QStringList formats = iface->keys();
282 for (QStringList::ConstIterator i = formats.begin(); i != formats.end(); ++i) { 271 for (QStringList::ConstIterator i = formats.begin(); i != formats.end(); ++i) {
283 (void)iface->installIOHandler(*i); 272 (void)iface->installIOHandler(*i);
284 // ### it exists now; need to remember if we can delete it 273 // ### it exists now; need to remember if we can delete it
285 } 274 }
286 } 275 }
287 else { 276 else {
288 lib->unload(); 277 lib->unload();
289 delete lib; 278 delete lib;
290 } 279 }
291 } 280 }
292 } 281 }
293}; 282};
294 283
295class ResourceMimeFactory : public QMimeSourceFactory 284class ResourceMimeFactory : public QMimeSourceFactory
296{ 285{
297public: 286public:
298 ResourceMimeFactory() : resImage( 0 ) 287 ResourceMimeFactory() : resImage( 0 )
299 { 288 {
300 setFilePath( Global::helpPath() ); 289 setFilePath( Global::helpPath() );
301 setExtensionType( "html", "text/html;charset=UTF-8" ); 290 setExtensionType( "html", "text/html;charset=UTF-8" );
302 } 291 }
303 ~ResourceMimeFactory() { 292 ~ResourceMimeFactory() {
304 delete resImage; 293 delete resImage;
305 } 294 }
306 295
307 const QMimeSource* data( const QString& abs_name ) const 296 const QMimeSource* data( const QString& abs_name ) const
308 { 297 {
309 const QMimeSource * r = QMimeSourceFactory::data( abs_name ); 298 const QMimeSource * r = QMimeSourceFactory::data( abs_name );
310 if ( !r ) { 299 if ( !r ) {
311 int sl = abs_name.length(); 300 int sl = abs_name.length();
312 do { 301 do {
313 sl = abs_name.findRev( '/', sl - 1 ); 302 sl = abs_name.findRev( '/', sl - 1 );
314 QString name = sl >= 0 ? abs_name.mid( sl + 1 ) : abs_name; 303 QString name = sl >= 0 ? abs_name.mid( sl + 1 ) : abs_name;
315 int dot = name.findRev( '.' ); 304 int dot = name.findRev( '.' );
316 if ( dot >= 0 ) 305 if ( dot >= 0 )
317 name = name.left( dot ); 306 name = name.left( dot );
318 QImage img = Resource::loadImage( name ); 307 QImage img = Resource::loadImage( name );
319 if ( !img.isNull() ) { 308 if ( !img.isNull() ) {
320 delete resImage; 309 delete resImage;
321 resImage = new QImageDrag( img ); 310 resImage = new QImageDrag( img );
322 r = resImage; 311 r = resImage;
323 } 312 }
324 } 313 }
325 while ( !r && sl > 0 ); 314 while ( !r && sl > 0 );
326 } 315 }
327 return r; 316 return r;
328 } 317 }
329private: 318private:
330 mutable QImageDrag *resImage; 319 mutable QImageDrag *resImage;
331}; 320};
332 321
333static int& hack(int& i) 322static int& hack(int& i)
334{ 323{
335#if QT_VERSION <= 230 && defined(QT_NO_CODECS) 324#if QT_VERSION <= 230 && defined(QT_NO_CODECS)
336 // These should be created, but aren't in Qt 2.3.0 325 // These should be created, but aren't in Qt 2.3.0
337 (void)new QUtf8Codec; 326 (void)new QUtf8Codec;
338 (void)new QUtf16Codec; 327 (void)new QUtf16Codec;
339#endif 328#endif
340 return i; 329 return i;
341} 330}
342 331
343static int muted = 0; 332static int muted = 0;
344static int micMuted = 0; 333static int micMuted = 0;
345 334
346static void setVolume( int t = 0, int percent = -1 ) 335static void setVolume( int t = 0, int percent = -1 )
347{ 336{
348 switch ( t ) { 337 switch ( t ) {
349 case 0: { 338 case 0: {
350 Config cfg( "qpe" ); 339 Config cfg( "qpe" );
351 cfg.setGroup( "Volume" ); 340 cfg.setGroup( "Volume" );
352 if ( percent < 0 ) 341 if ( percent < 0 )
353 percent = cfg.readNumEntry( "VolumePercent", 50 ); 342 percent = cfg.readNumEntry( "VolumePercent", 50 );
354#ifndef QT_NO_SOUND 343#ifndef QT_NO_SOUND
355 int fd = 0; 344 int fd = 0;
356 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) { 345 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) {
357 int vol = muted ? 0 : percent; 346 int vol = muted ? 0 : percent;
358 // set both channels to same volume 347 // set both channels to same volume
359 vol |= vol << 8; 348 vol |= vol << 8;
360 ioctl( fd, MIXER_WRITE( SOUND_MIXER_VOLUME ), &vol ); 349 ioctl( fd, MIXER_WRITE( SOUND_MIXER_VOLUME ), &vol );
361 ::close( fd ); 350 ::close( fd );
362 } 351 }
363#endif 352#endif
364 } 353 }
365 break; 354 break;
366 } 355 }
367} 356}
368 357
369static void setMic( int t = 0, int percent = -1 ) 358static void setMic( int t = 0, int percent = -1 )
370{ 359{
371 switch ( t ) { 360 switch ( t ) {
372 case 0: { 361 case 0: {
373 Config cfg( "qpe" ); 362 Config cfg( "qpe" );
374 cfg.setGroup( "Volume" ); 363 cfg.setGroup( "Volume" );
375 if ( percent < 0 ) 364 if ( percent < 0 )
376 percent = cfg.readNumEntry( "Mic", 50 ); 365 percent = cfg.readNumEntry( "Mic", 50 );
377 366
378#ifndef QT_NO_SOUND 367#ifndef QT_NO_SOUND
379 int fd = 0; 368 int fd = 0;
380 int mic = micMuted ? 0 : percent; 369 int mic = micMuted ? 0 : percent;
381 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) { 370 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) {
382 ioctl( fd, MIXER_WRITE( SOUND_MIXER_MIC ), &mic ); 371 ioctl( fd, MIXER_WRITE( SOUND_MIXER_MIC ), &mic );
383 ::close( fd ); 372 ::close( fd );
384 } 373 }
385#endif 374#endif
386 } 375 }
387 break; 376 break;
388 } 377 }
389} 378}
390 379
391 380
392static void setBass( int t = 0, int percent = -1 ) 381static void setBass( int t = 0, int percent = -1 )
393{ 382{
394 switch ( t ) { 383 switch ( t ) {
395 case 0: { 384 case 0: {
396 Config cfg( "qpe" ); 385 Config cfg( "qpe" );
397 cfg.setGroup( "Volume" ); 386 cfg.setGroup( "Volume" );
398 if ( percent < 0 ) 387 if ( percent < 0 )
399 percent = cfg.readNumEntry( "BassPercent", 50 ); 388 percent = cfg.readNumEntry( "BassPercent", 50 );
400 389
401#ifndef QT_NO_SOUND 390#ifndef QT_NO_SOUND
402 int fd = 0; 391 int fd = 0;
403 int bass = percent; 392 int bass = percent;
404 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) { 393 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) {
405 ioctl( fd, MIXER_WRITE( SOUND_MIXER_BASS ), &bass ); 394 ioctl( fd, MIXER_WRITE( SOUND_MIXER_BASS ), &bass );
406 ::close( fd ); 395 ::close( fd );
407 } 396 }
408#endif 397#endif
409 } 398 }
410 break; 399 break;
411 } 400 }
412} 401}
413 402
414 403
415static void setTreble( int t = 0, int percent = -1 ) 404static void setTreble( int t = 0, int percent = -1 )
416{ 405{
417 switch ( t ) { 406 switch ( t ) {
418 case 0: { 407 case 0: {
419 Config cfg( "qpe" ); 408 Config cfg( "qpe" );
420 cfg.setGroup( "Volume" ); 409 cfg.setGroup( "Volume" );
421 if ( percent < 0 ) 410 if ( percent < 0 )
422 percent = cfg.readNumEntry( "TreblePercent", 50 ); 411 percent = cfg.readNumEntry( "TreblePercent", 50 );
423 412
424#ifndef QT_NO_SOUND 413#ifndef QT_NO_SOUND
425 int fd = 0; 414 int fd = 0;
426 int treble = percent; 415 int treble = percent;
427 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) { 416 if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) {
428 ioctl( fd, MIXER_WRITE( SOUND_MIXER_TREBLE ), &treble ); 417 ioctl( fd, MIXER_WRITE( SOUND_MIXER_TREBLE ), &treble );
429 ::close( fd ); 418 ::close( fd );
430 } 419 }
431#endif 420#endif
432 } 421 }
433 break; 422 break;
434 } 423 }
435} 424}
436 425
437 426
438/** 427/**
439 \class QPEApplication 428 \class QPEApplication
440 \brief The QPEApplication class implements various system services 429 \brief The QPEApplication class implements various system services
441 that are available to all Qtopia applications. 430 that are available to all Qtopia applications.
442 431
443 Simply by using QPEApplication instead of QApplication, a standard Qt 432 Simply by using QPEApplication instead of QApplication, a standard Qt
444 application becomes a Qtopia application. It automatically follows 433 application becomes a Qtopia application. It automatically follows
445 style changes, quits and raises, and in the 434 style changes, quits and raises, and in the
446 case of \link docwidget.html document-oriented\endlink applications, 435 case of \link docwidget.html document-oriented\endlink applications,
447 changes the currently displayed document in response to the environment. 436 changes the currently displayed document in response to the environment.
448 437
449 To create a \link docwidget.html document-oriented\endlink 438 To create a \link docwidget.html document-oriented\endlink
450 application use showMainDocumentWidget(); to create a 439 application use showMainDocumentWidget(); to create a
451 non-document-oriented application use showMainWidget(). The 440 non-document-oriented application use showMainWidget(). The
452 keepRunning() function indicates whether the application will 441 keepRunning() function indicates whether the application will
453 continue running after it's processed the last \link qcop.html 442 continue running after it's processed the last \link qcop.html
454 QCop\endlink message. This can be changed using setKeepRunning(). 443 QCop\endlink message. This can be changed using setKeepRunning().
455 444
456 A variety of signals are emitted when certain events occur, for 445 A variety of signals are emitted when certain events occur, for
457 example, timeChanged(), clockChanged(), weekChanged(), 446 example, timeChanged(), clockChanged(), weekChanged(),
458 dateFormatChanged() and volumeChanged(). If the application receives 447 dateFormatChanged() and volumeChanged(). If the application receives
459 a \link qcop.html QCop\endlink message on the application's 448 a \link qcop.html QCop\endlink message on the application's
460 QPE/Application/\e{appname} channel, the appMessage() signal is 449 QPE/Application/\e{appname} channel, the appMessage() signal is
461 emitted. There are also flush() and reload() signals, which 450 emitted. There are also flush() and reload() signals, which
462 are emitted when synching begins and ends respectively - upon these 451 are emitted when synching begins and ends respectively - upon these
463 signals, the application should save and reload any data 452 signals, the application should save and reload any data
464 files that are involved in synching. Most of these signals will initially 453 files that are involved in synching. Most of these signals will initially
465 be received and unfiltered through the appMessage() signal. 454 be received and unfiltered through the appMessage() signal.
466 455
467 This class also provides a set of useful static functions. The 456 This class also provides a set of useful static functions. The
468 qpeDir() and documentDir() functions return the respective paths. 457 qpeDir() and documentDir() functions return the respective paths.
469 The grabKeyboard() and ungrabKeyboard() functions are used to 458 The grabKeyboard() and ungrabKeyboard() functions are used to
470 control whether the application takes control of the device's 459 control whether the application takes control of the device's
471 physical buttons (e.g. application launch keys). The stylus' mode of 460 physical buttons (e.g. application launch keys). The stylus' mode of
472 operation is set with setStylusOperation() and retrieved with 461 operation is set with setStylusOperation() and retrieved with
473 stylusOperation(). There are also setInputMethodHint() and 462 stylusOperation(). There are also setInputMethodHint() and
474 inputMethodHint() functions. 463 inputMethodHint() functions.
475 464
476 \ingroup qtopiaemb 465 \ingroup qtopiaemb
477*/ 466*/
478 467
479/*! 468/*!
480 \fn void QPEApplication::clientMoused() 469 \fn void QPEApplication::clientMoused()
481 470
482 \internal 471 \internal
483*/ 472*/
484 473
485/*! 474/*!
486 \fn void QPEApplication::timeChanged(); 475 \fn void QPEApplication::timeChanged();
487 This signal is emitted when the time changes outside the normal 476 This signal is emitted when the time changes outside the normal
488 passage of time, i.e. if the time is set backwards or forwards. 477 passage of time, i.e. if the time is set backwards or forwards.
489*/ 478*/
490 479
491/*! 480/*!
492 \fn void QPEApplication::clockChanged( bool ampm ); 481 \fn void QPEApplication::clockChanged( bool ampm );
493 482
494 This signal is emitted when the user changes the clock's style. If 483 This signal is emitted when the user changes the clock's style. If
495 \a ampm is TRUE, the user wants a 12-hour AM/PM clock, otherwise, 484 \a ampm is TRUE, the user wants a 12-hour AM/PM clock, otherwise,
496 they want a 24-hour clock. 485 they want a 24-hour clock.
497*/ 486*/
498 487
499/*! 488/*!
500 \fn void QPEApplication::volumeChanged( bool muted ) 489 \fn void QPEApplication::volumeChanged( bool muted )
501 490
502 This signal is emitted whenever the mute state is changed. If \a 491 This signal is emitted whenever the mute state is changed. If \a
503 muted is TRUE, then sound output has been muted. 492 muted is TRUE, then sound output has been muted.
504*/ 493*/
505 494
506/*! 495/*!
507 \fn void QPEApplication::weekChanged( bool startOnMonday ) 496 \fn void QPEApplication::weekChanged( bool startOnMonday )
508 497
509 This signal is emitted if the week start day is changed. If \a 498 This signal is emitted if the week start day is changed. If \a
510 startOnMonday is TRUE then the first day of the week is Monday; if 499 startOnMonday is TRUE then the first day of the week is Monday; if
511 \a startOnMonday is FALSE then the first day of the week is 500 \a startOnMonday is FALSE then the first day of the week is
512 Sunday. 501 Sunday.
513*/ 502*/
514 503
515/*! 504/*!
516 \fn void QPEApplication::dateFormatChanged(DateFormat) 505 \fn void QPEApplication::dateFormatChanged(DateFormat)
517 506
518 This signal is emitted whenever the date format is changed. 507 This signal is emitted whenever the date format is changed.
519*/ 508*/
520 509
521/*! 510/*!
522 \fn void QPEApplication::flush() 511 \fn void QPEApplication::flush()
523 512
524 ### 513 ###
525*/ 514*/
526 515
527/*! 516/*!
528 \fn void QPEApplication::reload() 517 \fn void QPEApplication::reload()
529 518
530*/ 519*/
531 520
532 521
533 522
534void QPEApplication::processQCopFile() 523void QPEApplication::processQCopFile()
535{ 524{
536 QString qcopfn("/tmp/qcop-msg-"); 525 QString qcopfn("/tmp/qcop-msg-");
537 qcopfn += d->appName; // append command name 526 qcopfn += d->appName; // append command name
538 527
539 QFile f(qcopfn); 528 QFile f(qcopfn);
540 if ( f.open(IO_ReadWrite) ) { 529 if ( f.open(IO_ReadWrite) ) {
541#ifndef Q_OS_WIN32 530#ifndef Q_OS_WIN32
542 flock(f.handle(), LOCK_EX); 531 flock(f.handle(), LOCK_EX);
543#endif 532#endif
544 QDataStream ds(&f); 533 QDataStream ds(&f);
545 QCString channel, message; 534 QCString channel, message;
546 QByteArray data; 535 QByteArray data;
547 while(!ds.atEnd()) { 536 while(!ds.atEnd()) {
548 ds >> channel >> message >> data; 537 ds >> channel >> message >> data;
549 d->enqueueQCop(channel,message,data); 538 d->enqueueQCop(channel,message,data);
550 } 539 }
551 ::ftruncate(f.handle(), 0); 540 ::ftruncate(f.handle(), 0);
552#ifndef Q_OS_WIN32 541#ifndef Q_OS_WIN32
553 f.flush(); 542 f.flush();
554 flock(f.handle(), LOCK_UN); 543 flock(f.handle(), LOCK_UN);
555#endif 544#endif
556 } 545 }
557#endif 546#endif
558} 547}
559 548
560 549
561/*! 550/*!
562 \fn void QPEApplication::appMessage( const QCString& msg, const QByteArray& data ) 551 \fn void QPEApplication::appMessage( const QCString& msg, const QByteArray& data )
563 552
564 This signal is emitted when a message is received on this 553 This signal is emitted when a message is received on this
565 application's QPE/Application/<i>appname</i> \link qcop.html 554 application's QPE/Application/<i>appname</i> \link qcop.html
566 QCop\endlink channel. 555 QCop\endlink channel.
567 556
568 The slot to which you connect this signal uses \a msg and \a data 557 The slot to which you connect this signal uses \a msg and \a data
569 in the following way: 558 in the following way:
570 559
571\code 560\code
572 void MyWidget::receive( const QCString& msg, const QByteArray& data ) 561 void MyWidget::receive( const QCString& msg, const QByteArray& data )
573 { 562 {
574 QDataStream stream( data, IO_ReadOnly ); 563 QDataStream stream( data, IO_ReadOnly );