-rw-r--r-- | library/qpeapplication.cpp | 543 |
1 files changed, 272 insertions, 271 deletions
diff --git a/library/qpeapplication.cpp b/library/qpeapplication.cpp index c107a08..bdf67b9 100644 --- a/library/qpeapplication.cpp +++ b/library/qpeapplication.cpp @@ -67,219 +67,219 @@ #include "resource.h" #if QT_VERSION <= 230 && defined(QT_NO_CODECS) #include "qutfcodec.h" #endif #include "config.h" #include "network.h" #ifdef QWS #include "fontmanager.h" #endif #include "alarmserver.h" #include "applnk.h" #include "qpemenubar.h" #include "textcodecinterface.h" #include "imagecodecinterface.h" #include <unistd.h> #include <sys/file.h> #include <sys/ioctl.h> #include <sys/soundcard.h> 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 ); - } - - int presstimer; - QWidget* presswidget; - QPoint presspos; + 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 : 1; // AEH why not use uint foobar :1; if it's tt style -zecke - int kbgrabber; - bool kbregrab : 1; - bool notbusysent : 1; - QString appName; - struct QCopRec { + int kbgrabber; + bool kbregrab : 1; + bool notbusysent : 1; + 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 : 1; - bool forceshow : 1; - bool nomaximize : 1; - QWidget* qpe_main_widget; - bool keep_running : 1; - QList<QCopRec> qcopq; - - void enqueueQCop( const QCString &ch, const QCString &msg, - const QByteArray &data ) - { - qcopq.append( new QCopRec( ch, msg, data ) ); - } - void sendQCopQ() { + QCString channel; + QCString message; + QByteArray data; + }; + bool preloaded : 1; + bool forceshow : 1; + bool nomaximize : 1; + QWidget* qpe_main_widget; + bool keep_running : 1; + 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; #ifndef QT_NO_COP - for ( QListIterator<QCopRec> it( qcopq ); ( r = it.current() ); ++it ) - QCopChannel::sendLocally( r->channel, r->message, r->data ); + for ( QListIterator<QCopRec> it( qcopq ); ( r = it.current() ); ++it ) + QCopChannel::sendLocally( r->channel, r->message, r->data ); #endif - qcopq.clear(); - } + qcopq.clear(); + } static void show_mx(QWidget* mw, bool nomaximize) { - if ( mw->layout() && mw->inherits("QDialog") ) { - QPEApplication::showDialog((QDialog*)mw,nomaximize); - } else { + if ( mw->layout() && mw->inherits("QDialog") ) { + QPEApplication::showDialog((QDialog*)mw,nomaximize); + } else { #ifdef Q_WS_QWS - if ( !nomaximize ) - mw->showMaximized(); - else + if ( !nomaximize ) + mw->showMaximized(); + else #endif - mw->show(); - } + mw->show(); + } } 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; - } - } + // 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; + return FALSE; } void show(QWidget* mw, bool nomax) { - setWidgetCaptionFromAppName( mw, appName, QPEApplication::qpeDir() + "apps" ); - nomaximize = nomax; - qpe_main_widget = mw; + setWidgetCaptionFromAppName( mw, appName, QPEApplication::qpeDir() + "apps" ); + nomaximize = nomax; + qpe_main_widget = mw; #ifndef QT_NO_COP - sendQCopQ(); + sendQCopQ(); #endif - if ( preloaded ) { - if(forceshow) - show_mx(mw,nomax); - } else if ( keep_running ) { - show_mx(mw,nomax); - } + if ( preloaded ) { + if(forceshow) + show_mx(mw,nomax); + } else if ( keep_running ) { + show_mx(mw,nomax); + } } void loadTextCodecs() { - QString path = QPEApplication::qpeDir() + "/plugins/textcodecs"; - QDir dir( path, "lib*.so" ); - QStringList list = dir.entryList(); - QStringList::Iterator it; - for ( it = list.begin(); it != list.end(); ++it ) { - TextCodecInterface *iface = 0; - QLibrary *lib = new QLibrary( path + "/" + *it ); - if ( lib->queryInterface( IID_QtopiaTextCodec, (QUnknownInterface**)&iface ) == QS_OK && iface ) { - QValueList<int> mibs = iface->mibEnums(); - for (QValueList<int>::ConstIterator i=mibs.begin(); i!=mibs.end(); ++i) { - (void)iface->createForMib(*i); - // ### it exists now; need to remember if we can delete it - } - } else { - lib->unload(); - delete lib; - } - } + QString path = QPEApplication::qpeDir() + "/plugins/textcodecs"; + QDir dir( path, "lib*.so" ); + QStringList list = dir.entryList(); + QStringList::Iterator it; + for ( it = list.begin(); it != list.end(); ++it ) { + TextCodecInterface *iface = 0; + QLibrary *lib = new QLibrary( path + "/" + *it ); + if ( lib->queryInterface( IID_QtopiaTextCodec, (QUnknownInterface**)&iface ) == QS_OK && iface ) { + QValueList<int> mibs = iface->mibEnums(); + for (QValueList<int>::ConstIterator i=mibs.begin(); i!=mibs.end(); ++i) { + (void)iface->createForMib(*i); + // ### it exists now; need to remember if we can delete it + } + } else { + lib->unload(); + delete lib; + } + } } void loadImageCodecs() { - QString path = QPEApplication::qpeDir() + "/plugins/imagecodecs"; - QDir dir( path, "lib*.so" ); - QStringList list = dir.entryList(); - QStringList::Iterator it; - for ( it = list.begin(); it != list.end(); ++it ) { - ImageCodecInterface *iface = 0; - QLibrary *lib = new QLibrary( path + "/" + *it ); - if ( lib->queryInterface( IID_QtopiaImageCodec, (QUnknownInterface**)&iface ) == QS_OK && iface ) { - QStringList formats = iface->keys(); - for (QStringList::ConstIterator i=formats.begin(); i!=formats.end(); ++i) { - (void)iface->installIOHandler(*i); - // ### it exists now; need to remember if we can delete it - } - } else { - lib->unload(); - delete lib; - } - } + QString path = QPEApplication::qpeDir() + "/plugins/imagecodecs"; + QDir dir( path, "lib*.so" ); + QStringList list = dir.entryList(); + QStringList::Iterator it; + for ( it = list.begin(); it != list.end(); ++it ) { + ImageCodecInterface *iface = 0; + QLibrary *lib = new QLibrary( path + "/" + *it ); + if ( lib->queryInterface( IID_QtopiaImageCodec, (QUnknownInterface**)&iface ) == QS_OK && iface ) { + QStringList formats = iface->keys(); + for (QStringList::ConstIterator i=formats.begin(); i!=formats.end(); ++i) { + (void)iface->installIOHandler(*i); + // ### it exists now; need to remember if we can delete it + } + } else { + lib->unload(); + delete lib; + } + } } QString styleName; QString decorationName; }; class ResourceMimeFactory : public QMimeSourceFactory { public: - 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; - } + 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; + } }; static int muted = 0; static int micMuted = 0; 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; } @@ -499,79 +499,79 @@ QPEApplication::QPEApplication( int & argc, char **argv, Type t ) 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; } } /* 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 + //###language/font hack; should look it up somewhere #ifdef QWS - if ( lang == "ja" || lang == "zh_CN" || lang == "zh_TW" || lang == "ko" ) { - QFont fn = FontManager::unicodeFont( FontManager::Proportional ); - setFont( fn ); - } + if ( lang == "ja" || lang == "zh_CN" || lang == "zh_TW" || lang == "ko" ) { + QFont fn = FontManager::unicodeFont( FontManager::Proportional ); + setFont( fn ); + } #endif } #endif applyStyle(); if ( type() == GuiServer ) { setVolume(); } installEventFilter( this ); QPEMenuToolFocusManager::initialize(); #ifdef QT_NO_QWS_CURSOR // if we have no cursor, probably don't want tooltips QToolTip::setEnabled( FALSE ); #endif } static QPtrDict<void>* inputMethodDict = 0; static void createInputMethodDict() { if ( !inputMethodDict ) @@ -783,52 +783,53 @@ QPEApplication::~QPEApplication() #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; #endif delete d; } /*! Returns <tt>$OPIEDIR/</tt>. */ QString QPEApplication::qpeDir() { const char * base = getenv( "OPIEDIR" ); if ( base ) return QString( base ) + "/"; return QString( "../" ); } /*! Returns the user's current Document directory. There is a trailing "/". + .. well, it does now,, and there's no trailing '/' */ QString QPEApplication::documentDir() { - return QString( qpeDir() + "Documents"); + return QString( QDir::homeDirPath() + "/Documents"); } 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; } } @@ -837,75 +838,75 @@ int QPEApplication::defaultRotation() /*! \internal */ void QPEApplication::setDefaultRotation( int r ) { if ( qApp->type() == GuiServer ) { deforient = r; setenv( "QWS_DISPLAY", QString( "Transformed:Rot%1:0" ).arg( r ).latin1(), 1 ); Config config("qpe"); config.setGroup( "Rotation" ); config.writeEntry( "Screen", getenv("QWS_DISPLAY") ); } else { #ifndef QT_NO_COP { QCopEnvelope e( "QPE/System", "setDefaultRotation(int)" ); e << r; } #endif } } /*! \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 ); // Window Decoration QString dec = config.readEntry( "Decoration", "Qtopia" ); if ( dec != d->decorationName ) { qwsSetDecoration( new QPEDecoration( dec ) ); d->decorationName = dec; } // Font QString ff = config.readEntry( "FontFamily", font().family() ); int fs = config.readNumEntry( "FontSize", font().pointSize() ); setFont( QFont(ff,fs) ); } 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 == "setDefaultRotation(int)" ) { if ( type() == GuiServer ) { int r; stream >> r; @@ -1006,127 +1007,127 @@ void QPEApplication::systemMessage( const QCString& msg, const QByteArray& data } 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 ); } #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() ) + if ( top->isVisible() ) r = TRUE; else if (d->preloaded) { - // We are preloaded and not visible.. pretend we just started.. - QCopEnvelope e("QPE/System", "fastAppShowing(QString)"); - e << d->appName; - } - - d->show_mx(top,d->nomaximize); - top->raise(); - top->setActiveWindow(); + // We are preloaded and not visible.. pretend we just started.. + QCopEnvelope e("QPE/System", "fastAppShowing(QString)"); + e << d->appName; + } + + d->show_mx(top,d->nomaximize); + top->raise(); + top->setActiveWindow(); } QWidget *topm = activeModalWidget(); if ( topm && topm != top ) { - topm->show(); - topm->raise(); - topm->setActiveWindow(); - // If we haven't already handled the fastAppShowing message - if (!top && d->preloaded) { - QCopEnvelope e("QPE/System", "fastAppShowing(QString)"); - e << d->appName; - } - r = FALSE; + topm->show(); + topm->raise(); + topm->setActiveWindow(); + // If we haven't already handled the fastAppShowing message + if (!top && d->preloaded) { + QCopEnvelope e("QPE/System", "fastAppShowing(QString)"); + e << d->appName; + } + r = FALSE; } return r; } void QPEApplication::pidMessage( const QCString& msg, const QByteArray& data) { #ifdef Q_WS_QWS if ( msg == "quit()" ) { - tryQuit(); + tryQuit(); } else if ( msg == "quitIfInvisible()" ) { - if ( d->qpe_main_widget && !d->qpe_main_widget->isVisible() ) - quit(); + if ( d->qpe_main_widget && !d->qpe_main_widget->isVisible() ) + quit(); } else if ( msg == "close()" ) { - hideOrQuit(); + hideOrQuit(); } else if ( msg == "disablePreload()" ) { - d->preloaded = FALSE; - d->keep_running = TRUE; - /* so that quit will quit */ + d->preloaded = FALSE; + d->keep_running = TRUE; + /* so that quit will quit */ } else if ( msg == "enablePreload()" ) { if (d->qpe_main_widget) - d->preloaded = TRUE; - d->keep_running = TRUE; - /* so next quit won't quit */ + 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(); - // Tell the system we're still chugging along... - QCopEnvelope e("QPE/System", "appRaised(QString)"); - e << d->appName; + d->keep_running = TRUE; + d->notbusysent = FALSE; + raiseAppropriateWindow(); + // Tell the system we're still chugging along... + QCopEnvelope e("QPE/System", "appRaised(QString)"); + e << d->appName; } else if ( msg == "flush()" ) { - emit flush(); - // we need to tell the desktop - QCopEnvelope e( "QPE/Desktop", "flushDone(QString)" ); - e << d->appName; + emit flush(); + // we need to tell the desktop + QCopEnvelope e( "QPE/Desktop", "flushDone(QString)" ); + e << d->appName; } else if ( msg == "reload()" ) { - emit 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 ); + 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()" ) { qDebug("got nextView()"); /* - if ( raiseAppropriateWindow() ) + if ( raiseAppropriateWindow() ) */ emit appMessage( msg, data); } else { - emit appMessage( msg, data); + emit appMessage( msg, data); } #endif } /*! Sets widget \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 ) { d->show(mw,nomaximize ); } /*! Sets widget \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. @@ -1148,49 +1149,49 @@ void QPEApplication::showMainDocumentWidget( QWidget* mw, bool nomaximize ) message, the application will process the \link qcop.html QCop\endlink message and then quit. If the application calls this function while processing a \link qcop.html QCop\endlink message, after processing its outstanding \link qcop.html QCop\endlink messages the application will start 'properly' and show itself. \sa keepRunning() */ void QPEApplication::setKeepRunning() { if ( qApp && qApp->inherits( "QPEApplication" ) ) { QPEApplication * qpeApp = ( QPEApplication* ) qApp; qpeApp->d->keep_running = TRUE; } } /*! Returns TRUE if the application will quit after processing the current list of qcop messages; otherwise returns FALSE. \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 ); } #else if ( style == "Windows" ) { setStyle( new QWindowsStyle ); } else if ( style == "QPE" ) { setStyle( new QPEStyle ); } else if ( style == "Light" ) { @@ -1330,128 +1331,128 @@ QPEApplication::StylusMode QPEApplication::stylusOperation( QWidget* w ) 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 ); } } /*! \reimp */ bool QPEApplication::eventFilter( QObject *o, QEvent *e ) { if ( stylusDict && e->type() >= QEvent::MouseButtonPress && e->type() <= QEvent::MouseMove ) { QMouseEvent * me = ( QMouseEvent* ) e; StylusMode mode = (StylusMode)(int)stylusDict->find(o); - switch (mode) { + switch (mode) { case RightOnHold: - switch ( me->type() ) { + switch ( me->type() ) { case QEvent::MouseButtonPress: - if ( me->button() == LeftButton ) { + if ( me->button() == LeftButton ) { d->presstimer = startTimer(500); // #### pref. - d->presswidget = (QWidget*)o; - d->presspos = me->pos(); - d->rightpressed = FALSE; - } - break; + d->presswidget = (QWidget*)o; + d->presspos = me->pos(); + d->rightpressed = FALSE; + } + break; case QEvent::MouseMove: - if (d->presstimer && (me->pos()-d->presspos).manhattanLength() > 8) { - killTimer(d->presstimer); - d->presstimer = 0; - } + if (d->presstimer && (me->pos()-d->presspos).manhattanLength() > 8) { + killTimer(d->presstimer); + d->presstimer = 0; + } break; - case QEvent::MouseButtonRelease: - if ( me->button() == LeftButton ) { - 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: - ; - } + case QEvent::MouseButtonRelease: + if ( me->button() == LeftButton ) { + 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; - } - } + 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; } /*! \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; } } void QPEApplication::removeSenderFromStylusDict() { stylusDict->remove - ( ( void* ) sender() ); + ( ( void* ) sender() ); if ( d->presswidget == sender() ) d->presswidget = 0; } /*! \internal */ bool QPEApplication::keyboardGrabbed() const { 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 ) { #ifndef QT_NO_COP QCopEnvelope e( "QPE/System", "grabKeyboard(QString)" ); e << QString::null; @@ -1520,51 +1521,51 @@ void QPEApplication::tryQuit() QCopEnvelope e( "QPE/System", "closing(QString)" ); e << d->appName; } #endif processEvents(); 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() { processEvents(); // If we are a preloaded application we don't actually quit, so emit // a System message indicating we're quasi-closing. if ( d->preloaded && d->qpe_main_widget ) #ifndef QT_NO_COP { - QCopEnvelope e("QPE/System", "fastAppHiding(QString)" ); + QCopEnvelope e("QPE/System", "fastAppHiding(QString)" ); e << d->appName; - d->qpe_main_widget->hide(); + d->qpe_main_widget->hide(); } #endif 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 ) { return malloc( size ); } void* operator new( size_t size ) { return malloc( size ); } void operator delete[]( void* p ) |