summaryrefslogtreecommitdiff
path: root/library/qpeapplication.cpp
authorsandman <sandman>2002-06-29 00:25:26 (UTC)
committer sandman <sandman>2002-06-29 00:25:26 (UTC)
commit971f94ceb114149efbf8d90b607d25dcbd358435 (patch) (unidiff)
treedf106209331f0e8a8c79c839ccfb4a8a8c7ac97c /library/qpeapplication.cpp
parent0552cd7f5762939ccdf05b9bf4fdae9b3e79b0a5 (diff)
downloadopie-971f94ceb114149efbf8d90b607d25dcbd358435.zip
opie-971f94ceb114149efbf8d90b607d25dcbd358435.tar.gz
opie-971f94ceb114149efbf8d90b607d25dcbd358435.tar.bz2
Modified my "liquid only hack" - appearance now scans plugins/styles for
external styles and qpeapplication tries to load them
Diffstat (limited to 'library/qpeapplication.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--library/qpeapplication.cpp61
1 files changed, 45 insertions, 16 deletions
diff --git a/library/qpeapplication.cpp b/library/qpeapplication.cpp
index 76d62ef..6e2db7c 100644
--- a/library/qpeapplication.cpp
+++ b/library/qpeapplication.cpp
@@ -69,12 +69,15 @@
69#else 69#else
70#include <qplatinumstyle.h> 70#include <qplatinumstyle.h>
71#include <qwindowsstyle.h> 71#include <qwindowsstyle.h>
72#include <qmotifstyle.h> 72#include <qmotifstyle.h>
73#include <qmotifplusstyle.h> 73#include <qmotifplusstyle.h>
74#include "lightstyle.h" 74#include "lightstyle.h"
75
76#include <qpe/qlibrary.h>
77#include <dlfcn.h>
75#endif 78#endif
76#include "global.h" 79#include "global.h"
77#include "resource.h" 80#include "resource.h"
78#if QT_VERSION <= 230 && defined(QT_NO_CODECS) 81#if QT_VERSION <= 230 && defined(QT_NO_CODECS)
79#include "qutfcodec.h" 82#include "qutfcodec.h"
80#endif 83#endif
@@ -98,13 +101,12 @@
98#include <linux/fb.h> 101#include <linux/fb.h>
99#include <sys/types.h> 102#include <sys/types.h>
100#include <sys/stat.h> 103#include <sys/stat.h>
101#endif 104#endif
102#include <stdlib.h> 105#include <stdlib.h>
103 106
104#include <dlfcn.h> // for Liquid HACK
105 107
106class QPEApplicationData { 108class QPEApplicationData {
107public: 109public:
108 QPEApplicationData() : presstimer(0), presswidget(0), rightpressed(FALSE), 110 QPEApplicationData() : presstimer(0), presswidget(0), rightpressed(FALSE),
109 kbgrabber(0), kbregrab(FALSE), notbusysent(FALSE), preloaded(FALSE), 111 kbgrabber(0), kbregrab(FALSE), notbusysent(FALSE), preloaded(FALSE),
110 forceshow(FALSE), nomaximize(FALSE), qpe_main_widget(0), 112 forceshow(FALSE), nomaximize(FALSE), qpe_main_widget(0),
@@ -1325,29 +1327,56 @@ void QPEApplication::internalSetStyle( const QString &style )
1325 else if ( style == "MotifPlus" ) { 1327 else if ( style == "MotifPlus" ) {
1326 setStyle( new QMotifPlusStyle ); 1328 setStyle( new QMotifPlusStyle );
1327 } 1329 }
1328#endif 1330#endif
1329 1331
1330 // HACK for Qt2 only 1332 // HACK for Qt2 only
1331 else if ( style == "Liquid" ) { 1333 else {
1332 static void *lib = 0; 1334 // style == "Liquid Style (libliquid.so)" (or "Windows XP (libxp.so)"
1333 QStyle *sty = 0; 1335
1336 int p2 = style. findRev ( ']' );
1337 int p1 = style. findRev ( '[' );
1338 QString style2;
1334 1339
1335 1340 if (( p1 > 0 ) && ( p2 > 0 ) && (( p1 + 1 ) < p2 ))
1336 if ( !lib ) { 1341 style2 = "lib" + style. mid ( p1 + 1, p2 - p1 - 1 ). lower ( ) + ".so";
1337 QString path = QPEApplication::qpeDir() + "/plugins/styles/" + "libliquid.so"; 1342 else
1338 lib = ::dlopen ( path. local8Bit ( ), RTLD_NOW | RTLD_GLOBAL ); 1343 style2 = "lib" + style. lower ( ) + ".so";
1339 }
1340 if ( lib ) {
1341 void *sym = ::dlsym ( lib, "allocate" );
1342 1344
1343 if ( sym ) 1345 // static QLibrary *currentlib = 0;
1344 sty = ((QStyle * (*) ( )) sym ) ( ); 1346 static void *currentlib = 0;
1345 } 1347
1346 if ( sty ) 1348 QString path = QPEApplication::qpeDir ( ) + "/plugins/styles/" + style2;
1347 setStyle ( sty ); 1349
1350 do { // try/catch simulation
1351 // QLibrary *lib = new QLibrary ( path, QLibrary::Immediately );
1352 void *lib = ::dlopen ( path. local8Bit ( ), RTLD_NOW | RTLD_GLOBAL );
1353
1354 if ( lib ) {
1355 //QStyle * (*fpa) ( ) = (QStyle * (*) ( )) lib-> resolve ( "allocate" );
1356 QStyle * (*fpa) ( ) = (QStyle * (*) ( )) ::dlsym ( lib, "allocate" );
1357
1358 if ( fpa ) {
1359 QStyle *sty = ( *fpa ) ( );
1360
1361 if ( sty ) {
1362 setStyle ( sty );
1363
1364 if ( currentlib ) {
1365 //delete currentlib;
1366 ::dlclose ( currentlib );
1367 }
1368 currentlib = lib;
1369
1370 break;
1371 }
1372 }
1373 //delete lib;
1374 ::dlclose ( lib );
1375 }
1376 } while ( false );
1348 } 1377 }
1349 // HACK for Qt2 only 1378 // HACK for Qt2 only
1350#endif 1379#endif
1351} 1380}
1352 1381
1353/*! 1382/*!