author | zecke <zecke> | 2002-09-10 12:09:49 (UTC) |
---|---|---|
committer | zecke <zecke> | 2002-09-10 12:09:49 (UTC) |
commit | 6b77a1cdb9536b1c135eb86d53a6b2c22c19b0a4 (patch) (side-by-side diff) | |
tree | 6ebc93c6432f4ed9d00ef1448b6a047ef522a79a /library/qpeapplication.cpp | |
parent | d10cddb3c9ce75bc90b14add14bc133737fe35aa (diff) | |
download | opie-6b77a1cdb9536b1c135eb86d53a6b2c22c19b0a4.zip opie-6b77a1cdb9536b1c135eb86d53a6b2c22c19b0a4.tar.gz opie-6b77a1cdb9536b1c135eb86d53a6b2c22c19b0a4.tar.bz2 |
Qtopia1-6 merge
still to test
bic changes to be resolved
more changes to be made?
-rw-r--r-- | library/qpeapplication.cpp | 605 |
1 files changed, 357 insertions, 248 deletions
diff --git a/library/qpeapplication.cpp b/library/qpeapplication.cpp index 8aae786..3ca6d73 100644 --- a/library/qpeapplication.cpp +++ b/library/qpeapplication.cpp @@ -1,5 +1,5 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** @@ -47,2 +47,3 @@ #include <qdragobject.h> +#include <qtextcodec.h> #include <qevent.h> @@ -66,5 +67,10 @@ #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" -#include "fontdatabase.h" +#endif @@ -73,2 +79,4 @@ #include "qpemenubar.h" +#include "textcodecinterface.h" +#include "imagecodecinterface.h" @@ -80,4 +88,3 @@ -class QPEApplicationData -{ +class QPEApplicationData { public: @@ -94,13 +101,11 @@ public: QPoint presspos; - bool rightpressed; + bool rightpressed : 1; // AEH why not use uint foobar :1; if it's tt style -zecke int kbgrabber; - bool kbregrab; - bool notbusysent; + bool kbregrab : 1; + bool notbusysent : 1; QString appName; - struct QCopRec - { + struct QCopRec { QCopRec( const QCString &ch, const QCString &msg, const QByteArray &d ) : - channel( ch ), message( msg ), data( d ) - { } + channel( ch ), message( msg ), data( d ) { } @@ -110,7 +115,7 @@ public: }; - bool preloaded; - bool forceshow; - bool nomaximize; + bool preloaded : 1; + bool forceshow : 1; + bool nomaximize : 1; QWidget* qpe_main_widget; - bool keep_running; + bool keep_running : 1; QList<QCopRec> qcopq; @@ -122,13 +127,110 @@ public: } - void sendQCopQ() - { + 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 ); +#endif qcopq.clear(); } -}; + static void show_mx(QWidget* mw, bool nomaximize) { + if ( mw->layout() && mw->inherits("QDialog") ) { + QPEApplication::showDialog((QDialog*)mw,nomaximize); + } else { +#ifdef Q_WS_QWS + if ( !nomaximize ) + mw->showMaximized(); + else +#endif + 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 ); -class ResourceMimeFactory : public QMimeSourceFactory + 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; + } + + + void show(QWidget* mw, bool nomax) + { + setWidgetCaptionFromAppName( mw, appName, QPEApplication::qpeDir() + "apps" ); + nomaximize = nomax; + qpe_main_widget = mw; +#ifndef QT_NO_COP + sendQCopQ(); +#endif + 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; + } + } + } + + 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 styleName; + QString decorationName; +}; + +class ResourceMimeFactory : public QMimeSourceFactory { public: @@ -211,3 +313,3 @@ static void setMic( int t = 0, int percent = -1 ) - Simply by using QPEApplication instead of QApplication, a plain Qt + Simply by using QPEApplication instead of QApplication, a standard Qt application becomes a Qtopia application. It automatically follows @@ -215,3 +317,32 @@ static void setMic( int t = 0, int percent = -1 ) case of \link docwidget.html document-oriented\endlink applications, - changes the current displayed document in response to the environment. + changes the currently displayed document in response to the environment. + + To create a \link docwidget.html document-oriented\endlink + application use showMainDocumentWidget(); to create a + non-document-oriented application use showMainWidget(). The + keepRunning() function indicates whether the application will + continue running after it's processed the last \link qcop.html + QCop\endlink message. This can be changed using setKeepRunning(). + + A variety of signals are emitted when certain events occur, for + example, timeChanged(), clockChanged(), weekChanged(), + dateFormatChanged() and volumeChanged(). If the application receives + a \link qcop.html QCop\endlink message on the application's + QPE/Application/\e{appname} channel, the appMessage() signal is + emitted. There are also flush() and reload() signals, which + are emitted when synching begins and ends respectively - upon these + signals, the application should save and reload any data + files that are involved in synching. Most of these signals will initially + be received and unfiltered through the appMessage() signal. + + This class also provides a set of useful static functions. The + qpeDir() and documentDir() functions return the respective paths. + The grabKeyboard() and ungrabKeyboard() functions are used to + control whether the application takes control of the device's + physical buttons (e.g. application launch keys). The stylus' mode of + operation is set with setStylusOperation() and retrieved with + stylusOperation(). There are also setInputMethodHint() and + inputMethodHint() functions. + + \ingroup qtopiaemb */ @@ -226,5 +357,4 @@ static void setMic( int t = 0, int percent = -1 ) \fn void QPEApplication::timeChanged(); - - This signal is emitted when the time jumps forward or backwards - by more than the normal passage of time. + This signal is emitted when the time changes outside the normal + passage of time, i.e. if the time is set backwards or forwards. */ @@ -234,5 +364,38 @@ static void setMic( int t = 0, int percent = -1 ) - 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. + This signal is emitted when the user changes the clock's style. If + \a ampm is TRUE, the user wants a 12-hour AM/PM clock, otherwise, + they want a 24-hour clock. +*/ + +/*! + \fn void QPEApplication::volumeChanged( bool muted ) + + This signal is emitted whenever the mute state is changed. If \a + muted is TRUE, then sound output has been muted. +*/ + +/*! + \fn void QPEApplication::weekChanged( bool startOnMonday ) + + This signal is emitted if the week start day is changed. If \a + startOnMonday is TRUE then the first day of the week is Monday; if + \a startOnMonday is FALSE then the first day of the week is + Sunday. +*/ + +/*! + \fn void QPEApplication::dateFormatChanged() + + This signal is emitted whenever the date format is changed. +*/ + +/*! + \fn void QPEApplication::flush() + + ### +*/ + +/*! + \fn void QPEApplication::reload() + */ @@ -242,4 +405,5 @@ static void setMic( int t = 0, int percent = -1 ) - This signal is emitted when a message is received on the - QPE/Application/<i>appname</i> QCop channel for this application. + This signal is emitted when a message is received on this + application's QPE/Application/<i>appname</i> \link qcop.html + QCop\endlink channel. @@ -263,2 +427,4 @@ static void setMic( int t = 0, int percent = -1 ) \sa qcop.html + Note that messages received here may be processed by qpe application + and emitted as signals, such as flush() and reload(). */ @@ -268,2 +434,5 @@ static void setMic( int t = 0, int percent = -1 ) a QApplication, passing \a argc, \a argv, and \a t. + + For applications, \a t should be the default, GuiClient. Only + the Qtopia server passes GuiServer. */ @@ -272,10 +441,21 @@ QPEApplication::QPEApplication( int & argc, char **argv, Type t ) { + d = new QPEApplicationData; + d->loadTextCodecs(); + d->loadImageCodecs(); int dw = desktop() ->width(); if ( dw < 200 ) { - // setFont( QFont( "helvetica", 8 ) ); + setFont( QFont( "helvetica", 8 ) ); AppLnk::setSmallIconSize( 10 ); AppLnk::setBigIconSize( 28 ); + }else if ( dw > 600 ) { + setFont( QFont( "helvetica", 12 ) ); + AppLnk::setSmallIconSize( 24 ); + AppLnk::setBigIconSize( 48 ); + }else if ( dw > 400 ) { + setFont( QFont( "helvetica", 12 ) ); + AppLnk::setSmallIconSize( 16 ); + AppLnk::setBigIconSize( 32 ); } - d = new QPEApplicationData; + QMimeSourceFactory::setDefaultFactory( new ResourceMimeFactory ); @@ -341,3 +521,3 @@ QPEApplication::QPEApplication( int & argc, char **argv, Type t ) - qwsSetDecoration( new QPEDecoration() ); +// qwsSetDecoration( new QPEDecoration() ); @@ -366,7 +546,4 @@ QPEApplication::QPEApplication( int & argc, char **argv, Type t ) - /* - * not required. if using one of these languages, you might as well install - * a custom font. - //###language/font hack; should look it up somewhere +#ifdef QWS if ( lang == "ja" || lang == "zh_CN" || lang == "zh_TW" || lang == "ko" ) { @@ -375,19 +552,4 @@ QPEApplication::QPEApplication( int & argc, char **argv, Type t ) } - - 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 } - #endif @@ -419,5 +581,6 @@ static void createInputMethodDict() Returns the currently set hint to the system as to whether - \a w has any use for text input methods. + widget \a w has any use for text input methods. - \sa setInputMethodHint() + + \sa setInputMethodHint() InputMethodHint */ @@ -439,6 +602,6 @@ QPEApplication::InputMethodHint QPEApplication::inputMethodHint( QWidget * w ) /*! - Hints to the system that \a w has use for text input methods + Hints to the system that widget \a w has use for text input methods as specified by \a mode. - \sa inputMethodHint() + \sa inputMethodHint() InputMethodHint */ @@ -459,10 +622,4 @@ class HackDialog : public QDialog public: - void acceptIt() - { - accept(); - } - void rejectIt() - { - reject(); - } + void acceptIt() { accept(); } + void rejectIt() { reject(); } }; @@ -482,3 +639,5 @@ void QPEApplication::mapToDefaultAction( QWSKeyEvent * ke, int key ) +#ifdef QWS ke->simpleData.keycode = key; +#endif } @@ -489,5 +648,3 @@ public: bool needsOk() - { - return ( getWState() & WState_Reserved1 ); - } + { return ( getWState() & WState_Reserved1 ); } }; @@ -497,2 +654,4 @@ public: */ + +#ifdef QWS bool QPEApplication::qwsEventFilter( QWSEvent * e ) @@ -511,2 +670,5 @@ bool QPEApplication::qwsEventFilter( QWSEvent * e ) emit clientMoused(); + break; + default: + break; } @@ -546,4 +708,3 @@ bool QPEApplication::qwsEventFilter( QWSEvent * e ) } - } - else if ( ke->simpleData.keycode == Qt::Key_F30 ) { + } else if ( ke->simpleData.keycode == Qt::Key_F30 ) { // Use special "select" key to do whatever default action a widget has @@ -612,2 +773,3 @@ bool QPEApplication::qwsEventFilter( QWSEvent * e ) } +#endif @@ -646,7 +808,3 @@ QString QPEApplication::documentDir() { - const char * base = getenv( "HOME" ); - if ( base ) - return QString( base ) + "/Documents/"; - - return QString( "../Documents/" ); + return QString( qpeDir() + "Documents"); } @@ -686,5 +844,9 @@ void QPEApplication::setDefaultRotation( int r ) setenv( "QWS_DISPLAY", QString( "Transformed:Rot%1:0" ).arg( r ).latin1(), 1 ); - } - else { - QCopEnvelope( "QPE/System", "setDefaultRotation(int)" ) << r; + 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 } @@ -724,2 +886,14 @@ void QPEApplication::applyStyle() 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) ); } @@ -732,4 +906,3 @@ void QPEApplication::systemMessage( const QCString & msg, const QByteArray & dat applyStyle(); - } - else if ( msg == "setDefaultRotation(int)" ) { + } else if ( msg == "setDefaultRotation(int)" ) { if ( type() == GuiServer ) { @@ -739,20 +912,15 @@ void QPEApplication::systemMessage( const QCString & msg, const QByteArray & dat } - } - else if ( msg == "shutdown()" ) { + } else if ( msg == "shutdown()" ) { if ( type() == GuiServer ) shutdown(); - } - else if ( msg == "quit()" ) { + } else if ( msg == "quit()" ) { if ( type() != GuiServer ) tryQuit(); - } - else if ( msg == "forceQuit()" ) { + } else if ( msg == "forceQuit()" ) { if ( type() != GuiServer ) quit(); - } - else if ( msg == "restart()" ) { + } else if ( msg == "restart()" ) { if ( type() == GuiServer ) restart(); - } - else if ( msg == "grabKeyboard(QString)" ) { + } else if ( msg == "grabKeyboard(QString)" ) { QString who; @@ -765,6 +933,3 @@ void QPEApplication::systemMessage( const QCString & msg, const QByteArray & dat d->kbgrabber = 2; - - printf( "'%s' received grabKeyboard ( '%s' ) -> kbgrabber = %d\n", d-> appName.latin1(), who.latin1(), d-> kbgrabber ); - } - else if ( msg == "language(QString)" ) { + } else if ( msg == "language(QString)" ) { if ( type() == GuiServer ) { @@ -781,4 +946,3 @@ void QPEApplication::systemMessage( const QCString & msg, const QByteArray & dat } - } - else if ( msg == "timeChange(QString)" ) { + } else if ( msg == "timeChange(QString)" ) { QString t; @@ -791,4 +955,3 @@ void QPEApplication::systemMessage( const QCString & msg, const QByteArray & dat emit timeChanged(); - } - else if ( msg == "execute(QString)" ) { + } else if ( msg == "execute(QString)" ) { if ( type() == GuiServer ) { @@ -798,4 +961,3 @@ void QPEApplication::systemMessage( const QCString & msg, const QByteArray & dat } - } - else if ( msg == "execute(QString,QString)" ) { + } else if ( msg == "execute(QString,QString)" ) { if ( type() == GuiServer ) { @@ -805,4 +967,3 @@ void QPEApplication::systemMessage( const QCString & msg, const QByteArray & dat } - } - else if ( msg == "addAlarm(QDateTime,QCString,QCString,int)" ) { + } else if ( msg == "addAlarm(QDateTime,QCString,QCString,int)" ) { if ( type() == GuiServer ) { @@ -814,4 +975,3 @@ void QPEApplication::systemMessage( const QCString & msg, const QByteArray & dat } - } - else if ( msg == "deleteAlarm(QDateTime,QCString,QCString,int)" ) { + } else if ( msg == "deleteAlarm(QDateTime,QCString,QCString,int)" ) { if ( type() == GuiServer ) { @@ -823,4 +983,3 @@ void QPEApplication::systemMessage( const QCString & msg, const QByteArray & dat } - } - else if ( msg == "clockChange(bool)" ) { + } else if ( msg == "clockChange(bool)" ) { int tmp; @@ -828,4 +987,3 @@ void QPEApplication::systemMessage( const QCString & msg, const QByteArray & dat emit clockChanged( tmp ); - } - else if ( msg == "weekChange(bool)" ) { + } else if ( msg == "weekChange(bool)" ) { int tmp; @@ -833,4 +991,3 @@ void QPEApplication::systemMessage( const QCString & msg, const QByteArray & dat emit weekChanged( tmp ); - } - else if ( msg == "setDateFormat(DateFormat)" ) { + } else if ( msg == "setDateFormat(DateFormat)" ) { DateFormat tmp; @@ -838,4 +995,3 @@ void QPEApplication::systemMessage( const QCString & msg, const QByteArray & dat emit dateFormatChanged( tmp ); - } - else if ( msg == "setVolume(int,int)" ) { + } else if ( msg == "setVolume(int,int)" ) { int t, v; @@ -844,4 +1000,3 @@ void QPEApplication::systemMessage( const QCString & msg, const QByteArray & dat emit volumeChanged( muted ); - } - else if ( msg == "volumeChange(bool)" ) { + } else if ( msg == "volumeChange(bool)" ) { stream >> muted; @@ -849,4 +1004,3 @@ void QPEApplication::systemMessage( const QCString & msg, const QByteArray & dat emit volumeChanged( muted ); - } - else if ( msg == "setMic(int,int)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com> + } else if ( msg == "setMic(int,int)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com> int t, v; @@ -855,4 +1009,3 @@ void QPEApplication::systemMessage( const QCString & msg, const QByteArray & dat emit micChanged( micMuted ); - } - else if ( msg == "micChange(bool)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com> + } else if ( msg == "micChange(bool)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com> stream >> micMuted; @@ -873,4 +1026,3 @@ bool QPEApplication::raiseAppropriateWindow() QWidget *top = d->qpe_main_widget; - if ( !top ) - top = mainWidget(); + if ( !top ) top =mainWidget(); if ( top && d->keep_running ) { @@ -878,10 +1030,9 @@ bool QPEApplication::raiseAppropriateWindow() r = TRUE; -#ifdef Q_WS_QWS - - if ( !d->nomaximize ) - top->showMaximized(); - else -#endif + else if (d->preloaded) { + // We are preloaded and not visible.. pretend we just started.. + QCopEnvelope e("QPE/System", "fastAppShowing(QString)"); + e << d->appName; + } - top->show(); + d->show_mx(top,d->nomaximize); top->raise(); @@ -894,2 +1045,7 @@ bool QPEApplication::raiseAppropriateWindow() 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; @@ -905,11 +1061,8 @@ void QPEApplication::pidMessage( const QCString &msg, const QByteArray & data ) tryQuit(); - } - else if ( msg == "quitIfInvisible()" ) { + } else if ( msg == "quitIfInvisible()" ) { if ( d->qpe_main_widget && !d->qpe_main_widget->isVisible() ) quit(); - } - else if ( msg == "close()" ) { + } else if ( msg == "close()" ) { hideOrQuit(); - } - else if ( msg == "disablePreload()" ) { + } else if ( msg == "disablePreload()" ) { d->preloaded = FALSE; @@ -917,4 +1070,4 @@ void QPEApplication::pidMessage( const QCString &msg, const QByteArray & data ) /* so that quit will quit */ - } - else if ( msg == "enablePreload()" ) { + } else if ( msg == "enablePreload()" ) { + if (d->qpe_main_widget) d->preloaded = TRUE; @@ -922,4 +1075,3 @@ void QPEApplication::pidMessage( const QCString &msg, const QByteArray & data ) /* so next quit won't quit */ - } - else if ( msg == "raise()" ) { + } else if ( msg == "raise()" ) { d->keep_running = TRUE; @@ -927,4 +1079,6 @@ void QPEApplication::pidMessage( const QCString &msg, const QByteArray & data ) raiseAppropriateWindow(); - } - else if ( msg == "flush()" ) { + // Tell the system we're still chugging along... + QCopEnvelope e("QPE/System", "appRaised(QString)"); + e << d->appName; + } else if ( msg == "flush()" ) { emit flush(); @@ -933,7 +1087,5 @@ void QPEApplication::pidMessage( const QCString &msg, const QByteArray & data ) e << d->appName; - } - else if ( msg == "reload()" ) { + } else if ( msg == "reload()" ) { emit reload(); - } - else if ( msg == "setDocument(QString)" ) { + } else if ( msg == "setDocument(QString)" ) { d->keep_running = TRUE; @@ -947,35 +1099,13 @@ void QPEApplication::pidMessage( const QCString &msg, const QByteArray & data ) Global::setDocument( mw, doc ); - } - else if ( msg == "nextView()" ) { + } else if ( msg == "nextView()" ) { + qDebug("got nextView()"); +/* if ( raiseAppropriateWindow() ) +*/ emit appMessage( msg, data ); - } - else { + } 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; +#endif } @@ -984,3 +1114,3 @@ static bool setWidgetCaptionFromAppName( QWidget* /*mw*/, const QString& /*appNa /*! - Sets \a mw as the mainWidget() and shows it. For small windows, + Sets widget \a mw as the mainWidget() and shows it. For small windows, consider passing TRUE for \a nomaximize rather than the default FALSE. @@ -991,27 +1121,3 @@ void QPEApplication::showMainWidget( QWidget* mw, bool nomaximize ) { - setWidgetCaptionFromAppName( mw, d->appName, qpeDir() + "apps" ); - - 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 -#endif - - mw->show(); - } - } - else if ( d->keep_running ) { -#ifdef Q_WS_QWS - if ( !nomaximize ) - mw->showMaximized(); - else -#endif - - mw->show(); - } + d->show(mw,nomaximize ); } @@ -1019,3 +1125,3 @@ void QPEApplication::showMainWidget( QWidget* mw, bool nomaximize ) /*! - Sets \a mw as the mainWidget() and shows it. For small windows, + Sets widget \a mw as the mainWidget() and shows it. For small windows, consider passing TRUE for \a nomaximize rather than the default FALSE. @@ -1025,3 +1131,3 @@ void QPEApplication::showMainWidget( QWidget* mw, bool nomaximize ) - The \a mw widget must have a slot: setDocument(const QString&). + The \a mw widget \e must have this slot: setDocument(const QString&). @@ -1031,29 +1137,6 @@ 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 ) { -#ifdef Q_WS_QWS - if ( !nomaximize ) - mw->showMaximized(); - else -#endif - - mw->show(); - } - } - else if ( d->keep_running ) { -#ifdef Q_WS_QWS - if ( !nomaximize ) - mw->showMaximized(); - else -#endif - mw->show(); - } + d->show(mw, nomaximize ); } @@ -1062,7 +1145,8 @@ void QPEApplication::showMainDocumentWidget( QWidget* mw, bool nomaximize ) /*! - 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. + If an application is started via a \link qcop.html QCop\endlink + 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. @@ -1079,4 +1163,4 @@ void QPEApplication::setKeepRunning() /*! - Returns whether the application will quit after processing the current - list of qcop messages. + Returns TRUE if the application will quit after processing the + current list of qcop messages; otherwise returns FALSE. @@ -1216,5 +1300,5 @@ static void createDict() /*! - Returns the current StylusMode for \a w. + Returns the current StylusMode for widget \a w. - \sa setStylusOperation() + \sa setStylusOperation() StylusMode */ @@ -1235,3 +1319,3 @@ QPEApplication::StylusMode QPEApplication::stylusOperation( QWidget * w ) - See setStylusOperation(). + \sa setStylusOperation() stylusOperation() */ @@ -1239,5 +1323,6 @@ QPEApplication::StylusMode QPEApplication::stylusOperation( QWidget * w ) /*! - Causes \a w to receive mouse events according to \a mode. + Causes widget \a w to receive mouse events according to the stylus + \a mode. - \sa stylusOperation() + \sa stylusOperation() StylusMode */ @@ -1266,3 +1351,2 @@ bool QPEApplication::eventFilter( QObject *o, QEvent *e ) QMouseEvent * me = ( QMouseEvent* ) e; - if ( me->button() == LeftButton ) { StylusMode mode = ( StylusMode ) ( int ) stylusDict->find( o ); @@ -1272,2 +1356,3 @@ bool QPEApplication::eventFilter( QObject *o, QEvent *e ) case QEvent::MouseButtonPress: + if ( me->button() == LeftButton ) { d->presstimer = startTimer( 500 ); // #### pref. @@ -1276,4 +1361,12 @@ bool QPEApplication::eventFilter( QObject *o, QEvent *e ) d->rightpressed = FALSE; + } + break; + case QEvent::MouseMove: + 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 ) { @@ -1297,2 +1390,3 @@ bool QPEApplication::eventFilter( QObject *o, QEvent *e ) } + } break; @@ -1305,5 +1399,3 @@ bool QPEApplication::eventFilter( QObject *o, QEvent *e ) } - } - } - else if ( e->type() == QEvent::KeyPress || e->type() == QEvent::KeyRelease ) { + }else if ( e->type() == QEvent::KeyPress || e->type() == QEvent::KeyRelease ) { QKeyEvent * ke = ( QKeyEvent * ) e; @@ -1317,3 +1409,2 @@ bool QPEApplication::eventFilter( QObject *o, QEvent *e ) } - return FALSE; @@ -1362,4 +1453,6 @@ void QPEApplication::ungrabKeyboard() if ( d->kbgrabber == 2 ) { +#ifndef QT_NO_COP QCopEnvelope e( "QPE/System", "grabKeyboard(QString)" ); e << QString::null; +#endif d->kbregrab = FALSE; @@ -1370,5 +1463,7 @@ void QPEApplication::ungrabKeyboard() /*! - Grabs the keyboard such that the system's application launching - keys no longer work, and instead they are receivable by this - application. + Grabs the physical keyboard keys, e.g. the application's launching + keys. Instead of launching applications when these keys are pressed + the signals emitted are sent to this application instead. Some games + programs take over the launch keys in this way to make interaction + easier. @@ -1382,4 +1477,6 @@ void QPEApplication::grabKeyboard() else { +#ifndef QT_NO_COP QCopEnvelope e( "QPE/System", "grabKeyboard(QString)" ); e << d->appName; +#endif d->kbgrabber = 2; // me @@ -1393,3 +1490,5 @@ int QPEApplication::exec() { +#ifndef QT_NO_COP d->sendQCopQ(); +#endif if ( d->keep_running ) @@ -1398,2 +1497,3 @@ int QPEApplication::exec() +#ifndef QT_NO_COP { @@ -1402,2 +1502,3 @@ int QPEApplication::exec() } +#endif processEvents(); @@ -1415,2 +1516,3 @@ void QPEApplication::tryQuit() return ; // Inside modal loop or konsole. Too hard to save state. +#ifndef QT_NO_COP { @@ -1419,2 +1521,3 @@ void QPEApplication::tryQuit() } +#endif processEvents(); @@ -1432,10 +1535,14 @@ void QPEApplication::hideOrQuit() { - // notify of our demise :) - { - QCopEnvelope e( "QPE/System", "closing(QString)" ); - e << d->appName; - } 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)" ); + e << d->appName; d->qpe_main_widget->hide(); + } +#endif else @@ -1485,2 +1592,3 @@ void operator delete( void* p, size_t /*size*/ ) #include <qwidgetlist.h> +#ifdef QWS #include <qgfx_qws.h> @@ -1505 +1613,2 @@ void qt_setMaxWindowRect( const QRect & r ) #endif +#endif |