28 files changed, 1697 insertions, 1301 deletions
@@ -45,19 +45,17 @@ NONCORESETTINGS =noncore/settings/language noncore/settings/rotation \ noncore/settings/appearance noncore/settings/sound \ noncore/settings/mediummount \ noncore/settings/tabmanager noncore/settings/appskey \ noncore/settings/netsystemtime NONCORETOOLS = noncore/tools/calculator noncore/tools/clock \ noncore/tools/remote noncore/tools/opie-sh noncore/apps/advancedfm -NONCORESTYLES = noncore/styles/liquid noncore/styles/liquid/settings \ - noncore/styles/theme noncore/styles/theme/settings \ - noncore/styles/metal +NONCORESTYLES = noncore/styles/liquid noncore/styles/theme noncore/styles/metal GAMES = noncore/games/minesweep noncore/games/solitaire \ noncore/games/tetrix noncore/games/wordgame \ noncore/games/parashoot noncore/games/snake \ noncore/games/mindbreaker \ noncore/games/go noncore/games/qasteroids \ noncore/games/fifteen noncore/games/tictac \ noncore/games/kcheckers noncore/games/kpacman \ diff --git a/apps/Settings/Liquid.desktop b/apps/Settings/Liquid.desktop deleted file mode 100644 index 8a1727f..0000000 --- a/apps/Settings/Liquid.desktop +++ b/dev/null @@ -1,7 +0,0 @@ -[Desktop Entry] -Type=Application -Exec=liquid-settings -Icon=liquid/Liquid -Name=Liquid-Settings -Name[de]=Liquid-Einstellungen - diff --git a/apps/Settings/Theme.desktop b/apps/Settings/Theme.desktop deleted file mode 100644 index 197184f..0000000 --- a/apps/Settings/Theme.desktop +++ b/dev/null @@ -1,7 +0,0 @@ -[Desktop Entry] -Type=Application -Exec=theme-settings -Icon=theme/Theme -Name=Theme-Settings -Name[de]=Thema-Einstellungen - diff --git a/library/qpeapplication.cpp b/library/qpeapplication.cpp index dff8235..187a7e2 100644 --- a/library/qpeapplication.cpp +++ b/library/qpeapplication.cpp @@ -53,33 +53,33 @@ //#include <linux/fb.h> better not rely on kernel headers in userspace ... /* VESA Blanking Levels */ #define VESA_NO_BLANKING 0 #define VESA_VSYNC_SUSPEND 1 #define VESA_HSYNC_SUSPEND 2 #define VESA_POWERDOWN 3 -#define FBIOBLANK 0x4611 +#define FBIOBLANK 0x4611 #include <qsignal.h> #include "qpeapplication.h" #include "qpestyle.h" +#include "styleinterface.h" #if QT_VERSION >= 300 #include <qstylefactory.h> #else #include <qplatinumstyle.h> #include <qwindowsstyle.h> #include <qmotifstyle.h> #include <qmotifplusstyle.h> #include "lightstyle.h" #include <qpe/qlibrary.h> -#include <dlfcn.h> #endif #include "global.h" #include "resource.h" #if QT_VERSION <= 230 && defined(QT_NO_CODECS) #include "qutfcodec.h" #endif #include "config.h" #include "network.h" @@ -100,1617 +100,1755 @@ #if defined(QT_QWS_IPAQ) || defined(QT_QWS_EBX) #include <linux/fb.h> #include <sys/types.h> #include <sys/stat.h> #endif #include <stdlib.h> -class QPEApplicationData { +class QPEApplicationData +{ public: - QPEApplicationData() : presstimer(0), presswidget(0), rightpressed(FALSE), - kbgrabber(0), kbregrab(FALSE), notbusysent(FALSE), preloaded(FALSE), - forceshow(FALSE), nomaximize(FALSE), qpe_main_widget(0), - keep_running(TRUE) - { - qcopq.setAutoDelete(TRUE); - } + QPEApplicationData() : presstimer( 0 ), presswidget( 0 ), rightpressed( FALSE ), + kbgrabber( 0 ), kbregrab( FALSE ), notbusysent( FALSE ), preloaded( FALSE ), + forceshow( FALSE ), nomaximize( FALSE ), qpe_main_widget( 0 ), + keep_running( TRUE ) + { + qcopq.setAutoDelete( TRUE ); + } - int presstimer; - QWidget* presswidget; - QPoint presspos; - bool rightpressed; - int kbgrabber; - bool kbregrab; - bool notbusysent; - QString appName; - struct QCopRec { - QCopRec(const QCString &ch, const QCString &msg, - const QByteArray &d) : - channel(ch), message(msg), data(d) { } - - QCString channel; - QCString message; - QByteArray data; - }; - bool preloaded; - bool forceshow; - bool nomaximize; - QWidget* qpe_main_widget; - bool keep_running; - QList<QCopRec> qcopq; - - void enqueueQCop(const QCString &ch, const QCString &msg, - const QByteArray &data) - { - qcopq.append(new QCopRec(ch,msg,data)); - } - void sendQCopQ() - { - QCopRec* r; - for (QListIterator<QCopRec> it(qcopq); (r=it.current()); ++it) - QCopChannel::sendLocally(r->channel,r->message,r->data); - qcopq.clear(); - } + int presstimer; + QWidget* presswidget; + QPoint presspos; + bool rightpressed; + int kbgrabber; + bool kbregrab; + bool notbusysent; + QString appName; + struct QCopRec + { + QCopRec( const QCString &ch, const QCString &msg, + const QByteArray &d ) : + channel( ch ), message( msg ), data( d ) + { } + + QCString channel; + QCString message; + QByteArray data; + }; + bool preloaded; + bool forceshow; + bool nomaximize; + QWidget* qpe_main_widget; + bool keep_running; + QList<QCopRec> qcopq; + + void enqueueQCop( const QCString &ch, const QCString &msg, + const QByteArray &data ) + { + qcopq.append( new QCopRec( ch, msg, data ) ); + } + void sendQCopQ() + { + QCopRec * r; + for ( QListIterator<QCopRec> it( qcopq ); ( r = it.current() ); ++it ) + QCopChannel::sendLocally( r->channel, r->message, r->data ); + qcopq.clear(); + } }; -class ResourceMimeFactory : public QMimeSourceFactory { +class ResourceMimeFactory : public QMimeSourceFactory +{ public: - ResourceMimeFactory() - { - setFilePath( Global::helpPath() ); - setExtensionType("html","text/html;charset=UTF-8"); - } + ResourceMimeFactory() + { + setFilePath( Global::helpPath() ); + setExtensionType( "html", "text/html;charset=UTF-8" ); + } - const QMimeSource* data(const QString& abs_name) const - { - const QMimeSource* r = QMimeSourceFactory::data(abs_name); - if ( !r ) { - int sl = abs_name.length(); - do { - sl = abs_name.findRev('/',sl-1); - QString name = sl>=0 ? abs_name.mid(sl+1) : abs_name; - int dot = name.findRev('.'); - if ( dot >= 0 ) - name = name.left(dot); - QImage img = Resource::loadImage(name); - if ( !img.isNull() ) - r = new QImageDrag(img); - } while (!r && sl>0); - } - return r; - } + const QMimeSource* data( const QString& abs_name ) const + { + const QMimeSource * r = QMimeSourceFactory::data( abs_name ); + if ( !r ) { + int sl = abs_name.length(); + do { + sl = abs_name.findRev( '/', sl - 1 ); + QString name = sl >= 0 ? abs_name.mid( sl + 1 ) : abs_name; + int dot = name.findRev( '.' ); + if ( dot >= 0 ) + name = name.left( dot ); + QImage img = Resource::loadImage( name ); + if ( !img.isNull() ) + r = new QImageDrag( img ); + } + while ( !r && sl > 0 ); + } + return r; + } }; -static int muted=0; -static int micMuted=0; +static int muted = 0; +static int micMuted = 0; -static void setVolume(int t=0, int percent=-1) +static void setVolume( int t = 0, int percent = -1 ) { - switch (t) { - case 0: { - Config cfg("qpe"); - cfg.setGroup("Volume"); - if ( percent < 0 ) - percent = cfg.readNumEntry("VolumePercent",50); - int fd = 0; - if ((fd = open("/dev/mixer", O_RDWR))>=0) { - int vol = muted ? 0 : percent; - // set both channels to same volume - vol |= vol << 8; - ioctl(fd, MIXER_WRITE(0), &vol); - ::close(fd); - } - } break; - } + switch ( t ) { + case 0: { + Config cfg( "qpe" ); + cfg.setGroup( "Volume" ); + if ( percent < 0 ) + percent = cfg.readNumEntry( "VolumePercent", 50 ); + int fd = 0; + if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) { + int vol = muted ? 0 : percent; + // set both channels to same volume + vol |= vol << 8; + ioctl( fd, MIXER_WRITE( 0 ), &vol ); + ::close( fd ); + } + } + break; + } } -static void setMic(int t=0, int percent=-1) +static void setMic( int t = 0, int percent = -1 ) { - switch (t) { - case 0: { - Config cfg("qpe"); - cfg.setGroup("Volume"); - if ( percent < 0 ) - percent = cfg.readNumEntry("Mic",50); - - int fd = 0; - int mic = micMuted ? 0 : percent; - if ((fd = open("/dev/mixer", O_RDWR))>=0) { - ioctl(fd, MIXER_WRITE(SOUND_MIXER_MIC), &mic); - ::close(fd); - } - } break; - } + switch ( t ) { + case 0: { + Config cfg( "qpe" ); + cfg.setGroup( "Volume" ); + if ( percent < 0 ) + percent = cfg.readNumEntry( "Mic", 50 ); + + int fd = 0; + int mic = micMuted ? 0 : percent; + if ( ( fd = open( "/dev/mixer", O_RDWR ) ) >= 0 ) { + ioctl( fd, MIXER_WRITE( SOUND_MIXER_MIC ), &mic ); + ::close( fd ); + } + } + break; + } } int qpe_sysBrightnessSteps() { #if defined(QT_QWS_IPAQ) - return 255; + return 255; #elif defined(QT_QWS_EBX) - return 4; + + return 4; #else - return 255; // ? + + return 255; // ? #endif } -static int& hack(int& i) +static int& hack( int& i ) { #if QT_VERSION <= 230 && defined(QT_NO_CODECS) - // These should be created, but aren't in Qt 2.3.0 - (void)new QUtf8Codec; - (void)new QUtf16Codec; + // These should be created, but aren't in Qt 2.3.0 + ( void ) new QUtf8Codec; + ( void ) new QUtf16Codec; #endif - return i; + + return i; } static bool forced_off = FALSE; -static int curbl=-1; +static int curbl = -1; static int backlight() { - if ( curbl == -1 ) { - // Read from config - Config config( "qpe" ); - config.setGroup( "Screensaver" ); - curbl = config.readNumEntry("Brightness",255); - } - return curbl; + if ( curbl == -1 ) { + // Read from config + Config config( "qpe" ); + config.setGroup( "Screensaver" ); + curbl = config.readNumEntry( "Brightness", 255 ); + } + return curbl; } -static void setBacklight(int bright) +static void setBacklight( int bright ) { - if ( bright == -3 ) { - // Forced on - forced_off = FALSE; - bright = -1; - } - if ( forced_off && bright != -2 ) - return; - if ( bright == -2 ) { - // Toggle between off and on - bright = curbl ? 0 : -1; - forced_off = !bright; - } - if ( bright == -1 ) { - // Read from config - Config config( "qpe" ); - config.setGroup( "Screensaver" ); - bright = config.readNumEntry("Brightness",255); - } + if ( bright == -3 ) { + // Forced on + forced_off = FALSE; + bright = -1; + } + if ( forced_off && bright != -2 ) + return ; + if ( bright == -2 ) { + // Toggle between off and on + bright = curbl ? 0 : -1; + forced_off = !bright; + } + if ( bright == -1 ) { + // Read from config + Config config( "qpe" ); + config.setGroup( "Screensaver" ); + bright = config.readNumEntry( "Brightness", 255 ); + } #if defined(QT_QWS_IPAQ) || defined(QT_QWS_EBX) - if ( QFile::exists("/usr/bin/bl") ) { - QString cmd = "/usr/bin/bl 1 "; - cmd += bright<=0 ? "0 " : "1 "; - cmd += QString::number(bright); - system(cmd.latin1()); + if ( QFile::exists( "/usr/bin/bl" ) ) { + QString cmd = "/usr/bin/bl 1 "; + cmd += bright <= 0 ? "0 " : "1 "; + cmd += QString::number( bright ); + system( cmd.latin1() ); #if defined(QT_QWS_EBX) - } else if ( QFile::exists("/dev/fl") ) { + + } + else if ( QFile::exists( "/dev/fl" ) ) { #define FL_IOCTL_STEP_CONTRAST 100 - int fd = open("/dev/fl", O_WRONLY); - if (fd >= 0 ) { - int steps = qpe_sysBrightnessSteps(); - int bl = ( bright * steps + 127 ) / 255; - if ( bright && !bl ) bl = 1; - bl = ioctl(fd, FL_IOCTL_STEP_CONTRAST, bl); - close(fd); - } - } + int fd = open( "/dev/fl", O_WRONLY ); + if ( fd >= 0 ) { + int steps = qpe_sysBrightnessSteps(); + int bl = ( bright * steps + 127 ) / 255; + if ( bright && !bl ) + bl = 1; + bl = ioctl( fd, FL_IOCTL_STEP_CONTRAST, bl ); + close( fd ); + } + } #elif defined(QT_QWS_IPAQ) - } else if ( QFile::exists("/dev/ts") || QFile::exists("/dev/h3600_ts") ) { - typedef struct { - unsigned char mode; - unsigned char pwr; - unsigned char brightness; - } FLITE_IN; + + } + else if ( QFile::exists( "/dev/ts" ) || QFile::exists( "/dev/h3600_ts" ) ) + { + typedef struct { + unsigned char mode; + unsigned char pwr; + unsigned char brightness; + } + FLITE_IN; # ifndef FLITE_ON # ifndef _LINUX_IOCTL_H # include <linux/ioctl.h> # endif # define FLITE_ON _IOW('f', 7, FLITE_IN) # endif - int fd; - if ( QFile::exists("/dev/ts") ) - fd = open("/dev/ts", O_WRONLY); - else - fd = open("/dev/h3600_ts", O_WRONLY); - if (fd >= 0 ) { - FLITE_IN bl; - bl.mode = 1; - bl.pwr = bright ? 1 : 0; - bl.brightness = bright; - ioctl(fd, FLITE_ON, &bl); - close(fd); - } - } + + int fd; + if ( QFile::exists( "/dev/ts" ) ) + fd = open( "/dev/ts", O_WRONLY ); + else + fd = open( "/dev/h3600_ts", O_WRONLY ); + if ( fd >= 0 ) { + FLITE_IN bl; + bl.mode = 1; + bl.pwr = bright ? 1 : 0; + bl.brightness = bright; + ioctl( fd, FLITE_ON, &bl ); + close( fd ); + } + } #endif #endif - curbl = bright; + curbl = bright; } -void qpe_setBacklight(int bright) { setBacklight(bright); } +void qpe_setBacklight( int bright ) { + setBacklight( bright ); +} static bool dim_on = FALSE; static bool lightoff_on = FALSE; static int disable_suspend = 100; static bool powerOnline() { - return PowerStatusManager::readStatus().acStatus() == PowerStatus::Online; + return PowerStatusManager::readStatus().acStatus() == PowerStatus::Online; } static bool networkOnline() { - return Network::networkOnline(); + return Network::networkOnline(); } class QPEScreenSaver : public QWSScreenSaver { private: - int LcdOn; + int LcdOn; public: - QPEScreenSaver() - { - int fd; - - LcdOn = TRUE; - // Make sure the LCD is in fact on, (if opie was killed while the LCD is off it would still be off) - fd=open("/dev/fb0",O_RDWR); - if (fd != -1) { ioctl(fd,FBIOBLANK,VESA_NO_BLANKING); close(fd); } - } - void restore() - { - if (!LcdOn) // We must have turned it off - { - int fd; - fd=open("/dev/fb0",O_RDWR); - if (fd != -1) { ioctl(fd,FBIOBLANK,VESA_NO_BLANKING); close(fd); } - } - setBacklight(-1); - } - bool save(int level) - { - int fd; - - switch ( level ) { - case 0: - if ( disable_suspend > 0 && dim_on ) { - if (backlight() > 1) - setBacklight(1); // lowest non-off - } - return TRUE; - break; - case 1: - if ( disable_suspend > 1 && lightoff_on ) { - setBacklight(0); // off - } - return TRUE; - break; - case 2: - Config config( "qpe" ); - config.setGroup( "Screensaver" ); - if (config.readNumEntry("LcdOffOnly",0) != 0) // We're only turning off the LCD - { - fd=open("/dev/fb0",O_RDWR); - if (fd != -1) { ioctl(fd,FBIOBLANK,VESA_POWERDOWN); close(fd); } - LcdOn = FALSE; - } - else // We're going to suspend the whole machine - { - if ( disable_suspend > 2 && !powerOnline() && !networkOnline() ) { - QWSServer::sendKeyEvent( 0xffff, Qt::Key_F34, FALSE, TRUE, FALSE ); - return TRUE; - } - } - break; - } - return FALSE; - } + QPEScreenSaver() + { + int fd; + + LcdOn = TRUE; + // Make sure the LCD is in fact on, (if opie was killed while the LCD is off it would still be off) + fd = open( "/dev/fb0", O_RDWR ); + if ( fd != -1 ) { + ioctl( fd, FBIOBLANK, VESA_NO_BLANKING ); + close( fd ); + } + } + void restore() + { + if ( !LcdOn ) // We must have turned it off + { + int fd; + fd = open( "/dev/fb0", O_RDWR ); + if ( fd != -1 ) + { + ioctl( fd, FBIOBLANK, VESA_NO_BLANKING ); + close( fd ); + } + } + setBacklight( -1 ); + } + bool save( int level ) + { + int fd; + + switch ( level ) { + case 0: + if ( disable_suspend > 0 && dim_on ) { + if ( backlight() > 1 ) + setBacklight( 1 ); // lowest non-off + } + return TRUE; + break; + case 1: + if ( disable_suspend > 1 && lightoff_on ) { + setBacklight( 0 ); // off + } + return TRUE; + break; + case 2: + Config config( "qpe" ); + config.setGroup( "Screensaver" ); + if ( config.readNumEntry( "LcdOffOnly", 0 ) != 0 ) // We're only turning off the LCD + { + fd = open( "/dev/fb0", O_RDWR ); + if ( fd != -1 ) + { + ioctl( fd, FBIOBLANK, VESA_POWERDOWN ); + close( fd ); + } + LcdOn = FALSE; + } + else // We're going to suspend the whole machine + { + if ( disable_suspend > 2 && !powerOnline() && !networkOnline() ) { + QWSServer::sendKeyEvent( 0xffff, Qt::Key_F34, FALSE, TRUE, FALSE ); + return TRUE; + } + } + break; + } + return FALSE; + } }; -static int ssi(int interval, Config &config, const QString &enable, const QString& value, int def) +static int ssi( int interval, Config & config, const QString & enable, const QString & value, int def ) { - if ( !enable.isEmpty() && config.readNumEntry(enable,0) == 0 ) - return 0; + if ( !enable.isEmpty() && config.readNumEntry( enable, 0 ) == 0 ) + return 0; - if ( interval < 0 ) { - // Restore screen blanking and power saving state - interval = config.readNumEntry( value, def ); - } - return interval; + if ( interval < 0 ) { + // Restore screen blanking and power saving state + interval = config.readNumEntry( value, def ); + } + return interval; } -static void setScreenSaverIntervals(int i1, int i2, int i3) +static void setScreenSaverIntervals( int i1, int i2, int i3 ) { - Config config( "qpe" ); - config.setGroup( "Screensaver" ); - - int v[4]; - i1 = ssi(i1, config, "Dim","Interval_Dim", 30); - i2 = ssi(i2, config, "LightOff","Interval_LightOff", 20); - i3 = ssi(i3, config, "","Interval", 60); - - //qDebug("screen saver intervals: %d %d %d", i1, i2, i3); - - v[0] = QMAX( 1000*i1, 100); - v[1] = QMAX( 1000*i2, 100); - v[2] = QMAX( 1000*i3, 100); - v[3] = 0; - dim_on = ( (i1 != 0) ? config.readNumEntry("Dim",1) : FALSE ); - lightoff_on = ( (i2 != 0 ) ? config.readNumEntry("LightOff",1) : FALSE ); - if ( !i1 && !i2 && !i3 ) - QWSServer::setScreenSaverInterval(0); - else - QWSServer::setScreenSaverIntervals(v); + Config config( "qpe" ); + config.setGroup( "Screensaver" ); + + int v[ 4 ]; + i1 = ssi( i1, config, "Dim", "Interval_Dim", 30 ); + i2 = ssi( i2, config, "LightOff", "Interval_LightOff", 20 ); + i3 = ssi( i3, config, "", "Interval", 60 ); + + //qDebug("screen saver intervals: %d %d %d", i1, i2, i3); + + v[ 0 ] = QMAX( 1000 * i1, 100 ); + v[ 1 ] = QMAX( 1000 * i2, 100 ); + v[ 2 ] = QMAX( 1000 * i3, 100 ); + v[ 3 ] = 0; + dim_on = ( ( i1 != 0 ) ? config.readNumEntry( "Dim", 1 ) : FALSE ); + lightoff_on = ( ( i2 != 0 ) ? config.readNumEntry( "LightOff", 1 ) : FALSE ); + if ( !i1 && !i2 && !i3 ) + QWSServer::setScreenSaverInterval( 0 ); + else + QWSServer::setScreenSaverIntervals( v ); } -static void setScreenSaverInterval(int interval) +static void setScreenSaverInterval( int interval ) { - setScreenSaverIntervals(-1,-1,interval); + setScreenSaverIntervals( -1, -1, interval ); } /*! \class QPEApplication qpeapplication.h \brief The QPEApplication class implements various system services that are available to all Qtopia applications. - + Simply by using QPEApplication instead of QApplication, a plain Qt application becomes a Qtopia application. It automatically follows style changes, quits and raises, and in the case of \link docwidget.html document-oriented\endlink applications, changes the current displayed document in response to the environment. */ /*! \fn void QPEApplication::clientMoused() - + \internal */ /*! \fn void QPEApplication::timeChanged(); - + This signal is emitted when the time jumps forward or backwards by more than the normal passage of time. */ /*! \fn void QPEApplication::clockChanged( bool ampm ); - + This signal is emitted when the user changes the style of clock. If \a ampm is TRUE, the user wants a 12-hour AM/PM close, otherwise, they want a 24-hour clock. */ /*! \fn void QPEApplication::appMessage( const QCString& msg, const QByteArray& data ) - + This signal is emitted when a message is received on the QPE/Application/<i>appname</i> QCop channel for this application. - + The slot to which you connect this signal uses \a msg and \a data in the following way: - + \code void MyWidget::receive( const QCString& msg, const QByteArray& data ) { QDataStream stream( data, IO_ReadOnly ); if ( msg == "someMessage(int,int,int)" ) { int a,b,c; stream >> a >> b >> c; ... } else if ( msg == "otherMessage(QString)" ) { ... } } \endcode - + \sa qcop.html */ /*! Constructs a QPEApplication just as you would construct a QApplication, passing \a argc, \a argv, and \a t. */ -QPEApplication::QPEApplication( int& argc, char **argv, Type t ) - : QApplication( hack(argc), argv, t ) +QPEApplication::QPEApplication( int & argc, char **argv, Type t ) + : QApplication( hack( argc ), argv, t ) { - int dw = desktop()->width(); - if ( dw < 200 ) { -// setFont( QFont( "helvetica", 8 ) ); - AppLnk::setSmallIconSize(10); - AppLnk::setBigIconSize(28); - } + int dw = desktop() ->width(); + if ( dw < 200 ) { + // setFont( QFont( "helvetica", 8 ) ); + AppLnk::setSmallIconSize( 10 ); + AppLnk::setBigIconSize( 28 ); + } - d = new QPEApplicationData; - QMimeSourceFactory::setDefaultFactory(new ResourceMimeFactory); + d = new QPEApplicationData; + QMimeSourceFactory::setDefaultFactory( new ResourceMimeFactory ); - connect(this, SIGNAL(lastWindowClosed()), this, SLOT(hideOrQuit())); + connect( this, SIGNAL( lastWindowClosed() ), this, SLOT( hideOrQuit() ) ); #if defined(Q_WS_QWS) && !defined(QT_NO_COP) - QString qcopfn("/tmp/qcop-msg-"); - qcopfn += QString(argv[0]); // append command name - - QFile f(qcopfn); - if ( f.open(IO_ReadOnly) ) { - flock(f.handle(), LOCK_EX); - } + QString qcopfn( "/tmp/qcop-msg-" ); + qcopfn += QString( argv[ 0 ] ); // append command name - sysChannel = new QCopChannel( "QPE/System", this ); - connect( sysChannel, SIGNAL(received(const QCString &, const QByteArray &)), - this, SLOT(systemMessage( const QCString &, const QByteArray &)) ); - - QCString channel = QCString(argv[0]); - channel.replace(QRegExp(".*/"),""); - d->appName = channel; - channel = "QPE/Application/" + channel; - pidChannel = new QCopChannel( channel, this); - connect( pidChannel, SIGNAL(received(const QCString &, const QByteArray &)), - this, SLOT(pidMessage(const QCString &, const QByteArray &))); - - if ( f.isOpen() ) { - d->keep_running = FALSE; - QDataStream ds(&f); - QCString channel, message; - QByteArray data; - while(!ds.atEnd()) { - ds >> channel >> message >> data; - d->enqueueQCop(channel,message,data); - } + QFile f( qcopfn ); + if ( f.open( IO_ReadOnly ) ) { + flock( f.handle(), LOCK_EX ); + } - flock(f.handle(), LOCK_UN); - f.close(); - f.remove(); - } + sysChannel = new QCopChannel( "QPE/System", this ); + connect( sysChannel, SIGNAL( received( const QCString &, const QByteArray & ) ), + this, SLOT( systemMessage( const QCString &, const QByteArray & ) ) ); + + QCString channel = QCString( argv[ 0 ] ); + channel.replace( QRegExp( ".*/" ), "" ); + d->appName = channel; + channel = "QPE/Application/" + channel; + pidChannel = new QCopChannel( channel, this ); + connect( pidChannel, SIGNAL( received( const QCString &, const QByteArray & ) ), + this, SLOT( pidMessage( const QCString &, const QByteArray & ) ) ); + + if ( f.isOpen() ) { + d->keep_running = FALSE; + QDataStream ds( &f ); + QCString channel, message; + QByteArray data; + while ( !ds.atEnd() ) { + ds >> channel >> message >> data; + d->enqueueQCop( channel, message, data ); + } + + flock( f.handle(), LOCK_UN ); + f.close(); + f.remove(); + } - for (int a=0; a<argc; a++) { - if ( qstrcmp(argv[a],"-preload")==0 ) { - argv[a] = argv[a+1]; - a++; - d->preloaded = TRUE; - argc-=1; - } else if ( qstrcmp(argv[a],"-preload-show")==0 ) { - argv[a] = argv[a+1]; - a++; - d->preloaded = TRUE; - d->forceshow = TRUE; - argc-=1; - } - } + for ( int a = 0; a < argc; a++ ) { + if ( qstrcmp( argv[ a ], "-preload" ) == 0 ) { + argv[ a ] = argv[ a + 1 ]; + a++; + d->preloaded = TRUE; + argc -= 1; + } + else if ( qstrcmp( argv[ a ], "-preload-show" ) == 0 ) { + argv[ a ] = argv[ a + 1 ]; + a++; + d->preloaded = TRUE; + d->forceshow = TRUE; + argc -= 1; + } + } - /* overide stored arguments */ - setArgs(argc, argv); + /* overide stored arguments */ + setArgs( argc, argv ); #endif - qwsSetDecoration( new QPEDecoration() ); + qwsSetDecoration( new QPEDecoration() ); #ifndef QT_NO_TRANSLATION - QStringList langs = Global::languageList(); - for (QStringList::ConstIterator it = langs.begin(); it!=langs.end(); ++it) { - QString lang = *it; - - QTranslator * trans; - QString tfn; - - trans = new QTranslator(this); - tfn = qpeDir()+"/i18n/"+lang+"/libqpe.qm"; - if ( trans->load( tfn )) - installTranslator( trans ); - else - delete trans; - - trans = new QTranslator(this); - tfn = qpeDir()+"/i18n/"+lang+"/"+d->appName+".qm"; - if ( trans->load( tfn )) - installTranslator( trans ); - else - delete trans; - - //###language/font hack; should look it up somewhere - if ( lang == "ja" || lang == "zh_CN" || lang == "zh_TW" || lang == "ko" ) { - QFont fn = FontManager::unicodeFont( FontManager::Proportional ); - setFont( fn ); - } - else { - Config config( "qpe" ); - config.setGroup( "Appearance" ); - QString familyStr = config.readEntry( "FontFamily", "helvetica" ); - QString styleStr = config.readEntry( "FontStyle", "Regular" ); - QString sizeStr = config.readEntry( "FontSize", "10" ); - QString charSetStr = config.readEntry( "FontCharSet", QString::null ); - bool ok; - int i_size = sizeStr.toInt( &ok, 10 ); - FontDatabase fdb; - QFont selectedFont = fdb.font( familyStr, styleStr, i_size, charSetStr ); - setFont( selectedFont ); - } - } + + QStringList langs = Global::languageList(); + for ( QStringList::ConstIterator it = langs.begin(); it != langs.end(); ++it ) { + QString lang = *it; + + QTranslator * trans; + QString tfn; + + trans = new QTranslator( this ); + tfn = qpeDir() + "/i18n/" + lang + "/libqpe.qm"; + if ( trans->load( tfn ) ) + installTranslator( trans ); + else + delete trans; + + trans = new QTranslator( this ); + tfn = qpeDir() + "/i18n/" + lang + "/" + d->appName + ".qm"; + if ( trans->load( tfn ) ) + installTranslator( trans ); + else + delete trans; + + //###language/font hack; should look it up somewhere + if ( lang == "ja" || lang == "zh_CN" || lang == "zh_TW" || lang == "ko" ) { + QFont fn = FontManager::unicodeFont( FontManager::Proportional ); + setFont( fn ); + } + else { + Config config( "qpe" ); + config.setGroup( "Appearance" ); + QString familyStr = config.readEntry( "FontFamily", "helvetica" ); + QString styleStr = config.readEntry( "FontStyle", "Regular" ); + QString sizeStr = config.readEntry( "FontSize", "10" ); + QString charSetStr = config.readEntry( "FontCharSet", QString::null ); + bool ok; + int i_size = sizeStr.toInt( &ok, 10 ); + FontDatabase fdb; + QFont selectedFont = fdb.font( familyStr, styleStr, i_size, charSetStr ); + setFont( selectedFont ); + } + } #endif - applyStyle(); + applyStyle(); - if ( type() == GuiServer ) { - setScreenSaverInterval(-1); - setVolume(); - QWSServer::setScreenSaver(new QPEScreenSaver); - } + if ( type() == GuiServer ) { + setScreenSaverInterval( -1 ); + setVolume(); + QWSServer::setScreenSaver( new QPEScreenSaver ); + } - installEventFilter( this ); + installEventFilter( this ); - QPEMenuToolFocusManager::initialize(); + QPEMenuToolFocusManager::initialize(); #ifdef QT_NO_QWS_CURSOR - // if we have no cursor, probably don't want tooltips - QToolTip::setEnabled( FALSE ); + // if we have no cursor, probably don't want tooltips + QToolTip::setEnabled( FALSE ); #endif } -static QPtrDict<void>* inputMethodDict=0; +static QPtrDict<void>* inputMethodDict = 0; static void createInputMethodDict() { - if ( !inputMethodDict ) - inputMethodDict = new QPtrDict<void>; + if ( !inputMethodDict ) + inputMethodDict = new QPtrDict<void>; } /*! Returns the currently set hint to the system as to whether \a w has any use for text input methods. - + \sa setInputMethodHint() */ -QPEApplication::InputMethodHint QPEApplication::inputMethodHint( QWidget* w ) +QPEApplication::InputMethodHint QPEApplication::inputMethodHint( QWidget * w ) { - if ( inputMethodDict && w ) - return (InputMethodHint)(int)inputMethodDict->find(w); - return Normal; + if ( inputMethodDict && w ) + return ( InputMethodHint ) ( int ) inputMethodDict->find( w ); + return Normal; } /*! \enum QPEApplication::InputMethodHint - + \value Normal the application sometimes needs text input (the default). \value AlwaysOff the application never needs text input. \value AlwaysOn the application always needs text input. */ /*! Hints to the system that \a w has use for text input methods as specified by \a mode. - + \sa inputMethodHint() */ -void QPEApplication::setInputMethodHint( QWidget* w, InputMethodHint mode ) +void QPEApplication::setInputMethodHint( QWidget * w, InputMethodHint mode ) { - createInputMethodDict(); - if ( mode == Normal ) { - inputMethodDict->remove(w); - } else { - inputMethodDict->insert(w,(void*)mode); - } + createInputMethodDict(); + if ( mode == Normal ) { + inputMethodDict->remove + ( w ); + } + else { + inputMethodDict->insert( w, ( void* ) mode ); + } } class HackDialog : public QDialog { public: - void acceptIt() { accept(); } - void rejectIt() { reject(); } + void acceptIt() + { + accept(); + } + void rejectIt() + { + reject(); + } }; -void QPEApplication::mapToDefaultAction( QWSKeyEvent *ke, int key ) +void QPEApplication::mapToDefaultAction( QWSKeyEvent * ke, int key ) { - // specialised actions for certain widgets. May want to - // add more stuff here. - if ( activePopupWidget() && activePopupWidget()->inherits( "QListBox" ) - && activePopupWidget()->parentWidget() - && activePopupWidget()->parentWidget()->inherits( "QComboBox" ) ) - key = Qt::Key_Return; + // specialised actions for certain widgets. May want to + // add more stuff here. + if ( activePopupWidget() && activePopupWidget() ->inherits( "QListBox" ) + && activePopupWidget() ->parentWidget() + && activePopupWidget() ->parentWidget() ->inherits( "QComboBox" ) ) + key = Qt::Key_Return; - if ( activePopupWidget() && activePopupWidget()->inherits( "QPopupMenu" ) ) - key = Qt::Key_Return; + if ( activePopupWidget() && activePopupWidget() ->inherits( "QPopupMenu" ) ) + key = Qt::Key_Return; - ke->simpleData.keycode = key; + ke->simpleData.keycode = key; } class HackWidget : public QWidget { public: - bool needsOk() - { return (getWState() & WState_Reserved1 ); } + bool needsOk() + { + return ( getWState() & WState_Reserved1 ); + } }; /*! \internal */ -bool QPEApplication::qwsEventFilter( QWSEvent *e ) +bool QPEApplication::qwsEventFilter( QWSEvent * e ) { - if ( !d->notbusysent && e->type == QWSEvent::Focus ) { - if ( qApp->type() != QApplication::GuiServer ) { - QCopEnvelope e("QPE/System", "notBusy(QString)" ); - e << d->appName; - } - d->notbusysent=TRUE; - } - if ( type() == GuiServer ) { - switch ( e->type ) { - case QWSEvent::Mouse: - if ( e->asMouse()->simpleData.state && !QWidget::find(e->window()) ) - emit clientMoused(); - } - } - if ( e->type == QWSEvent::Key ) { - if ( d->kbgrabber == 1 ) - return TRUE; - QWSKeyEvent *ke = (QWSKeyEvent *)e; - if ( ke->simpleData.keycode == Qt::Key_F33 ) { - // Use special "OK" key to press "OK" on top level widgets - QWidget *active = activeWindow(); - QWidget *popup = 0; - if ( active && active->isPopup() ) { - popup = active; - active = active->parentWidget(); - } - if ( active && (int)active->winId() == ke->simpleData.window && - !active->testWFlags( WStyle_Customize|WType_Popup|WType_Desktop )) { - if ( ke->simpleData.is_press ) { - if ( popup ) - popup->close(); - if ( active->inherits( "QDialog" ) ) { - HackDialog *d = (HackDialog *)active; - d->acceptIt(); - return TRUE; - } else if ( ((HackWidget *)active)->needsOk() ) { - QSignal s; - s.connect( active, SLOT( accept() ) ); - s.activate(); - } else { - // do the same as with the select key: Map to the default action of the widget: - mapToDefaultAction( ke, Qt::Key_Return ); - } - } - } - } else if ( ke->simpleData.keycode == Qt::Key_F30 ) { - // Use special "select" key to do whatever default action a widget has - mapToDefaultAction( ke, Qt::Key_Space ); - } else if ( ke->simpleData.keycode == Qt::Key_Escape && - ke->simpleData.is_press ) { - // Escape key closes app if focus on toplevel - QWidget *active = activeWindow(); - if ( active && active->testWFlags( WType_TopLevel ) && - (int)active->winId() == ke->simpleData.window && - !active->testWFlags( WStyle_Dialog|WStyle_Customize|WType_Popup|WType_Desktop )) { - if ( active->inherits( "QDialog" ) ) { - HackDialog *d = (HackDialog *)active; - d->rejectIt(); - return TRUE; - } else if ( strcmp( argv()[0], "embeddedkonsole") != 0 ) { - active->close(); - } - } - } + if ( !d->notbusysent && e->type == QWSEvent::Focus ) { + if ( qApp->type() != QApplication::GuiServer ) { + QCopEnvelope e( "QPE/System", "notBusy(QString)" ); + e << d->appName; + } + d->notbusysent = TRUE; + } + if ( type() == GuiServer ) { + switch ( e->type ) { + case QWSEvent::Mouse: + if ( e->asMouse() ->simpleData.state && !QWidget::find( e->window() ) ) + emit clientMoused(); + } + } + if ( e->type == QWSEvent::Key ) { + if ( d->kbgrabber == 1 ) + return TRUE; + QWSKeyEvent *ke = ( QWSKeyEvent * ) e; + if ( ke->simpleData.keycode == Qt::Key_F33 ) { + // Use special "OK" key to press "OK" on top level widgets + QWidget * active = activeWindow(); + QWidget *popup = 0; + if ( active && active->isPopup() ) { + popup = active; + active = active->parentWidget(); + } + if ( active && ( int ) active->winId() == ke->simpleData.window && + !active->testWFlags( WStyle_Customize | WType_Popup | WType_Desktop ) ) { + if ( ke->simpleData.is_press ) { + if ( popup ) + popup->close(); + if ( active->inherits( "QDialog" ) ) { + HackDialog * d = ( HackDialog * ) active; + d->acceptIt(); + return TRUE; + } + else if ( ( ( HackWidget * ) active ) ->needsOk() ) { + QSignal s; + s.connect( active, SLOT( accept() ) ); + s.activate(); + } + else { + // do the same as with the select key: Map to the default action of the widget: + mapToDefaultAction( ke, Qt::Key_Return ); + } + } + } + } + else if ( ke->simpleData.keycode == Qt::Key_F30 ) { + // Use special "select" key to do whatever default action a widget has + mapToDefaultAction( ke, Qt::Key_Space ); + } + else if ( ke->simpleData.keycode == Qt::Key_Escape && + ke->simpleData.is_press ) { + // Escape key closes app if focus on toplevel + QWidget * active = activeWindow(); + if ( active && active->testWFlags( WType_TopLevel ) && + ( int ) active->winId() == ke->simpleData.window && + !active->testWFlags( WStyle_Dialog | WStyle_Customize | WType_Popup | WType_Desktop ) ) { + if ( active->inherits( "QDialog" ) ) { + HackDialog * d = ( HackDialog * ) active; + d->rejectIt(); + return TRUE; + } + else if ( strcmp( argv() [ 0 ], "embeddedkonsole" ) != 0 ) { + active->close(); + } + } + } #if QT_VERSION < 231 - // Filter out the F4/Launcher key from apps - // ### The launcher key may not always be F4 on all devices - if ( ((QWSKeyEvent *)e)->simpleData.keycode == Qt::Key_F4 ) - return TRUE; + // Filter out the F4/Launcher key from apps + // ### The launcher key may not always be F4 on all devices + if ( ( ( QWSKeyEvent * ) e ) ->simpleData.keycode == Qt::Key_F4 ) + return TRUE; #endif - } - if ( e->type == QWSEvent::Focus ) { - QWSFocusEvent *fe = (QWSFocusEvent*)e; - QWidget* nfw = QWidget::find(e->window()); - if ( !fe->simpleData.get_focus ) { - QWidget *active = activeWindow(); - while ( active && active->isPopup() ) { - active->close(); - active = activeWindow(); - } - if ( !nfw && d->kbgrabber == 2 ) { - ungrabKeyboard(); - d->kbregrab = TRUE; // want kb back when we're active - } - } else { - // make sure our modal widget is ALWAYS on top - QWidget *topm = activeModalWidget(); - if ( topm ) { - topm->raise(); - } - if ( d->kbregrab ) { - grabKeyboard(); - d->kbregrab = FALSE; - } - } - if ( fe->simpleData.get_focus && inputMethodDict ) { - InputMethodHint m = inputMethodHint( QWidget::find(e->window()) ); - if ( m == AlwaysOff ) - Global::hideInputMethod(); - if ( m == AlwaysOn ) - Global::showInputMethod(); - } - } - return QApplication::qwsEventFilter( e ); + + } + if ( e->type == QWSEvent::Focus ) { + QWSFocusEvent * fe = ( QWSFocusEvent* ) e; + QWidget* nfw = QWidget::find( e->window() ); + if ( !fe->simpleData.get_focus ) { + QWidget * active = activeWindow(); + while ( active && active->isPopup() ) { + active->close(); + active = activeWindow(); + } + if ( !nfw && d->kbgrabber == 2 ) { + ungrabKeyboard(); + d->kbregrab = TRUE; // want kb back when we're active + } + } + else { + // make sure our modal widget is ALWAYS on top + QWidget *topm = activeModalWidget(); + if ( topm ) { + topm->raise(); + } + if ( d->kbregrab ) { + grabKeyboard(); + d->kbregrab = FALSE; + } + } + if ( fe->simpleData.get_focus && inputMethodDict ) { + InputMethodHint m = inputMethodHint( QWidget::find( e->window() ) ); + if ( m == AlwaysOff ) + Global::hideInputMethod(); + if ( m == AlwaysOn ) + Global::showInputMethod(); + } + } + return QApplication::qwsEventFilter( e ); } /*! Destroys the QPEApplication. */ QPEApplication::~QPEApplication() { - ungrabKeyboard(); + ungrabKeyboard(); #if defined(Q_WS_QWS) && !defined(QT_NO_COP) - // Need to delete QCopChannels early, since the display will - // be gone by the time we get to ~QObject(). - delete sysChannel; - delete pidChannel; + // Need to delete QCopChannels early, since the display will + // be gone by the time we get to ~QObject(). + delete sysChannel; + delete pidChannel; #endif - delete d; + + delete d; } /*! Returns <tt>$OPIEDIR/</tt>. */ QString QPEApplication::qpeDir() { - const char *base = getenv( "OPIEDIR" ); - if ( base ) - return QString( base ) + "/"; + const char * base = getenv( "OPIEDIR" ); + if ( base ) + return QString( base ) + "/"; - return QString( "../" ); + return QString( "../" ); } /*! Returns the user's current Document directory. There is a trailing "/". */ QString QPEApplication::documentDir() { - const char *base = getenv( "HOME" ); - if ( base ) - return QString( base ) + "/Documents/"; + const char * base = getenv( "HOME" ); + if ( base ) + return QString( base ) + "/Documents/"; - return QString( "../Documents/" ); + return QString( "../Documents/" ); } -static int deforient=-1; +static int deforient = -1; /*! \internal */ int QPEApplication::defaultRotation() { - if ( deforient < 0 ) { - QString d = getenv("QWS_DISPLAY"); - if ( d.contains("Rot90") ) { - deforient = 90; - } else if ( d.contains("Rot180") ) { - deforient = 180; - } else if ( d.contains("Rot270") ) { - deforient = 270; - } else { - deforient=0; - } - } - return deforient; + if ( deforient < 0 ) { + QString d = getenv( "QWS_DISPLAY" ); + if ( d.contains( "Rot90" ) ) { + deforient = 90; + } + else if ( d.contains( "Rot180" ) ) { + deforient = 180; + } + else if ( d.contains( "Rot270" ) ) { + deforient = 270; + } + else { + deforient = 0; + } + } + return deforient; } /*! \internal */ -void QPEApplication::setDefaultRotation(int r) +void QPEApplication::setDefaultRotation( int r ) { - if ( qApp->type() == GuiServer ) { - deforient = r; - setenv("QWS_DISPLAY", QString("Transformed:Rot%1:0").arg(r).latin1(), 1); - } else { - QCopEnvelope("QPE/System", "setDefaultRotation(int)") << r; - } + if ( qApp->type() == GuiServer ) { + deforient = r; + setenv( "QWS_DISPLAY", QString( "Transformed:Rot%1:0" ).arg( r ).latin1(), 1 ); + } + else { + QCopEnvelope( "QPE/System", "setDefaultRotation(int)" ) << r; + } } /*! \internal */ void QPEApplication::applyStyle() { - Config config( "qpe" ); - - config.setGroup( "Appearance" ); - - // Widget style - QString style = config.readEntry( "Style", "Light" ); - internalSetStyle( style ); - - // Colors - QColor bgcolor( config.readEntry( "Background", "#E5E1D5" ) ); - QColor btncolor( config.readEntry( "Button", "#D6CDBB" ) ); - QPalette pal( btncolor, bgcolor ); - QString color = config.readEntry( "Highlight", "#800000" ); - pal.setColor( QColorGroup::Highlight, QColor(color) ); - color = config.readEntry( "HighlightedText", "#FFFFFF" ); - pal.setColor( QColorGroup::HighlightedText, QColor(color) ); - color = config.readEntry( "Text", "#000000" ); - pal.setColor( QColorGroup::Text, QColor(color) ); - color = config.readEntry( "ButtonText", "#000000" ); - pal.setColor( QPalette::Active, QColorGroup::ButtonText, QColor(color) ); - color = config.readEntry( "Base", "#FFFFFF" ); - pal.setColor( QColorGroup::Base, QColor(color) ); - - pal.setColor( QPalette::Disabled, QColorGroup::Text, - pal.color(QPalette::Active, QColorGroup::Background).dark() ); - - setPalette( pal, TRUE ); + Config config( "qpe" ); + + config.setGroup( "Appearance" ); + + // Widget style + QString style = config.readEntry( "Style", "Light" ); + internalSetStyle( style ); + + // Colors + QColor bgcolor( config.readEntry( "Background", "#E5E1D5" ) ); + QColor btncolor( config.readEntry( "Button", "#D6CDBB" ) ); + QPalette pal( btncolor, bgcolor ); + QString color = config.readEntry( "Highlight", "#800000" ); + pal.setColor( QColorGroup::Highlight, QColor( color ) ); + color = config.readEntry( "HighlightedText", "#FFFFFF" ); + pal.setColor( QColorGroup::HighlightedText, QColor( color ) ); + color = config.readEntry( "Text", "#000000" ); + pal.setColor( QColorGroup::Text, QColor( color ) ); + color = config.readEntry( "ButtonText", "#000000" ); + pal.setColor( QPalette::Active, QColorGroup::ButtonText, QColor( color ) ); + color = config.readEntry( "Base", "#FFFFFF" ); + pal.setColor( QColorGroup::Base, QColor( color ) ); + + pal.setColor( QPalette::Disabled, QColorGroup::Text, + pal.color( QPalette::Active, QColorGroup::Background ).dark() ); + + setPalette( pal, TRUE ); } -void QPEApplication::systemMessage( const QCString &msg, const QByteArray &data) +void QPEApplication::systemMessage( const QCString & msg, const QByteArray & data ) { #ifdef Q_WS_QWS - QDataStream stream( data, IO_ReadOnly ); - if ( msg == "applyStyle()" ) { - applyStyle(); - } else if ( msg == "setScreenSaverInterval(int)" ) { - if ( type() == GuiServer ) { - int time; - stream >> time; - setScreenSaverInterval(time); - } - } else if ( msg == "setScreenSaverIntervals(int,int,int)" ) { - if ( type() == GuiServer ) { - int t1,t2,t3; - stream >> t1 >> t2 >> t3; - setScreenSaverIntervals(t1,t2,t3); - } - } else if ( msg == "setBacklight(int)" ) { - if ( type() == GuiServer ) { - int bright; - stream >> bright; - setBacklight(bright); - } - } else if ( msg == "setDefaultRotation(int)" ) { - if ( type() == GuiServer ) { - int r; - stream >> r; - setDefaultRotation(r); - } - } else if ( msg == "shutdown()" ) { - if ( type() == GuiServer ) - shutdown(); - } else if ( msg == "quit()" ) { - if ( type() != GuiServer ) - tryQuit(); - } else if ( msg == "forceQuit()" ) { - if ( type() != GuiServer ) - quit(); - } else if ( msg == "restart()" ) { - if ( type() == GuiServer ) - restart(); - } else if ( msg == "grabKeyboard(QString)" ) { - QString who; - stream >> who; - if ( who.isEmpty() ) - d->kbgrabber = 0; - else if ( who != d->appName ) - d->kbgrabber = 1; - else - d->kbgrabber = 2; - } else if ( msg == "language(QString)" ) { - if ( type() == GuiServer ) { - QString l; - stream >> l; - QString cl = getenv("LANG"); - if ( cl != l ) { - if ( l.isNull() ) - unsetenv( "LANG" ); - else - setenv( "LANG", l.latin1(), 1 ); - restart(); - } - } - } else if ( msg == "timeChange(QString)" ) { - QString t; - stream >> t; - if ( t.isNull() ) - unsetenv( "TZ" ); - else - setenv( "TZ", t.latin1(), 1 ); - // emit the signal so everyone else knows... - emit timeChanged(); - } else if ( msg == "execute(QString)" ) { - if ( type() == GuiServer ) { - QString t; - stream >> t; - Global::execute( t ); - } - } else if ( msg == "execute(QString,QString)" ) { - if ( type() == GuiServer ) { - QString t,d; - stream >> t >> d; - Global::execute( t, d ); - } - } else if ( msg == "addAlarm(QDateTime,QCString,QCString,int)" ) { - if ( type() == GuiServer ) { - QDateTime when; - QCString channel, message; - int data; - stream >> when >> channel >> message >> data; - AlarmServer::addAlarm( when, channel, message, data ); - } - } else if ( msg == "deleteAlarm(QDateTime,QCString,QCString,int)" ) { - if ( type() == GuiServer ) { - QDateTime when; - QCString channel, message; - int data; - stream >> when >> channel >> message >> data; - AlarmServer::deleteAlarm( when, channel, message, data ); - } - } else if ( msg == "clockChange(bool)" ) { - int tmp; - stream >> tmp; - emit clockChanged( tmp ); - } else if ( msg == "weekChange(bool)" ) { - int tmp; - stream >> tmp; - emit weekChanged( tmp ); - } else if ( msg == "setDateFormat(DateFormat)" ) { - DateFormat tmp; - stream >> tmp; - emit dateFormatChanged( tmp ); - } else if ( msg == "setVolume(int,int)" ) { - int t,v; - stream >> t >> v; - setVolume(t,v); - emit volumeChanged( muted ); - } else if ( msg == "volumeChange(bool)" ) { - stream >> muted; - setVolume(); - emit volumeChanged( muted ); - } else if ( msg == "setMic(int,int)") { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com> - int t,v; - stream >> t >> v; - setMic(t,v); - emit micChanged( micMuted ); - } else if ( msg == "micChange(bool)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com> - stream >> micMuted; - setMic(); - emit micChanged( micMuted ); - } else if ( msg == "setScreenSaverMode(int)" ) { - if ( type() == GuiServer ) { - int old = disable_suspend; - stream >> disable_suspend; - //qDebug("setScreenSaverMode(%d)", disable_suspend ); - if ( disable_suspend > old ) - setScreenSaverInterval( -1 ); - } - } + QDataStream stream( data, IO_ReadOnly ); + if ( msg == "applyStyle()" ) { + applyStyle(); + } + else if ( msg == "setScreenSaverInterval(int)" ) { + if ( type() == GuiServer ) { + int time; + stream >> time; + setScreenSaverInterval( time ); + } + } + else if ( msg == "setScreenSaverIntervals(int,int,int)" ) { + if ( type() == GuiServer ) { + int t1, t2, t3; + stream >> t1 >> t2 >> t3; + setScreenSaverIntervals( t1, t2, t3 ); + } + } + else if ( msg == "setBacklight(int)" ) { + if ( type() == GuiServer ) { + int bright; + stream >> bright; + setBacklight( bright ); + } + } + else if ( msg == "setDefaultRotation(int)" ) { + if ( type() == GuiServer ) { + int r; + stream >> r; + setDefaultRotation( r ); + } + } + else if ( msg == "shutdown()" ) { + if ( type() == GuiServer ) + shutdown(); + } + else if ( msg == "quit()" ) { + if ( type() != GuiServer ) + tryQuit(); + } + else if ( msg == "forceQuit()" ) { + if ( type() != GuiServer ) + quit(); + } + else if ( msg == "restart()" ) { + if ( type() == GuiServer ) + restart(); + } + else if ( msg == "grabKeyboard(QString)" ) { + QString who; + stream >> who; + if ( who.isEmpty() ) + d->kbgrabber = 0; + else if ( who != d->appName ) + d->kbgrabber = 1; + else + d->kbgrabber = 2; + } + else if ( msg == "language(QString)" ) { + if ( type() == GuiServer ) { + QString l; + stream >> l; + QString cl = getenv( "LANG" ); + if ( cl != l ) { + if ( l.isNull() ) + unsetenv( "LANG" ); + else + setenv( "LANG", l.latin1(), 1 ); + restart(); + } + } + } + else if ( msg == "timeChange(QString)" ) { + QString t; + stream >> t; + if ( t.isNull() ) + unsetenv( "TZ" ); + else + setenv( "TZ", t.latin1(), 1 ); + // emit the signal so everyone else knows... + emit timeChanged(); + } + else if ( msg == "execute(QString)" ) { + if ( type() == GuiServer ) { + QString t; + stream >> t; + Global::execute( t ); + } + } + else if ( msg == "execute(QString,QString)" ) { + if ( type() == GuiServer ) { + QString t, d; + stream >> t >> d; + Global::execute( t, d ); + } + } + else if ( msg == "addAlarm(QDateTime,QCString,QCString,int)" ) { + if ( type() == GuiServer ) { + QDateTime when; + QCString channel, message; + int data; + stream >> when >> channel >> message >> data; + AlarmServer::addAlarm( when, channel, message, data ); + } + } + else if ( msg == "deleteAlarm(QDateTime,QCString,QCString,int)" ) { + if ( type() == GuiServer ) { + QDateTime when; + QCString channel, message; + int data; + stream >> when >> channel >> message >> data; + AlarmServer::deleteAlarm( when, channel, message, data ); + } + } + else if ( msg == "clockChange(bool)" ) { + int tmp; + stream >> tmp; + emit clockChanged( tmp ); + } + else if ( msg == "weekChange(bool)" ) { + int tmp; + stream >> tmp; + emit weekChanged( tmp ); + } + else if ( msg == "setDateFormat(DateFormat)" ) { + DateFormat tmp; + stream >> tmp; + emit dateFormatChanged( tmp ); + } + else if ( msg == "setVolume(int,int)" ) { + int t, v; + stream >> t >> v; + setVolume( t, v ); + emit volumeChanged( muted ); + } + else if ( msg == "volumeChange(bool)" ) { + stream >> muted; + setVolume(); + emit volumeChanged( muted ); + } + else if ( msg == "setMic(int,int)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com> + int t, v; + stream >> t >> v; + setMic( t, v ); + emit micChanged( micMuted ); + } + else if ( msg == "micChange(bool)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com> + stream >> micMuted; + setMic(); + emit micChanged( micMuted ); + } + else if ( msg == "setScreenSaverMode(int)" ) { + if ( type() == GuiServer ) { + int old = disable_suspend; + stream >> disable_suspend; + //qDebug("setScreenSaverMode(%d)", disable_suspend ); + if ( disable_suspend > old ) + setScreenSaverInterval( -1 ); + } + } #endif } /*! \internal */ bool QPEApplication::raiseAppropriateWindow() { - bool r=FALSE; - // ########## raise()ing main window should raise and set active - // ########## it and then all childen. This belongs in Qt/Embedded - QWidget *top = d->qpe_main_widget; - if ( !top ) top =mainWidget(); - if ( top && d->keep_running ) { - if ( top->isVisible() ) - r = TRUE; + bool r = FALSE; + // ########## raise()ing main window should raise and set active + // ########## it and then all childen. This belongs in Qt/Embedded + QWidget *top = d->qpe_main_widget; + if ( !top ) + top = mainWidget(); + if ( top && d->keep_running ) { + if ( top->isVisible() ) + r = TRUE; #ifdef Q_WS_QWS - if ( !d->nomaximize ) - top->showMaximized(); - else + + if ( !d->nomaximize ) + top->showMaximized(); + else #endif - top->show(); - top->raise(); - top->setActiveWindow(); - } - QWidget *topm = activeModalWidget(); - if ( topm && topm != top ) { - topm->show(); - topm->raise(); - topm->setActiveWindow(); - r = FALSE; - } - return r; + + top->show(); + top->raise(); + top->setActiveWindow(); + } + QWidget *topm = activeModalWidget(); + if ( topm && topm != top ) { + topm->show(); + topm->raise(); + topm->setActiveWindow(); + r = FALSE; + } + return r; } -void QPEApplication::pidMessage( const QCString &msg, const QByteArray & data) +void QPEApplication::pidMessage( const QCString &msg, const QByteArray & data ) { #ifdef Q_WS_QWS - if ( msg == "quit()" ) { - tryQuit(); - } else if ( msg == "quitIfInvisible()" ) { - if ( d->qpe_main_widget && !d->qpe_main_widget->isVisible() ) - quit(); - } else if ( msg == "close()" ) { - hideOrQuit(); - } else if ( msg == "disablePreload()" ) { - d->preloaded = FALSE; - d->keep_running = TRUE; - /* so that quit will quit */ - } else if ( msg == "enablePreload()" ) { - d->preloaded = TRUE; - d->keep_running = TRUE; - /* so next quit won't quit */ - } else if ( msg == "raise()" ) { - d->keep_running = TRUE; - d->notbusysent = FALSE; - raiseAppropriateWindow(); - } else if ( msg == "flush()" ) { - emit flush(); - // we need to tell the desktop - QCopEnvelope e( "QPE/Desktop", "flushDone(QString)" ); - e << d->appName; - } else if ( msg == "reload()" ) { - emit reload(); - } else if ( msg == "setDocument(QString)" ) { - d->keep_running = TRUE; - QDataStream stream( data, IO_ReadOnly ); - QString doc; - stream >> doc; - QWidget *mw = mainWidget(); - if ( !mw ) - mw = d->qpe_main_widget; - if ( mw ) - Global::setDocument( mw, doc ); - } else if ( msg == "nextView()" ) { - if ( raiseAppropriateWindow() ) - emit appMessage( msg, data); - } else { - emit appMessage( msg, data); - } + if ( msg == "quit()" ) { + tryQuit(); + } + else if ( msg == "quitIfInvisible()" ) { + if ( d->qpe_main_widget && !d->qpe_main_widget->isVisible() ) + quit(); + } + else if ( msg == "close()" ) { + hideOrQuit(); + } + else if ( msg == "disablePreload()" ) { + d->preloaded = FALSE; + d->keep_running = TRUE; + /* so that quit will quit */ + } + else if ( msg == "enablePreload()" ) { + d->preloaded = TRUE; + d->keep_running = TRUE; + /* so next quit won't quit */ + } + else if ( msg == "raise()" ) { + d->keep_running = TRUE; + d->notbusysent = FALSE; + raiseAppropriateWindow(); + } + else if ( msg == "flush()" ) { + emit flush(); + // we need to tell the desktop + QCopEnvelope e( "QPE/Desktop", "flushDone(QString)" ); + e << d->appName; + } + else if ( msg == "reload()" ) { + emit reload(); + } + else if ( msg == "setDocument(QString)" ) { + d->keep_running = TRUE; + QDataStream stream( data, IO_ReadOnly ); + QString doc; + stream >> doc; + QWidget *mw = mainWidget(); + if ( !mw ) + mw = d->qpe_main_widget; + if ( mw ) + Global::setDocument( mw, doc ); + } + else if ( msg == "nextView()" ) { + if ( raiseAppropriateWindow() ) + emit appMessage( msg, data ); + } + else { + emit appMessage( msg, data ); + } #endif } static bool setWidgetCaptionFromAppName( QWidget* /*mw*/, const QString& /*appName*/, const QString& /*appsPath*/ ) { -/* - // This works but disable it for now until it is safe to apply - // What is does is scan the .desktop files of all the apps for - // the applnk that has the corresponding argv[0] as this program - // then it uses the name stored in the .desktop file as the caption - // for the main widget. This saves duplicating translations for - // the app name in the program and in the .desktop files. - - AppLnkSet apps( appsPath ); - - QList<AppLnk> appsList = apps.children(); - for ( QListIterator<AppLnk> it(appsList); it.current(); ++it ) { - if ( (*it)->exec() == appName ) { - mw->setCaption( (*it)->name() ); - return TRUE; - } - } -*/ - return FALSE; + /* + // This works but disable it for now until it is safe to apply + // What is does is scan the .desktop files of all the apps for + // the applnk that has the corresponding argv[0] as this program + // then it uses the name stored in the .desktop file as the caption + // for the main widget. This saves duplicating translations for + // the app name in the program and in the .desktop files. + + AppLnkSet apps( appsPath ); + + QList<AppLnk> appsList = apps.children(); + for ( QListIterator<AppLnk> it(appsList); it.current(); ++it ) { + if ( (*it)->exec() == appName ) { + mw->setCaption( (*it)->name() ); + return TRUE; + } + } + */ + return FALSE; } /*! Sets \a mw as the mainWidget() and shows it. For small windows, consider passing TRUE for \a nomaximize rather than the default FALSE. - + \sa showMainDocumentWidget() */ void QPEApplication::showMainWidget( QWidget* mw, bool nomaximize ) { - setWidgetCaptionFromAppName( mw, d->appName, qpeDir() + "apps" ); + setWidgetCaptionFromAppName( mw, d->appName, qpeDir() + "apps" ); - d->nomaximize = nomaximize; - d->qpe_main_widget = mw; - d->sendQCopQ(); - if ( d->preloaded ) { - if(d->forceshow) { + d->nomaximize = nomaximize; + d->qpe_main_widget = mw; + d->sendQCopQ(); + if ( d->preloaded ) { + if ( d->forceshow ) { #ifdef Q_WS_QWS - if ( !nomaximize ) - mw->showMaximized(); - else + if ( !nomaximize ) + mw->showMaximized(); + else #endif - mw->show(); - } - } else if ( d->keep_running ) { + + mw->show(); + } + } + else if ( d->keep_running ) { #ifdef Q_WS_QWS - if ( !nomaximize ) - mw->showMaximized(); - else + if ( !nomaximize ) + mw->showMaximized(); + else #endif - mw->show(); - } + + mw->show(); + } } /*! Sets \a mw as the mainWidget() and shows it. For small windows, consider passing TRUE for \a nomaximize rather than the default FALSE. - + This calls designates the application as a \link docwidget.html document-oriented\endlink application. - + The \a mw widget must have a slot: setDocument(const QString&). - + \sa showMainWidget() */ void QPEApplication::showMainDocumentWidget( QWidget* mw, bool nomaximize ) { - setWidgetCaptionFromAppName( mw, d->appName, qpeDir() + "apps" ); - - if ( mw && argc() == 2 ) - Global::setDocument( mw, QString::fromUtf8(argv()[1]) ); - d->nomaximize = nomaximize; - d->qpe_main_widget = mw; - d->sendQCopQ(); - if ( d->preloaded ) { - if(d->forceshow) { + setWidgetCaptionFromAppName( mw, d->appName, qpeDir() + "apps" ); + + if ( mw && argc() == 2 ) + Global::setDocument( mw, QString::fromUtf8( argv() [ 1 ] ) ); + d->nomaximize = nomaximize; + d->qpe_main_widget = mw; + d->sendQCopQ(); + if ( d->preloaded ) { + if ( d->forceshow ) { #ifdef Q_WS_QWS - if ( !nomaximize ) - mw->showMaximized(); - else + if ( !nomaximize ) + mw->showMaximized(); + else #endif - mw->show(); - } - } else if ( d->keep_running ) { + + mw->show(); + } + } + else if ( d->keep_running ) { #ifdef Q_WS_QWS - if ( !nomaximize ) - mw->showMaximized(); - else + if ( !nomaximize ) + mw->showMaximized(); + else #endif - mw->show(); - } + + mw->show(); + } } /*! Sets that the application should continue running after processing qcop messages. Normally if an application is started via a qcop message, the application will process the qcop message and then quit. If while processing the qcop message it calls this function, then the application will show and start proper once it has finished processing qcop messages. - + \sa keepRunning() */ void QPEApplication::setKeepRunning() { - if ( qApp && qApp->inherits( "QPEApplication" ) ) { - QPEApplication *qpeApp = (QPEApplication*)qApp; - qpeApp->d->keep_running = TRUE; - } + if ( qApp && qApp->inherits( "QPEApplication" ) ) { + QPEApplication * qpeApp = ( QPEApplication* ) qApp; + qpeApp->d->keep_running = TRUE; + } } /*! Returns whether the application will quit after processing the current list of qcop messages. - + \sa setKeepRunning() */ bool QPEApplication::keepRunning() const { - return d->keep_running; + return d->keep_running; } /*! \internal */ void QPEApplication::internalSetStyle( const QString &style ) { #if QT_VERSION >= 300 - if ( style == "QPE" ) { - setStyle( new QPEStyle ); - } else { - QStyle *s = QStyleFactory::create(style); - if ( s ) setStyle(s); - } + if ( style == "QPE" ) { + setStyle( new QPEStyle ); + } + else { + QStyle *s = QStyleFactory::create( style ); + if ( s ) + setStyle( s ); + } #else - if ( style == "Windows" ) { - setStyle( new QWindowsStyle ); - } else if ( style == "QPE" ) { - setStyle( new QPEStyle ); - } else if ( style == "Light" ) { - setStyle( new LightStyle ); - } + if ( style == "Windows" ) { + setStyle( new QWindowsStyle ); + } + else if ( style == "QPE" ) { + setStyle( new QPEStyle ); + } + else if ( style == "Light" ) { + setStyle( new LightStyle ); + } #ifndef QT_NO_STYLE_PLATINUM - else if ( style == "Platinum" ) { - setStyle( new QPlatinumStyle ); - } + else if ( style == "Platinum" ) { + setStyle( new QPlatinumStyle ); + } #endif #ifndef QT_NO_STYLE_MOTIF - else if ( style == "Motif" ) { - setStyle( new QMotifStyle ); - } + else if ( style == "Motif" ) { + setStyle( new QMotifStyle ); + } #endif #ifndef QT_NO_STYLE_MOTIFPLUS - else if ( style == "MotifPlus" ) { - setStyle( new QMotifPlusStyle ); - } + else if ( style == "MotifPlus" ) { + setStyle( new QMotifPlusStyle ); + } #endif // HACK for Qt2 only else { + QStyle *sty = 0; + QString path = QPEApplication::qpeDir ( ) + "/plugins/styles/lib" + style. lower ( ) + ".so"; + + static QLibrary *lastlib = 0; + static StyleInterface *lastiface = 0; + + QLibrary *lib = new QLibrary ( path ); + StyleInterface *iface = 0; + + if ( lib-> queryInterface ( IID_Style, ( QUnknownInterface ** ) &iface ) == QS_OK ) + sty = iface-> create ( ); + + if ( sty ) { + setStyle ( sty ); + + qDebug ( "Got Style: %p -- iface: %p, lib: %p\n", sty, iface, lib ); + + if ( lastiface ) + lastiface-> release ( ); + lastiface = iface; + + + if ( lastlib ) { + lastlib-> unload ( ); + delete lastlib; + } + lastlib = lib; + } + else { + if ( iface ) + iface-> release ( ); + delete lib; + + setStyle ( new QPEStyle ( )); + } + +#if 0 // style == "Liquid Style (libliquid.so)" (or "Windows XP (libxp.so)" - + int p2 = style. findRev ( ']' ); int p1 = style. findRev ( '[' ); QString style2; - - if (( p1 > 0 ) && ( p2 > 0 ) && (( p1 + 1 ) < p2 )) + + if ( ( p1 > 0 ) && ( p2 > 0 ) && ( ( p1 + 1 ) < p2 ) ) style2 = "lib" + style. mid ( p1 + 1, p2 - p1 - 1 ). lower ( ) + ".so"; else style2 = "lib" + style. lower ( ) + ".so"; - - // static QLibrary *currentlib = 0; - static void *currentlib = 0; + + static QLibrary *currentlib = 0; QString path = QPEApplication::qpeDir ( ) + "/plugins/styles/" + style2; do { // try/catch simulation - // QLibrary *lib = new QLibrary ( path, QLibrary::Immediately ); - void *lib = ::dlopen ( path. local8Bit ( ), RTLD_LAZY | RTLD_GLOBAL ); - + QLibrary *lib = new QLibrary ( path, QLibrary::Immediately ); + if ( lib ) { - //QStyle * (*fpa) ( ) = (QStyle * (*) ( )) lib-> resolve ( "allocate" ); - QStyle * (*fpa) ( ) = (QStyle * (*) ( )) ::dlsym ( lib, "allocate" ); + QStyle * ( *fpa ) ( ) = ( QStyle * ( * ) ( ) ) lib-> resolve ( "allocate" ); if ( fpa ) { - QStyle *sty = ( *fpa ) ( ); - + QStyle * sty = ( *fpa ) ( ); + if ( sty ) { setStyle ( sty ); - - if ( currentlib ) { - //delete currentlib; - ::dlclose ( currentlib ); - } + + if ( currentlib ) + delete currentlib; currentlib = lib; - + break; - } + } } - //delete lib; - ::dlclose ( lib ); + delete lib; } - } while ( false ); + } + while ( false ); + // HACK for Qt2 only +#endif } - // HACK for Qt2 only #endif } /*! \internal */ -void QPEApplication::prepareForTermination(bool willrestart) +void QPEApplication::prepareForTermination( bool willrestart ) { - if ( willrestart ) { - // Draw a big wait icon, the image can be altered in later revisions -// QWidget *d = QApplication::desktop(); - QImage img = Resource::loadImage( "launcher/new_wait" ); - QPixmap pix; - pix.convertFromImage(img.smoothScale(1*img.width(), 1*img.height())); - QLabel *lblWait = new QLabel(0, "wait hack!", QWidget::WStyle_Customize | - QWidget::WStyle_NoBorder | QWidget::WStyle_Tool ); - lblWait->setPixmap( pix ); - lblWait->setAlignment( QWidget::AlignCenter ); - lblWait->show(); - lblWait->showMaximized(); - } + if ( willrestart ) { + // Draw a big wait icon, the image can be altered in later revisions + // QWidget *d = QApplication::desktop(); + QImage img = Resource::loadImage( "launcher/new_wait" ); + QPixmap pix; + pix.convertFromImage( img.smoothScale( 1 * img.width(), 1 * img.height() ) ); + QLabel *lblWait = new QLabel( 0, "wait hack!", QWidget::WStyle_Customize | + QWidget::WStyle_NoBorder | QWidget::WStyle_Tool ); + lblWait->setPixmap( pix ); + lblWait->setAlignment( QWidget::AlignCenter ); + lblWait->show(); + lblWait->showMaximized(); + } #ifndef SINGLE_APP - { QCopEnvelope envelope("QPE/System", "forceQuit()"); } - processEvents(); // ensure the message goes out. - sleep(1); // You have 1 second to comply. + { QCopEnvelope envelope( "QPE/System", "forceQuit()" ); + } + processEvents(); // ensure the message goes out. + sleep( 1 ); // You have 1 second to comply. #endif } /*! \internal */ void QPEApplication::shutdown() { - // Implement in server's QPEApplication subclass + // Implement in server's QPEApplication subclass } /*! \internal */ void QPEApplication::restart() { - // Implement in server's QPEApplication subclass + // Implement in server's QPEApplication subclass } -static QPtrDict<void>* stylusDict=0; +static QPtrDict<void>* stylusDict = 0; static void createDict() { - if ( !stylusDict ) - stylusDict = new QPtrDict<void>; + if ( !stylusDict ) + stylusDict = new QPtrDict<void>; } /*! Returns the current StylusMode for \a w. - + \sa setStylusOperation() */ -QPEApplication::StylusMode QPEApplication::stylusOperation( QWidget* w ) +QPEApplication::StylusMode QPEApplication::stylusOperation( QWidget * w ) { - if ( stylusDict ) - return (StylusMode)(int)stylusDict->find(w); - return LeftOnly; + if ( stylusDict ) + return ( StylusMode ) ( int ) stylusDict->find( w ); + return LeftOnly; } /*! \enum QPEApplication::StylusMode - + \value LeftOnly the stylus only generates LeftButton events (the default). \value RightOnHold the stylus generates RightButton events if the user uses the press-and-hold gesture. - + See setStylusOperation(). */ /*! Causes \a w to receive mouse events according to \a mode. - + \sa stylusOperation() */ -void QPEApplication::setStylusOperation( QWidget* w, StylusMode mode ) +void QPEApplication::setStylusOperation( QWidget * w, StylusMode mode ) { - createDict(); - if ( mode == LeftOnly ) { - stylusDict->remove(w); - w->removeEventFilter(qApp); - } else { - stylusDict->insert(w,(void*)mode); - connect(w,SIGNAL(destroyed()),qApp,SLOT(removeSenderFromStylusDict())); - w->installEventFilter(qApp); - } + createDict(); + if ( mode == LeftOnly ) { + stylusDict->remove + ( w ); + w->removeEventFilter( qApp ); + } + else { + stylusDict->insert( w, ( void* ) mode ); + connect( w, SIGNAL( destroyed() ), qApp, SLOT( removeSenderFromStylusDict() ) ); + w->installEventFilter( qApp ); + } } /*! \reimp */ bool QPEApplication::eventFilter( QObject *o, QEvent *e ) { - if ( stylusDict && e->type() >= QEvent::MouseButtonPress && e->type() <= QEvent::MouseMove ) { - QMouseEvent* me = (QMouseEvent*)e; - if ( me->button() == LeftButton ) { - StylusMode mode = (StylusMode)(int)stylusDict->find(o); - switch (mode) { - case RightOnHold: - switch ( me->type() ) { - case QEvent::MouseButtonPress: - d->presstimer = startTimer(500); // #### pref. - d->presswidget = (QWidget*)o; - d->presspos = me->pos(); - d->rightpressed = FALSE; - break; - case QEvent::MouseButtonRelease: - if ( d->presstimer ) { - killTimer(d->presstimer); - d->presstimer = 0; - } - if ( d->rightpressed && d->presswidget ) { - // Right released - postEvent( d->presswidget, - new QMouseEvent( QEvent::MouseButtonRelease, me->pos(), - RightButton, LeftButton+RightButton ) ); - // Left released, off-widget - postEvent( d->presswidget, - new QMouseEvent( QEvent::MouseMove, QPoint(-1,-1), - LeftButton, LeftButton ) ); - postEvent( d->presswidget, - new QMouseEvent( QEvent::MouseButtonRelease, QPoint(-1,-1), - LeftButton, LeftButton ) ); - d->rightpressed = FALSE; - return TRUE; // don't send the real Left release - } - break; - default: - break; - } - break; - default: - ; - } - } - } else if ( e->type() == QEvent::KeyPress || e->type() == QEvent::KeyRelease ) { - QKeyEvent *ke = (QKeyEvent *)e; - if ( ke->key() == Key_Enter ) { - if ( o->isA( "QRadioButton" ) || o->isA( "QCheckBox" ) ) { - postEvent( o, new QKeyEvent( e->type(), Key_Space, ' ', - ke->state(), " ", ke->isAutoRepeat(), ke->count() ) ); - return TRUE; - } - } - } + if ( stylusDict && e->type() >= QEvent::MouseButtonPress && e->type() <= QEvent::MouseMove ) { + QMouseEvent * me = ( QMouseEvent* ) e; + if ( me->button() == LeftButton ) { + StylusMode mode = ( StylusMode ) ( int ) stylusDict->find( o ); + switch ( mode ) { + case RightOnHold: + switch ( me->type() ) { + case QEvent::MouseButtonPress: + d->presstimer = startTimer( 500 ); // #### pref. + d->presswidget = ( QWidget* ) o; + d->presspos = me->pos(); + d->rightpressed = FALSE; + break; + case QEvent::MouseButtonRelease: + if ( d->presstimer ) { + killTimer( d->presstimer ); + d->presstimer = 0; + } + if ( d->rightpressed && d->presswidget ) { + // Right released + postEvent( d->presswidget, + new QMouseEvent( QEvent::MouseButtonRelease, me->pos(), + RightButton, LeftButton + RightButton ) ); + // Left released, off-widget + postEvent( d->presswidget, + new QMouseEvent( QEvent::MouseMove, QPoint( -1, -1 ), + LeftButton, LeftButton ) ); + postEvent( d->presswidget, + new QMouseEvent( QEvent::MouseButtonRelease, QPoint( -1, -1 ), + LeftButton, LeftButton ) ); + d->rightpressed = FALSE; + return TRUE; // don't send the real Left release + } + break; + default: + break; + } + break; + default: + ; + } + } + } + else if ( e->type() == QEvent::KeyPress || e->type() == QEvent::KeyRelease ) { + QKeyEvent * ke = ( QKeyEvent * ) e; + if ( ke->key() == Key_Enter ) { + if ( o->isA( "QRadioButton" ) || o->isA( "QCheckBox" ) ) { + postEvent( o, new QKeyEvent( e->type(), Key_Space, ' ', + ke->state(), " ", ke->isAutoRepeat(), ke->count() ) ); + return TRUE; + } + } + } - return FALSE; + return FALSE; } /*! \reimp */ void QPEApplication::timerEvent( QTimerEvent *e ) { - if ( e->timerId() == d->presstimer && d->presswidget ) { - // Right pressed - postEvent( d->presswidget, - new QMouseEvent( QEvent::MouseButtonPress, d->presspos, - RightButton, LeftButton ) ); - killTimer( d->presstimer ); - d->presstimer = 0; - d->rightpressed = TRUE; - } + if ( e->timerId() == d->presstimer && d->presswidget ) { + // Right pressed + postEvent( d->presswidget, + new QMouseEvent( QEvent::MouseButtonPress, d->presspos, + RightButton, LeftButton ) ); + killTimer( d->presstimer ); + d->presstimer = 0; + d->rightpressed = TRUE; + } } void QPEApplication::removeSenderFromStylusDict() { - stylusDict->remove((void*)sender()); - if ( d->presswidget == sender() ) - d->presswidget = 0; + stylusDict->remove + ( ( void* ) sender() ); + if ( d->presswidget == sender() ) + d->presswidget = 0; } /*! \internal */ bool QPEApplication::keyboardGrabbed() const { - return d->kbgrabber; + return d->kbgrabber; } /*! Reverses the effect of grabKeyboard(). This is called automatically on program exit. */ void QPEApplication::ungrabKeyboard() { - QPEApplicationData* d = ((QPEApplication*)qApp)->d; - if ( d->kbgrabber == 2 ) { - QCopEnvelope e("QPE/System", "grabKeyboard(QString)" ); - e << QString::null; - d->kbregrab = FALSE; - d->kbgrabber = 0; - } + QPEApplicationData * d = ( ( QPEApplication* ) qApp ) ->d; + if ( d->kbgrabber == 2 ) { + QCopEnvelope e( "QPE/System", "grabKeyboard(QString)" ); + e << QString::null; + d->kbregrab = FALSE; + d->kbgrabber = 0; + } } /*! Grabs the keyboard such that the system's application launching keys no longer work, and instead they are receivable by this application. - + \sa ungrabKeyboard() */ void QPEApplication::grabKeyboard() { - QPEApplicationData* d = ((QPEApplication*)qApp)->d; - if ( qApp->type() == QApplication::GuiServer ) - d->kbgrabber = 0; - else { - QCopEnvelope e("QPE/System", "grabKeyboard(QString)" ); - e << d->appName; - d->kbgrabber = 2; // me - } + QPEApplicationData * d = ( ( QPEApplication* ) qApp ) ->d; + if ( qApp->type() == QApplication::GuiServer ) + d->kbgrabber = 0; + else { + QCopEnvelope e( "QPE/System", "grabKeyboard(QString)" ); + e << d->appName; + d->kbgrabber = 2; // me + } } /*! \reimp */ int QPEApplication::exec() { - d->sendQCopQ(); - if ( d->keep_running) - //|| d->qpe_main_widget && d->qpe_main_widget->isVisible() ) - return QApplication::exec(); - - { - QCopEnvelope e("QPE/System", "closing(QString)" ); - e << d->appName; - } - processEvents(); - return 0; + d->sendQCopQ(); + if ( d->keep_running ) + //|| d->qpe_main_widget && d->qpe_main_widget->isVisible() ) + return QApplication::exec(); + + { + QCopEnvelope e( "QPE/System", "closing(QString)" ); + e << d->appName; + } + processEvents(); + return 0; } /*! \internal External request for application to quit. Quits if possible without loosing state. */ void QPEApplication::tryQuit() { - if ( activeModalWidget() || strcmp( argv()[0], "embeddedkonsole") == 0 ) - return; // Inside modal loop or konsole. Too hard to save state. - { - QCopEnvelope e("QPE/System", "closing(QString)" ); - e << d->appName; - } - processEvents(); + if ( activeModalWidget() || strcmp( argv() [ 0 ], "embeddedkonsole" ) == 0 ) + return ; // Inside modal loop or konsole. Too hard to save state. + { + QCopEnvelope e( "QPE/System", "closing(QString)" ); + e << d->appName; + } + processEvents(); - quit(); + quit(); } /*! \internal User initiated quit. Makes the window 'Go Away'. If preloaded this means hiding the window. If not it means quitting the application. As this is user initiated we don't need to check state. */ void QPEApplication::hideOrQuit() { - // notify of our demise :) - { - QCopEnvelope e("QPE/System", "closing(QString)" ); - e << d->appName; - } - processEvents(); - if ( d->preloaded && d->qpe_main_widget ) - d->qpe_main_widget->hide(); - else - quit(); + // notify of our demise :) + { + QCopEnvelope e( "QPE/System", "closing(QString)" ); + e << d->appName; + } + processEvents(); + if ( d->preloaded && d->qpe_main_widget ) + d->qpe_main_widget->hide(); + else + quit(); } #if defined(QT_QWS_IPAQ) || defined(QT_QWS_EBX) // The libraries with the skiff package (and possibly others) have // completely useless implementations of builtin new and delete that // use about 50% of your CPU. Here we revert to the simple libc // functions. -void* operator new[](size_t size) +void* operator new[] ( size_t size ) { - return malloc(size); + return malloc( size ); } -void* operator new(size_t size) +void* operator new( size_t size ) { - return malloc(size); + return malloc( size ); } -void operator delete[](void* p) +void operator delete[] ( void* p ) { - free(p); + free( p ); } -void operator delete[](void* p, size_t /*size*/) +void operator delete[] ( void* p, size_t /*size*/ ) { - free(p); + free( p ); } -void operator delete(void* p) +void operator delete( void* p ) { - free(p); + free( p ); } -void operator delete(void* p, size_t /*size*/) +void operator delete( void* p, size_t /*size*/ ) { - free(p); + free( p ); } #endif #if ( QT_VERSION <= 230 ) && !defined(SINGLE_APP) #include <qwidgetlist.h> #include <qgfx_qws.h> extern QRect qt_maxWindowRect; -void qt_setMaxWindowRect(const QRect& r) +void qt_setMaxWindowRect( const QRect & r ) { - qt_maxWindowRect = qt_screen->mapFromDevice(r, - qt_screen->mapToDevice(QSize(qt_screen->width(),qt_screen->height()))); - // Re-resize any maximized windows - QWidgetList* l = QApplication::topLevelWidgets(); - if ( l ) { - QWidget *w = l->first(); - while ( w ) { - if ( w->isVisible() && w->isMaximized() ) - { - w->showMaximized(); - } - w = l->next(); - } - delete l; - } + qt_maxWindowRect = qt_screen->mapFromDevice( r, + qt_screen->mapToDevice( QSize( qt_screen->width(), qt_screen->height() ) ) ); + // Re-resize any maximized windows + QWidgetList* l = QApplication::topLevelWidgets(); + if ( l ) { + QWidget * w = l->first(); + while ( w ) { + if ( w->isVisible() && w->isMaximized() ) { + w->showMaximized(); + } + w = l->next(); + } + delete l; + } } #endif diff --git a/library/styleinterface.h b/library/styleinterface.h new file mode 100644 index 0000000..9fea636 --- a/dev/null +++ b/library/styleinterface.h @@ -0,0 +1,68 @@ +/********************************************************************** +** Copyright (C) 2002 Robert Griebl. All rights reserved. +** +** This file is part of OPIE (http://www.opie.info). +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +**********************************************************************/ + +#ifndef STYLEINTERFACE_H +#define STYLEINTERFACE_H + +#include <qpe/qcom.h> + +#ifndef QT_NO_COMPONENT + +// {6C33B4F9-D529-453A-8FB3-DA42B21872BD} +# ifndef IID_Style +# define IID_Style QUuid( 0x6c33b4f9, 0xd529, 0x453a, 0x8f, 0xb3, 0xda, 0x42, 0xb2, 0x18, 0x72, 0xbd) +#endif + +// {9757A252-3FD4-438F-A756-80BE4A9FB8DC} +# ifndef IID_StyleSettings +# define IID_StyleSettings QUuid( 0x9757a252, 0x3fd4, 0x438f, 0xa7, 0x56, 0x80, 0xbe, 0x4a, 0x9f, 0xb8, 0xdc) +# endif + +#endif + +class QWidget; +class QStyle; + +struct StyleInterface : public QUnknownInterface +{ + //! Return a new style. + virtual QStyle *create ( ) = 0; + + //! Return a (longer) description for the style. + virtual QString description ( ) = 0; + + //! Return a short name for the style. + virtual QString name ( ) = 0; + + //! Return the library basename (libliquid.so => liquid) + virtual QCString key ( ) = 0; + + //! QT_VERSION like 1.2.3 == 123 + virtual unsigned int version ( ) = 0; +}; + +struct StyleSettingsInterface : public QUnknownInterface +{ + //! Return a new settings page. + virtual QWidget *create ( QWidget *parent, const char *name = 0 ) = 0; + + //! Callback for appearance app when OK is clicked (return true when style has to re-applied). + virtual bool accept ( ) = 0; + + //! Callback for appeaeance app when Cancel is clicked. + virtual void reject ( ) = 0; +}; + +#endif diff --git a/noncore/styles/liquid/liquid.pro b/noncore/styles/liquid/liquid.pro index 23dce09..a07eaf2 100644 --- a/noncore/styles/liquid/liquid.pro +++ b/noncore/styles/liquid/liquid.pro @@ -1,18 +1,22 @@ TEMPLATE = lib CONFIG = qt embedded release warn_on SOURCES = liquid.cpp \ liquiddeco.cpp \ effects.cpp \ + liquidset.cpp \ plugin.cpp HEADERS = liquid.h \ liquiddeco.h \ - effects.h + effects.h \ + liquidset.h \ + plugin.h + LIBS += -lqpe INCLUDEPATH += $(OPIEDIR)/include DESTDIR = $(OPIEDIR)/plugins/styles TARGET = liquid VERSION = 1.0.0 TRANSLATIONS = ../../../i18n/de/libliquid.ts \ ../../../i18n/en/libliquid.ts \ diff --git a/noncore/styles/liquid/settings/liquidset.cpp b/noncore/styles/liquid/liquidset.cpp index 1479ac0..5ae19ba 100644 --- a/noncore/styles/liquid/settings/liquidset.cpp +++ b/noncore/styles/liquid/liquidset.cpp @@ -16,17 +16,17 @@ ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #include "liquidset.h" -#include "../liquid.h" +#include "liquid.h" #include <qpe/qpeapplication.h> #include <qpe/global.h> #include <qslider.h> #include <qtoolbutton.h> #include <qbuttongroup.h> #include <qradiobutton.h> @@ -52,18 +52,18 @@ static void changeButtonColor ( QWidget *btn, const QColor &col ) pal. setColor ( QPalette::Active, QColorGroup::Background, col ); pal. setColor ( QPalette::Disabled, QColorGroup::Background, col ); pal. setColor ( QPalette::Inactive, QColorGroup::Background, col ); btn-> setPalette ( pal ); } -LiquidSet::LiquidSet ( QWidget* parent, const char *name, WFlags fl ) - : QDialog ( parent, name, fl ) +LiquidSettings::LiquidSettings ( QWidget* parent, const char *name, WFlags fl ) + : QWidget ( parent, name, fl ) { setCaption ( tr( "Liquid Style" ) ); Config config ( "qpe" ); config. setGroup ( "Liquid-Style" ); m_type = config. readNumEntry ( "Type", TransStippleBg ); m_menucol = QColor ( config. readEntry ( "Color", QApplication::palette ( ). active ( ). button ( ). name ( ))); @@ -117,26 +117,26 @@ LiquidSet::LiquidSet ( QWidget* parent, const char *name, WFlags fl ) grid-> addWidget ( m_textlbl = new QLabel ( tr( "Text color" ), this ), 0, 4 ); grid-> addWidget ( m_opaclbl = new QLabel ( tr( "Opacity" ), this ), 1, 1 ); m_menubtn = new QToolButton ( this ); grid-> addWidget ( m_menubtn, 0, 2 ); QPopupMenu *popup; - popup = new ColorPopupMenu ( m_menucol, this ); + popup = new ColorPopupMenu ( m_menucol, 0 ); m_menubtn-> setPopup ( popup ); m_menubtn-> setPopupDelay ( 0 ); connect ( popup, SIGNAL( colorSelected ( const QColor & )), this, SLOT( changeMenuColor ( const QColor & ))); changeMenuColor ( m_menucol ); m_textbtn = new QToolButton ( this ); grid-> addWidget ( m_textbtn, 0, 5 ); - popup = new ColorPopupMenu ( m_textcol, this ); + popup = new ColorPopupMenu ( m_textcol, 0 ); m_textbtn-> setPopup ( popup ); m_textbtn-> setPopupDelay ( 0 ); connect ( popup, SIGNAL( colorSelected ( const QColor & )), this, SLOT( changeTextColor ( const QColor & ))); changeTextColor ( m_textcol ); m_opacsld = new QSlider ( Horizontal, this ); m_opacsld-> setRange ( -20, 20 ); m_opacsld-> setValue ( opacity ); @@ -171,64 +171,62 @@ LiquidSet::LiquidSet ( QWidget* parent, const char *name, WFlags fl ) changeType ( m_type ); connect ( btngrp, SIGNAL( clicked ( int ) ), this, SLOT( changeType ( int ) ) ); connect ( shadow, SIGNAL( toggled ( bool ) ), this, SLOT( changeShadow ( bool ) ) ); connect ( windeco, SIGNAL( toggled ( bool ) ), this, SLOT( changeDeco ( bool ) ) ); } -void LiquidSet::changeType ( int t ) +void LiquidSettings::changeType ( int t ) { bool custom = ( t == Custom ); m_menulbl-> setEnabled ( custom ); m_textlbl-> setEnabled ( custom ); m_opaclbl-> setEnabled ( custom ); m_menubtn-> setEnabled ( custom ); m_textbtn-> setEnabled ( custom ); m_opacsld-> setEnabled ( custom ); m_type = t; } -void LiquidSet::changeMenuColor ( const QColor &col ) +void LiquidSettings::changeMenuColor ( const QColor &col ) { changeButtonColor ( m_menubtn, col ); m_menucol = col; } -void LiquidSet::changeTextColor ( const QColor &col ) +void LiquidSettings::changeTextColor ( const QColor &col ) { changeButtonColor ( m_textbtn, col ); m_textcol = col; } -void LiquidSet::changeShadow ( bool b ) +void LiquidSettings::changeShadow ( bool b ) { m_shadow = b; } -void LiquidSet::changeDeco ( bool b ) +void LiquidSettings::changeDeco ( bool b ) { m_deco = b; } -void LiquidSet::accept ( ) +bool LiquidSettings::writeConfig ( ) { Config config ( "qpe" ); config. setGroup ( "Liquid-Style" ); config. writeEntry ( "Type", m_type ); config. writeEntry ( "Color", m_menucol. name ( )); config. writeEntry ( "TextColor", m_textcol. name ( )); config. writeEntry ( "Opacity", m_opacsld-> value ( )); config. writeEntry ( "ShadowText", m_shadow ); config. writeEntry ( "WinDecoration", m_deco ); config. writeEntry ( "StippleContrast", m_contsld-> value ( )); config. write ( ); - Global::applyStyle ( ); - - QDialog::accept ( ); + return true; } diff --git a/noncore/styles/liquid/settings/liquidset.h b/noncore/styles/liquid/liquidset.h index a0f590a..7843513 100644 --- a/noncore/styles/liquid/settings/liquidset.h +++ b/noncore/styles/liquid/liquidset.h @@ -3,31 +3,30 @@ #include <qdialog.h> #include <qcolor.h> class QLabel; class QToolButton; class QSlider; -class LiquidSet : public QDialog { +class LiquidSettings : public QWidget { Q_OBJECT public: - LiquidSet ( QWidget *parent = 0, const char *name = 0, WFlags fl = 0 ); + LiquidSettings ( QWidget *parent = 0, const char *name = 0, WFlags fl = 0 ); public slots: void changeType ( int t ); void changeMenuColor ( const QColor &col ); void changeTextColor ( const QColor &col ); void changeShadow ( bool b ); void changeDeco ( bool b ); -protected: - virtual void accept ( ); + virtual bool writeConfig ( ); private: QColor m_menucol; QColor m_textcol; int m_type; bool m_shadow; bool m_deco; diff --git a/noncore/styles/liquid/opie-liquid.control b/noncore/styles/liquid/opie-liquid.control index 6311dee..7b6ae71 100644 --- a/noncore/styles/liquid/opie-liquid.control +++ b/noncore/styles/liquid/opie-liquid.control @@ -1,9 +1,9 @@ -Files: plugins/styles/libliquid.so* bin/liquid-settings apps/Settings/Liquid.desktop pics/liquid/Liquid.png +Files: plugins/styles/libliquid.so* Priority: optional Section: opie/system Maintainer: Robert Griebl <sandman@handhelds.org> Architecture: arm Version: $QPE_VERSION-$SUB_VERSION.1 Depends: opie-base ($QPE_VERSION) Description: Liquid style by Mosfet. Mosfet's well known Liquid GUI style from KDE, diff --git a/noncore/styles/liquid/plugin.cpp b/noncore/styles/liquid/plugin.cpp index d9aa8ef..f149c29 100644 --- a/noncore/styles/liquid/plugin.cpp +++ b/noncore/styles/liquid/plugin.cpp @@ -1,29 +1,111 @@ #include "liquid.h" +#include "liquidset.h" +#include "plugin.h" -extern "C" { - QStyle* allocate ( ); - int minor_version ( ); - int major_version ( ); - const char *description ( ); + +LiquidInterface::LiquidInterface ( ) : ref ( 0 ) +{ +} + +LiquidInterface::~LiquidInterface ( ) +{ +} + +QStyle *LiquidInterface::create ( ) +{ + return new LiquidStyle ( ); +} + +QString LiquidInterface::name ( ) +{ + return QObject::tr( "Liquid", "name" ); +} + +QString LiquidInterface::description ( ) +{ + return QObject::tr( "High Performance Liquid style by Mosfet", "description" ); +} + +QCString LiquidInterface::key ( ) +{ + return QCString ( "liquid" ); +} + +unsigned int LiquidInterface::version ( ) +{ + return 100; // 1.0.0 (\d+.\d.\d) +} + +QRESULT LiquidInterface::queryInterface ( const QUuid &uuid, QUnknownInterface **iface ) +{ + static LiquidSettingsInterface *setiface = 0; + + *iface = 0; + + if ( uuid == IID_QUnknown ) + *iface = this; + else if ( uuid == IID_Style ) + *iface = this; + else if ( uuid == IID_StyleSettings ) { + if ( !setiface ) + setiface = new LiquidSettingsInterface ( ); + *iface = setiface; + } + + if ( *iface ) + (*iface)-> addRef ( ); + + return QS_OK; +} + +Q_EXPORT_INTERFACE() +{ + Q_CREATE_INSTANCE( LiquidInterface ) } -QStyle* allocate ( ) + +LiquidSettingsInterface::LiquidSettingsInterface ( ) : ref ( 0 ) +{ + m_widget = 0; +} + +LiquidSettingsInterface::~LiquidSettingsInterface ( ) { - return new LiquidStyle ( ); +} + +QWidget *LiquidSettingsInterface::create ( QWidget *parent, const char *name ) +{ + m_widget = new LiquidSettings ( parent, name ? name : "LIQUID-SETTINGS" ); + + return m_widget; } -int minor_version ( ) +bool LiquidSettingsInterface::accept ( ) { - return 0; + if ( !m_widget ) + return false; + + return m_widget-> writeConfig ( ); } -int major_version ( ) +void LiquidSettingsInterface::reject ( ) { - return 1; } -const char *description ( ) +QRESULT LiquidSettingsInterface::queryInterface ( const QUuid &uuid, QUnknownInterface **iface ) { - return "High Performance Liquid"; + *iface = 0; + + + if ( uuid == IID_QUnknown ) + *iface = this; + else if ( uuid == IID_StyleSettings ) + *iface = this; + + if ( *iface ) + (*iface)-> addRef ( ); + + return QS_OK; } + diff --git a/noncore/styles/liquid/plugin.h b/noncore/styles/liquid/plugin.h new file mode 100644 index 0000000..759577f --- a/dev/null +++ b/noncore/styles/liquid/plugin.h @@ -0,0 +1,46 @@ +#ifndef __OPIE_LIQUID_PLUGIN_H__ +#define __OPIE_LIQUID_PLUGIN_H__ + +#include <qpe/styleinterface.h> + +class LiquidSettings; + +class LiquidInterface : public StyleInterface { +public: + LiquidInterface ( ); + virtual ~LiquidInterface ( ); + + QRESULT queryInterface ( const QUuid &, QUnknownInterface ** ); + Q_REFCOUNT + + virtual QStyle *create ( ); + + virtual QString description ( ); + virtual QString name ( ); + virtual QCString key ( ); + + virtual unsigned int version ( ); + +private: + ulong ref; +}; + +class LiquidSettingsInterface : public StyleSettingsInterface { +public: + LiquidSettingsInterface ( ); + virtual ~LiquidSettingsInterface ( ); + + QRESULT queryInterface ( const QUuid &, QUnknownInterface ** ); + Q_REFCOUNT + + virtual QWidget *create ( QWidget *parent, const char *name = 0 ); + + virtual bool accept ( ); + virtual void reject ( ); + +private: + LiquidSettings *m_widget; + ulong ref; +}; + +#endif diff --git a/noncore/styles/liquid/settings/.cvsignore b/noncore/styles/liquid/settings/.cvsignore deleted file mode 100644 index c13418b..0000000 --- a/noncore/styles/liquid/settings/.cvsignore +++ b/dev/null @@ -1,2 +0,0 @@ -Makefile* -moc_* diff --git a/noncore/styles/liquid/settings/main.cpp b/noncore/styles/liquid/settings/main.cpp deleted file mode 100644 index fd69007..0000000 --- a/noncore/styles/liquid/settings/main.cpp +++ b/dev/null @@ -1,34 +0,0 @@ -/********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. -** -** This file is part of Qtopia Environment. -** -** This file may be distributed and/or modified under the terms of the -** GNU General Public License version 2 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. -** -** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -** -** See http://www.trolltech.com/gpl/ for GPL licensing information. -** -** Contact info@trolltech.com if any conditions of this licensing are -** not clear to you. -** -**********************************************************************/ - -#include "liquidset.h" - -#include <qpe/qpeapplication.h> - - -int main ( int argc, char** argv ) -{ - QPEApplication a ( argc, argv ); - - LiquidSet dlg; - a. showMainWidget ( &dlg ); - - return a. exec ( ); -} diff --git a/noncore/styles/liquid/settings/settings.pro b/noncore/styles/liquid/settings/settings.pro deleted file mode 100644 index bfda7a4..0000000 --- a/noncore/styles/liquid/settings/settings.pro +++ b/dev/null @@ -1,24 +0,0 @@ -TEMPLATE = app -CONFIG += qt warn_on release -DESTDIR = $(OPIEDIR)/bin -HEADERS = liquidset.h -SOURCES = liquidset.cpp main.cpp -INCLUDEPATH += $(OPIEDIR)/include -DEPENDPATH += ../$(OPIEDIR)/include -LIBS += -lqpe -lopie -TARGET = liquid-settings - -TRANSLATIONS = ../../../../i18n/de/liquid-settings.ts \ - ../../../../i18n/en/liquid-settings.ts \ - ../../../../i18n/es/liquid-settings.ts \ - ../../../../i18n/fr/liquid-settings.ts \ - ../../../../i18n/hu/liquid-settings.ts \ - ../../../../i18n/ja/liquid-settings.ts \ - ../../../../i18n/ko/liquid-settings.ts \ - ../../../../i18n/no/liquid-settings.ts \ - ../../../../i18n/pl/liquid-settings.ts \ - ../../../../i18n/pt/liquid-settings.ts \ - ../../../../i18n/pt_BR/liquid-settings.ts \ - ../../../../i18n/sl/liquid-settings.ts \ - ../../../../i18n/zh_CN/liquid-settings.ts \ - ../../../../i18n/zh_TW/liquid-settings.ts diff --git a/noncore/styles/metal/metal.pro b/noncore/styles/metal/metal.pro index 6e99389..cf15f33 100644 --- a/noncore/styles/metal/metal.pro +++ b/noncore/styles/metal/metal.pro @@ -1,13 +1,13 @@ TEMPLATE = lib CONFIG = qt embedded release warn_on SOURCES = metal.cpp plugin.cpp -HEADERS = metal.h +HEADERS = metal.h plugin.h LIBS += -lqpe INCLUDEPATH += $(OPIEDIR)/include DESTDIR = $(OPIEDIR)/plugins/styles TARGET = metal VERSION = 1.0.0 TRANSLATIONS = ../../../i18n/de/libmetal.ts \ ../../../i18n/en/libmetal.ts \ diff --git a/noncore/styles/metal/plugin.cpp b/noncore/styles/metal/plugin.cpp index e5bee10..1db4aac 100644 --- a/noncore/styles/metal/plugin.cpp +++ b/noncore/styles/metal/plugin.cpp @@ -1,29 +1,57 @@ #include "metal.h" +#include "plugin.h" -extern "C" { - QStyle* allocate ( ); - int minor_version ( ); - int major_version ( ); - const char *description ( ); +MetalInterface::MetalInterface ( ) : ref ( 0 ) +{ +} + +MetalInterface::~MetalInterface ( ) +{ +} + +QStyle *MetalInterface::create ( ) +{ + return new MetalStyle ( ); +} + +QString MetalInterface::name ( ) +{ + return QObject::tr( "Metal", "name" ); +} + +QString MetalInterface::description ( ) +{ + return QObject::tr( "Metal style", "description" ); } -QStyle* allocate ( ) +QCString MetalInterface::key ( ) { - return new MetalStyle ( ); + return QCString ( "metal" ); } -int minor_version ( ) +unsigned int MetalInterface::version ( ) { - return 0; + return 100; // 1.0.0 (\d+.\d.\d) } -int major_version ( ) +QRESULT MetalInterface::queryInterface ( const QUuid &uuid, QUnknownInterface **iface ) { - return 1; + *iface = 0; + + if ( uuid == IID_QUnknown ) + *iface = this; + else if ( uuid == IID_Style ) + *iface = this; + + if ( *iface ) + (*iface)-> addRef ( ); + + return QS_OK; } -const char *description ( ) +Q_EXPORT_INTERFACE() { - return "Metal style plugin"; + Q_CREATE_INSTANCE( MetalInterface ) } + diff --git a/noncore/styles/metal/plugin.h b/noncore/styles/metal/plugin.h new file mode 100644 index 0000000..f61c833 --- a/dev/null +++ b/noncore/styles/metal/plugin.h @@ -0,0 +1,27 @@ +#ifndef __OPIE_METAL_PLUGIN_H__ +#define __OPIE_METAL_PLUGIN_H__ + +#include <qpe/styleinterface.h> + + +class MetalInterface : public StyleInterface { +public: + MetalInterface ( ); + virtual ~MetalInterface ( ); + + QRESULT queryInterface ( const QUuid &, QUnknownInterface ** ); + Q_REFCOUNT + + virtual QStyle *create ( ); + + virtual QString description ( ); + virtual QString name ( ); + virtual QCString key ( ); + + virtual unsigned int version ( ); + +private: + ulong ref; +}; + +#endif diff --git a/noncore/styles/theme/opie-theme.control b/noncore/styles/theme/opie-theme.control index 02739fb..adb4f4b 100644 --- a/noncore/styles/theme/opie-theme.control +++ b/noncore/styles/theme/opie-theme.control @@ -1,9 +1,9 @@ -Files: plugins/styles/libtheme.so* bin/theme-settings apps/Settings/Theme.desktop pics/theme/Theme.png +Files: plugins/styles/libtheme.so* Priority: optional Section: opie/system Maintainer: Robert Griebl <sandman@handhelds.org> Architecture: arm Version: $QPE_VERSION-$SUB_VERSION.1 Depends: opie-base ($QPE_VERSION) Description: Themed style. This style accepts all themes written diff --git a/noncore/styles/theme/plugin.cpp b/noncore/styles/theme/plugin.cpp index b334357..4383693 100644 --- a/noncore/styles/theme/plugin.cpp +++ b/noncore/styles/theme/plugin.cpp @@ -1,19 +1,111 @@ -//#include <klocale.h> #include "othemestyle.h" +#include "themeset.h" +#include "plugin.h" -extern "C" + + +ThemeInterface::ThemeInterface ( ) : ref ( 0 ) { - QStyle * allocate() { - return new OThemeStyle ( "" ); - } - int minor_version() { - return 0; - } - int major_version() { - return 1; - } - const char * description() { - return ( "Theme Style" ); +} + +ThemeInterface::~ThemeInterface ( ) +{ +} + +QStyle *ThemeInterface::create ( ) +{ + return new OThemeStyle ( "" ); +} + +QString ThemeInterface::name ( ) +{ + return QObject::tr( "Themed style", "name" ); +} + +QString ThemeInterface::description ( ) +{ + return QObject::tr( "KDE2 theme compatible style engine", "description" ); +} + +QCString ThemeInterface::key ( ) +{ + return QCString ( "theme" ); +} + +unsigned int ThemeInterface::version ( ) +{ + return 100; // 1.0.0 (\d+.\d.\d) +} + +QRESULT ThemeInterface::queryInterface ( const QUuid &uuid, QUnknownInterface **iface ) +{ + static ThemeSettingsInterface *setiface = 0; + + *iface = 0; + + if ( uuid == IID_QUnknown ) + *iface = this; + else if ( uuid == IID_Style ) + *iface = this; + else if ( uuid == IID_StyleSettings ) { + if ( !setiface ) + setiface = new ThemeSettingsInterface ( ); + *iface = setiface; } + + if ( *iface ) + (*iface)-> addRef ( ); + + return QS_OK; +} + +Q_EXPORT_INTERFACE() +{ + Q_CREATE_INSTANCE( ThemeInterface ) +} + + +ThemeSettingsInterface::ThemeSettingsInterface ( ) : ref ( 0 ) +{ + m_widget = 0; +} + +ThemeSettingsInterface::~ThemeSettingsInterface ( ) +{ +} + +QWidget *ThemeSettingsInterface::create ( QWidget *parent, const char *name ) +{ + m_widget = new ThemeSettings ( parent, name ? name : "THEME-SETTINGS" ); + + return m_widget; +} + +bool ThemeSettingsInterface::accept ( ) +{ + if ( !m_widget ) + return false; + + return m_widget-> writeConfig ( ); +} + +void ThemeSettingsInterface::reject ( ) +{ +} + +QRESULT ThemeSettingsInterface::queryInterface ( const QUuid &uuid, QUnknownInterface **iface ) +{ + *iface = 0; + + + if ( uuid == IID_QUnknown ) + *iface = this; + else if ( uuid == IID_StyleSettings ) + *iface = this; + + if ( *iface ) + (*iface)-> addRef ( ); + + return QS_OK; } diff --git a/noncore/styles/theme/plugin.h b/noncore/styles/theme/plugin.h new file mode 100644 index 0000000..d13fc5d --- a/dev/null +++ b/noncore/styles/theme/plugin.h @@ -0,0 +1,46 @@ +#ifndef __OPIE_THEME_PLUGIN_H__ +#define __OPIE_THEME_PLUGIN_H__ + +#include <qpe/styleinterface.h> + +class ThemeSettings; + +class ThemeInterface : public StyleInterface { +public: + ThemeInterface ( ); + virtual ~ThemeInterface ( ); + + QRESULT queryInterface ( const QUuid &, QUnknownInterface ** ); + Q_REFCOUNT + + virtual QStyle *create ( ); + + virtual QString description ( ); + virtual QString name ( ); + virtual QCString key ( ); + + virtual unsigned int version ( ); + +private: + ulong ref; +}; + +class ThemeSettingsInterface : public StyleSettingsInterface { +public: + ThemeSettingsInterface ( ); + virtual ~ThemeSettingsInterface ( ); + + QRESULT queryInterface ( const QUuid &, QUnknownInterface ** ); + Q_REFCOUNT + + virtual QWidget *create ( QWidget *parent, const char *name = 0 ); + + virtual bool accept ( ); + virtual void reject ( ); + +private: + ThemeSettings *m_widget; + ulong ref; +}; + +#endif diff --git a/noncore/styles/theme/settings/main.cpp b/noncore/styles/theme/settings/main.cpp deleted file mode 100644 index 94d40f3..0000000 --- a/noncore/styles/theme/settings/main.cpp +++ b/dev/null @@ -1,34 +0,0 @@ -/********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. -** -** This file is part of Qtopia Environment. -** -** This file may be distributed and/or modified under the terms of the -** GNU General Public License version 2 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. -** -** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -** -** See http://www.trolltech.com/gpl/ for GPL licensing information. -** -** Contact info@trolltech.com if any conditions of this licensing are -** not clear to you. -** -**********************************************************************/ - -#include "themeset.h" - -#include <qpe/qpeapplication.h> - - -int main ( int argc, char** argv ) -{ - QPEApplication a ( argc, argv ); - - ThemeSet dlg; - a. showMainWidget ( &dlg ); - - return a. exec ( ); -} diff --git a/noncore/styles/theme/settings/settings.pro b/noncore/styles/theme/settings/settings.pro deleted file mode 100644 index 85d1f7a..0000000 --- a/noncore/styles/theme/settings/settings.pro +++ b/dev/null @@ -1,24 +0,0 @@ -TEMPLATE = app -CONFIG += qt warn_on release -DESTDIR = $(OPIEDIR)/bin -HEADERS = themeset.h -SOURCES = themeset.cpp main.cpp -INCLUDEPATH += $(OPIEDIR)/include -DEPENDPATH += ../$(OPIEDIR)/include -LIBS += -lqpe -TARGET = theme-settings - -TRANSLATIONS = ../../../../i18n/de/theme-settings.ts \ - ../../../../i18n/en/theme-settings.ts \ - ../../../../i18n/es/theme-settings.ts \ - ../../../../i18n/fr/theme-settings.ts \ - ../../../../i18n/hu/theme-settings.ts \ - ../../../../i18n/ja/theme-settings.ts \ - ../../../../i18n/ko/theme-settings.ts \ - ../../../../i18n/no/theme-settings.ts \ - ../../../../i18n/pl/theme-settings.ts \ - ../../../../i18n/pt/theme-settings.ts \ - ../../../../i18n/pt_BR/theme-settings.ts \ - ../../../../i18n/sl/theme-settings.ts \ - ../../../../i18n/zh_CN/theme-settings.ts \ - ../../../../i18n/zh_TW/theme-settings.ts diff --git a/noncore/styles/theme/settings/themeset.h b/noncore/styles/theme/settings/themeset.h deleted file mode 100644 index 24804ce..0000000 --- a/noncore/styles/theme/settings/themeset.h +++ b/dev/null @@ -1,20 +0,0 @@ -#ifndef __OPIE_THEME_SET_H__ -#define __OPIE_THEME_SET_H__ - -#include <qdialog.h> - -class QListView; - -class ThemeSet : public QDialog { - Q_OBJECT - -public: - ThemeSet ( QWidget *parent = 0, const char *name = 0, WFlags fl = 0 ); - -protected: - virtual void accept ( ); - -private: - QListView *m_list; -}; -#endif diff --git a/noncore/styles/theme/theme.pro b/noncore/styles/theme/theme.pro index fdcd20e..49c4103 100644 --- a/noncore/styles/theme/theme.pro +++ b/noncore/styles/theme/theme.pro @@ -1,18 +1,21 @@ TEMPLATE = lib CONFIG = qt embedded debug warn_on SOURCES = ogfxeffect.cpp \ othemestyle.cpp \ othemebase.cpp \ + themeset.cpp \ plugin.cpp HEADERS = ogfxeffect.h \ othemebase.h \ - othemestyle.h + othemestyle.h \ + themeset.h \ + plugin.h LIBS += -lqpe INCLUDEPATH += $(OPIEDIR)/include DESTDIR = $(OPIEDIR)/plugins/styles TARGET = theme VERSION = 1.0.0 diff --git a/noncore/styles/theme/settings/themeset.cpp b/noncore/styles/theme/themeset.cpp index 046618e..4a4efcb 100644 --- a/noncore/styles/theme/settings/themeset.cpp +++ b/noncore/styles/theme/themeset.cpp @@ -54,18 +54,18 @@ public: m_theme = theme; } QString m_theme; }; -ThemeSet::ThemeSet ( QWidget* parent, const char *name, WFlags fl ) - : QDialog ( parent, name, fl ) +ThemeSettings::ThemeSettings ( QWidget* parent, const char *name, WFlags fl ) + : QWidget ( parent, name, fl ) { setCaption ( tr( "Theme Style" ) ); Config config ( "qpe" ); config. setGroup ( "Appearance" ); QString active = config. readEntry ( "Theme", "default" ); @@ -104,21 +104,20 @@ ThemeSet::ThemeSet ( QWidget* parent, const char *name, WFlags fl ) if ( active == fname ) { m_list-> setSelected ( item, true ); } } } } } -void ThemeSet::accept ( ) +bool ThemeSettings::writeConfig ( ) { Config config ( "qpe" ); config. setGroup ( "Appearance" ); MyItem *it = (MyItem *) m_list-> selectedItem ( ); config. writeEntry ( "Theme", it ? it-> m_theme : QString ( "" )); + config. write ( ); - Global::applyStyle ( ); - - QDialog::accept ( ); + return true; } diff --git a/noncore/styles/theme/themeset.h b/noncore/styles/theme/themeset.h new file mode 100644 index 0000000..c337cfa --- a/dev/null +++ b/noncore/styles/theme/themeset.h @@ -0,0 +1,20 @@ +#ifndef __OPIE_THEME_SETTINGS_H__ +#define __OPIE_THEME_SETTINGS_H__ + +#include <qdialog.h> + +class QListView; + +class ThemeSettings : public QWidget { + Q_OBJECT + +public: + ThemeSettings ( QWidget *parent = 0, const char *name = 0, WFlags fl = 0 ); + +public: + virtual bool writeConfig ( ); + +private: + QListView *m_list; +}; +#endif diff --git a/pics/liquid/Liquid.png b/pics/liquid/Liquid.png Binary files differdeleted file mode 100644 index 67647d0..0000000 --- a/pics/liquid/Liquid.png +++ b/dev/null diff --git a/pics/theme/Theme.png b/pics/theme/Theme.png Binary files differdeleted file mode 100644 index 67647d0..0000000 --- a/pics/theme/Theme.png +++ b/dev/null |