summaryrefslogtreecommitdiff
authorsandman <sandman>2002-06-21 01:23:55 (UTC)
committer sandman <sandman>2002-06-21 01:23:55 (UTC)
commit3f1129f79e945135828191679559da70cf4ac6fa (patch) (unidiff)
treeac5a2e4698a93a201c6bdb5bcf377e1e429c32ed
parent2a7407325b1607c9ee40ed3558c8549672a36ad4 (diff)
downloadopie-3f1129f79e945135828191679559da70cf4ac6fa.zip
opie-3f1129f79e945135828191679559da70cf4ac6fa.tar.gz
opie-3f1129f79e945135828191679559da70cf4ac6fa.tar.bz2
Added a hack to support on-demand loading of liquid style with Qt2
Will be removed, once we switch to Qt3
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--library/qpeapplication.cpp22
1 files changed, 22 insertions, 0 deletions
diff --git a/library/qpeapplication.cpp b/library/qpeapplication.cpp
index f84bc0e..1534b0b 100644
--- a/library/qpeapplication.cpp
+++ b/library/qpeapplication.cpp
@@ -29,128 +29,129 @@
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 <linux/fb.h> 51#include <linux/fb.h>
52 52
53#include <qsignal.h> 53#include <qsignal.h>
54#include "qpeapplication.h" 54#include "qpeapplication.h"
55#include "qpestyle.h" 55#include "qpestyle.h"
56#if QT_VERSION >= 300 56#if QT_VERSION >= 300
57#include <qstylefactory.h> 57#include <qstylefactory.h>
58#else 58#else
59#include <qplatinumstyle.h> 59#include <qplatinumstyle.h>
60#include <qwindowsstyle.h> 60#include <qwindowsstyle.h>
61#include <qmotifstyle.h> 61#include <qmotifstyle.h>
62#include <qmotifplusstyle.h> 62#include <qmotifplusstyle.h>
63#include "lightstyle.h" 63#include "lightstyle.h"
64#endif 64#endif
65#include "global.h" 65#include "global.h"
66#include "resource.h" 66#include "resource.h"
67#if QT_VERSION <= 230 && defined(QT_NO_CODECS) 67#if QT_VERSION <= 230 && defined(QT_NO_CODECS)
68#include "qutfcodec.h" 68#include "qutfcodec.h"
69#endif 69#endif
70#include "config.h" 70#include "config.h"
71#include "network.h" 71#include "network.h"
72#include "fontmanager.h" 72#include "fontmanager.h"
73#include "fontdatabase.h" 73#include "fontdatabase.h"
74 74
75#include "power.h" 75#include "power.h"
76#include "alarmserver.h" 76#include "alarmserver.h"
77#include "applnk.h" 77#include "applnk.h"
78#include "qpemenubar.h" 78#include "qpemenubar.h"
79 79
80#include <unistd.h> 80#include <unistd.h>
81#include <sys/file.h> 81#include <sys/file.h>
82#include <sys/ioctl.h> 82#include <sys/ioctl.h>
83#include <sys/soundcard.h> 83#include <sys/soundcard.h>
84 84
85// for setBacklight() 85// for setBacklight()
86#if defined(QT_QWS_IPAQ) || defined(QT_QWS_EBX) 86#if defined(QT_QWS_IPAQ) || defined(QT_QWS_EBX)
87#include <linux/fb.h> 87#include <linux/fb.h>
88#include <sys/types.h> 88#include <sys/types.h>
89#include <sys/stat.h> 89#include <sys/stat.h>
90#endif 90#endif
91#include <stdlib.h> 91#include <stdlib.h>
92 92
93#include <dlfcn.h> // for Liquid HACK
93 94
94class QPEApplicationData { 95class QPEApplicationData {
95public: 96public:
96 QPEApplicationData() : presstimer(0), presswidget(0), rightpressed(FALSE), 97 QPEApplicationData() : presstimer(0), presswidget(0), rightpressed(FALSE),
97 kbgrabber(0), kbregrab(FALSE), notbusysent(FALSE), preloaded(FALSE), 98 kbgrabber(0), kbregrab(FALSE), notbusysent(FALSE), preloaded(FALSE),
98 forceshow(FALSE), nomaximize(FALSE), qpe_main_widget(0), 99 forceshow(FALSE), nomaximize(FALSE), qpe_main_widget(0),
99 keep_running(TRUE) 100 keep_running(TRUE)
100 { 101 {
101 qcopq.setAutoDelete(TRUE); 102 qcopq.setAutoDelete(TRUE);
102 } 103 }
103 104
104 int presstimer; 105 int presstimer;
105 QWidget* presswidget; 106 QWidget* presswidget;
106 QPoint presspos; 107 QPoint presspos;
107 bool rightpressed; 108 bool rightpressed;
108 int kbgrabber; 109 int kbgrabber;
109 bool kbregrab; 110 bool kbregrab;
110 bool notbusysent; 111 bool notbusysent;
111 QString appName; 112 QString appName;
112 struct QCopRec { 113 struct QCopRec {
113 QCopRec(const QCString &ch, const QCString &msg, 114 QCopRec(const QCString &ch, const QCString &msg,
114 const QByteArray &d) : 115 const QByteArray &d) :
115 channel(ch), message(msg), data(d) { } 116 channel(ch), message(msg), data(d) { }
116 117
117 QCString channel; 118 QCString channel;
118 QCString message; 119 QCString message;
119 QByteArray data; 120 QByteArray data;
120 }; 121 };
121 bool preloaded; 122 bool preloaded;
122 bool forceshow; 123 bool forceshow;
123 bool nomaximize; 124 bool nomaximize;
124 QWidget* qpe_main_widget; 125 QWidget* qpe_main_widget;
125 bool keep_running; 126 bool keep_running;
126 QList<QCopRec> qcopq; 127 QList<QCopRec> qcopq;
127 128
128 void enqueueQCop(const QCString &ch, const QCString &msg, 129 void enqueueQCop(const QCString &ch, const QCString &msg,
129 const QByteArray &data) 130 const QByteArray &data)
130 { 131 {
131 qcopq.append(new QCopRec(ch,msg,data)); 132 qcopq.append(new QCopRec(ch,msg,data));
132 } 133 }
133 void sendQCopQ() 134 void sendQCopQ()
134 { 135 {
135 QCopRec* r; 136 QCopRec* r;
136 for (QListIterator<QCopRec> it(qcopq); (r=it.current()); ++it) 137 for (QListIterator<QCopRec> it(qcopq); (r=it.current()); ++it)
137 QCopChannel::sendLocally(r->channel,r->message,r->data); 138 QCopChannel::sendLocally(r->channel,r->message,r->data);
138 qcopq.clear(); 139 qcopq.clear();
139 } 140 }
140}; 141};
141 142
142class ResourceMimeFactory : public QMimeSourceFactory { 143class ResourceMimeFactory : public QMimeSourceFactory {
143public: 144public:
144 ResourceMimeFactory() 145 ResourceMimeFactory()
145 { 146 {
146 setFilePath( Global::helpPath() ); 147 setFilePath( Global::helpPath() );
147 setExtensionType("html","text/html;charset=UTF-8"); 148 setExtensionType("html","text/html;charset=UTF-8");
148 } 149 }
149 150
150 const QMimeSource* data(const QString& abs_name) const 151 const QMimeSource* data(const QString& abs_name) const
151 { 152 {
152 const QMimeSource* r = QMimeSourceFactory::data(abs_name); 153 const QMimeSource* r = QMimeSourceFactory::data(abs_name);
153 if ( !r ) { 154 if ( !r ) {
154 int sl = abs_name.length(); 155 int sl = abs_name.length();
155 do { 156 do {
156 sl = abs_name.findRev('/',sl-1); 157 sl = abs_name.findRev('/',sl-1);
@@ -1253,128 +1254,149 @@ void QPEApplication::showMainDocumentWidget( QWidget* mw, bool nomaximize )
1253 1254
1254/*! 1255/*!
1255 Sets that the application should continue running after processing 1256 Sets that the application should continue running after processing
1256 qcop messages. Normally if an application is started via a qcop message, 1257 qcop messages. Normally if an application is started via a qcop message,
1257 the application will process the qcop message and then quit. If while 1258 the application will process the qcop message and then quit. If while
1258 processing the qcop message it calls this function, then the application 1259 processing the qcop message it calls this function, then the application
1259 will show and start proper once it has finished processing qcop messages. 1260 will show and start proper once it has finished processing qcop messages.
1260 1261
1261 \sa keepRunning() 1262 \sa keepRunning()
1262*/ 1263*/
1263void QPEApplication::setKeepRunning() 1264void QPEApplication::setKeepRunning()
1264{ 1265{
1265 if ( qApp && qApp->inherits( "QPEApplication" ) ) { 1266 if ( qApp && qApp->inherits( "QPEApplication" ) ) {
1266 QPEApplication *qpeApp = (QPEApplication*)qApp; 1267 QPEApplication *qpeApp = (QPEApplication*)qApp;
1267 qpeApp->d->keep_running = TRUE; 1268 qpeApp->d->keep_running = TRUE;
1268 } 1269 }
1269} 1270}
1270 1271
1271/*! 1272/*!
1272 Returns whether the application will quit after processing the current 1273 Returns whether the application will quit after processing the current
1273 list of qcop messages. 1274 list of qcop messages.
1274 1275
1275 \sa setKeepRunning() 1276 \sa setKeepRunning()
1276*/ 1277*/
1277bool QPEApplication::keepRunning() const 1278bool QPEApplication::keepRunning() const
1278{ 1279{
1279 return d->keep_running; 1280 return d->keep_running;
1280} 1281}
1281 1282
1282/*! 1283/*!
1283 \internal 1284 \internal
1284*/ 1285*/
1285void QPEApplication::internalSetStyle( const QString &style ) 1286void QPEApplication::internalSetStyle( const QString &style )
1286{ 1287{
1287#if QT_VERSION >= 300 1288#if QT_VERSION >= 300
1288 if ( style == "QPE" ) { 1289 if ( style == "QPE" ) {
1289 setStyle( new QPEStyle ); 1290 setStyle( new QPEStyle );
1290 } else { 1291 } else {
1291 QStyle *s = QStyleFactory::create(style); 1292 QStyle *s = QStyleFactory::create(style);
1292 if ( s ) setStyle(s); 1293 if ( s ) setStyle(s);
1293 } 1294 }
1294#else 1295#else
1295 if ( style == "Windows" ) { 1296 if ( style == "Windows" ) {
1296 setStyle( new QWindowsStyle ); 1297 setStyle( new QWindowsStyle );
1297 } else if ( style == "QPE" ) { 1298 } else if ( style == "QPE" ) {
1298 setStyle( new QPEStyle ); 1299 setStyle( new QPEStyle );
1299 } else if ( style == "Light" ) { 1300 } else if ( style == "Light" ) {
1300 setStyle( new LightStyle ); 1301 setStyle( new LightStyle );
1301 } 1302 }
1302#ifndef QT_NO_STYLE_PLATINUM 1303#ifndef QT_NO_STYLE_PLATINUM
1303 else if ( style == "Platinum" ) { 1304 else if ( style == "Platinum" ) {
1304 setStyle( new QPlatinumStyle ); 1305 setStyle( new QPlatinumStyle );
1305 } 1306 }
1306#endif 1307#endif
1307#ifndef QT_NO_STYLE_MOTIF 1308#ifndef QT_NO_STYLE_MOTIF
1308 else if ( style == "Motif" ) { 1309 else if ( style == "Motif" ) {
1309 setStyle( new QMotifStyle ); 1310 setStyle( new QMotifStyle );
1310 } 1311 }
1311#endif 1312#endif
1312#ifndef QT_NO_STYLE_MOTIFPLUS 1313#ifndef QT_NO_STYLE_MOTIFPLUS
1313 else if ( style == "MotifPlus" ) { 1314 else if ( style == "MotifPlus" ) {
1314 setStyle( new QMotifPlusStyle ); 1315 setStyle( new QMotifPlusStyle );
1315 } 1316 }
1316#endif 1317#endif
1318
1319 // HACK for Qt2 only
1320 else if ( style == "Liquid" ) {
1321 static void *lib = 0;
1322 QStyle *sty = 0;
1323
1324
1325 if ( !lib ) {
1326 QString path = QPEApplication::qpeDir() + "/plugins/styles/" + "libliquid.so";
1327 lib = ::dlopen ( path. local8Bit ( ), RTLD_NOW | RTLD_GLOBAL );
1328 }
1329 if ( lib ) {
1330 void *sym = ::dlsym ( lib, "allocate" );
1331
1332 if ( sym )
1333 sty = ((QStyle * (*) ( )) sym ) ( );
1334 }
1335 if ( sty )
1336 setStyle ( sty );
1337 }
1338 // HACK for Qt2 only
1317#endif 1339#endif
1318} 1340}
1319 1341
1320/*! 1342/*!
1321 \internal 1343 \internal
1322*/ 1344*/
1323void QPEApplication::prepareForTermination(bool willrestart) 1345void QPEApplication::prepareForTermination(bool willrestart)
1324{ 1346{
1325 if ( willrestart ) { 1347 if ( willrestart ) {
1326 // Draw a big wait icon, the image can be altered in later revisions 1348 // Draw a big wait icon, the image can be altered in later revisions
1327// QWidget *d = QApplication::desktop(); 1349// QWidget *d = QApplication::desktop();
1328 QImage img = Resource::loadImage( "launcher/new_wait" ); 1350 QImage img = Resource::loadImage( "launcher/new_wait" );
1329 QPixmap pix; 1351 QPixmap pix;
1330 pix.convertFromImage(img.smoothScale(1*img.width(), 1*img.height())); 1352 pix.convertFromImage(img.smoothScale(1*img.width(), 1*img.height()));
1331 QLabel *lblWait = new QLabel(0, "wait hack!", QWidget::WStyle_Customize | 1353 QLabel *lblWait = new QLabel(0, "wait hack!", QWidget::WStyle_Customize |
1332 QWidget::WStyle_NoBorder | QWidget::WStyle_Tool ); 1354 QWidget::WStyle_NoBorder | QWidget::WStyle_Tool );
1333 lblWait->setPixmap( pix ); 1355 lblWait->setPixmap( pix );
1334 lblWait->setAlignment( QWidget::AlignCenter ); 1356 lblWait->setAlignment( QWidget::AlignCenter );
1335 lblWait->show(); 1357 lblWait->show();
1336 lblWait->showMaximized(); 1358 lblWait->showMaximized();
1337 } 1359 }
1338#ifndef SINGLE_APP 1360#ifndef SINGLE_APP
1339 { QCopEnvelope envelope("QPE/System", "forceQuit()"); } 1361 { QCopEnvelope envelope("QPE/System", "forceQuit()"); }
1340 processEvents(); // ensure the message goes out. 1362 processEvents(); // ensure the message goes out.
1341 sleep(1); // You have 1 second to comply. 1363 sleep(1); // You have 1 second to comply.
1342#endif 1364#endif
1343} 1365}
1344 1366
1345/*! 1367/*!
1346 \internal 1368 \internal
1347*/ 1369*/
1348void QPEApplication::shutdown() 1370void QPEApplication::shutdown()
1349{ 1371{
1350 // Implement in server's QPEApplication subclass 1372 // Implement in server's QPEApplication subclass
1351} 1373}
1352 1374
1353/*! 1375/*!
1354 \internal 1376 \internal
1355*/ 1377*/
1356void QPEApplication::restart() 1378void QPEApplication::restart()
1357{ 1379{
1358 // Implement in server's QPEApplication subclass 1380 // Implement in server's QPEApplication subclass
1359} 1381}
1360 1382
1361static QPtrDict<void>* stylusDict=0; 1383static QPtrDict<void>* stylusDict=0;
1362static void createDict() 1384static void createDict()
1363{ 1385{
1364 if ( !stylusDict ) 1386 if ( !stylusDict )
1365 stylusDict = new QPtrDict<void>; 1387 stylusDict = new QPtrDict<void>;
1366} 1388}
1367 1389
1368/*! 1390/*!
1369 Returns the current StylusMode for \a w. 1391 Returns the current StylusMode for \a w.
1370 1392
1371 \sa setStylusOperation() 1393 \sa setStylusOperation()
1372*/ 1394*/
1373QPEApplication::StylusMode QPEApplication::stylusOperation( QWidget* w ) 1395QPEApplication::StylusMode QPEApplication::stylusOperation( QWidget* w )
1374{ 1396{
1375 if ( stylusDict ) 1397 if ( stylusDict )
1376 return (StylusMode)(int)stylusDict->find(w); 1398 return (StylusMode)(int)stylusDict->find(w);
1377 return LeftOnly; 1399 return LeftOnly;
1378} 1400}
1379 1401
1380/*! 1402/*!