summaryrefslogtreecommitdiff
path: root/library/qpeapplication.cpp
authorzecke <zecke>2002-09-10 12:09:49 (UTC)
committer zecke <zecke>2002-09-10 12:09:49 (UTC)
commit6b77a1cdb9536b1c135eb86d53a6b2c22c19b0a4 (patch) (side-by-side diff)
tree6ebc93c6432f4ed9d00ef1448b6a047ef522a79a /library/qpeapplication.cpp
parentd10cddb3c9ce75bc90b14add14bc133737fe35aa (diff)
downloadopie-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?
Diffstat (limited to 'library/qpeapplication.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--library/qpeapplication.cpp1937
1 files changed, 1023 insertions, 914 deletions
diff --git a/library/qpeapplication.cpp b/library/qpeapplication.cpp
index 8aae786..3ca6d73 100644
--- a/library/qpeapplication.cpp
+++ b/library/qpeapplication.cpp
@@ -1,7 +1,7 @@
/**********************************************************************
-** 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.
**
** 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
@@ -45,6 +45,7 @@
#include <qlabel.h>
#include <qdialog.h>
#include <qdragobject.h>
+#include <qtextcodec.h>
#include <qevent.h>
#include <qtooltip.h>
#include <qsignal.h>
@@ -64,13 +65,20 @@
#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"
+#ifdef QWS
#include "fontmanager.h"
-#include "fontdatabase.h"
+#endif
#include "alarmserver.h"
#include "applnk.h"
#include "qpemenubar.h"
+#include "textcodecinterface.h"
+#include "imagecodecinterface.h"
#include <unistd.h>
#include <sys/file.h>
@@ -78,8 +86,7 @@
#include <sys/soundcard.h>
-class QPEApplicationData
-{
+class QPEApplicationData {
public:
QPEApplicationData() : presstimer( 0 ), presswidget( 0 ), rightpressed( FALSE ),
kbgrabber( 0 ), kbregrab( FALSE ), notbusysent( FALSE ), preloaded( FALSE ),
@@ -92,27 +99,25 @@ public:
int presstimer;
QWidget* presswidget;
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
- {
- QCopRec( const QCString &ch, const QCString &msg,
- const QByteArray &d ) :
- channel( ch ), message( msg ), data( d )
- { }
+ 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;
+ bool preloaded : 1;
+ bool forceshow : 1;
+ bool nomaximize : 1;
QWidget* qpe_main_widget;
- bool keep_running;
+ bool keep_running : 1;
QList<QCopRec> qcopq;
void enqueueQCop( const QCString &ch, const QCString &msg,
@@ -120,17 +125,114 @@ public:
{
qcopq.append( new QCopRec( ch, msg, data ) );
}
- void sendQCopQ()
- {
- QCopRec * r;
+ 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 );
+
+ 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
-{
+class ResourceMimeFactory : public QMimeSourceFactory {
public:
ResourceMimeFactory()
{
@@ -164,43 +266,43 @@ 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;
- }
+ 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 )
{
- 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;
+ }
}
@@ -209,11 +311,40 @@ static void setMic( int t = 0, int percent = -1 )
\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
+ Simply by using QPEApplication instead of QApplication, a standard 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.
+ 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
*/
/*!
@@ -224,407 +355,438 @@ 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.
*/
/*!
\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.
+ 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()
+
*/
/*!
\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.
+ This signal is emitted when a message is received on this
+ application's QPE/Application/<i>appname</i> \link qcop.html
+ QCop\endlink channel.
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)" ) {
- ...
- }
+ 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
+ Note that messages received here may be processed by qpe application
+ and emitted as signals, such as flush() and reload().
*/
/*!
Constructs a QPEApplication just as you would construct
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.
*/
QPEApplication::QPEApplication( int & argc, char **argv, Type t )
- : QApplication( argc, argv, t )
+ : QApplication( argc, argv, t )
{
- int dw = desktop() ->width();
- if ( dw < 200 ) {
- // setFont( QFont( "helvetica", 8 ) );
- AppLnk::setSmallIconSize( 10 );
- AppLnk::setBigIconSize( 28 );
- }
+ d = new QPEApplicationData;
+ d->loadTextCodecs();
+ d->loadImageCodecs();
+ int dw = desktop() ->width();
+ if ( dw < 200 ) {
+ 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 );
- connect( this, SIGNAL( lastWindowClosed() ), this, SLOT( hideOrQuit() ) );
-#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
+ QMimeSourceFactory::setDefaultFactory( new ResourceMimeFactory );
- QString qcopfn( "/tmp/qcop-msg-" );
- qcopfn += QString( argv[ 0 ] ); // append command name
+ connect( this, SIGNAL( lastWindowClosed() ), this, SLOT( hideOrQuit() ) );
+#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
- 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;
-
- /*
- * not required. if using one of these languages, you might as well install
- * a custom font.
-
- //###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
+#ifdef QWS
+ if ( lang == "ja" || lang == "zh_CN" || lang == "zh_TW" || lang == "ko" ) {
+ QFont fn = FontManager::unicodeFont( FontManager::Proportional );
+ setFont( fn );
+ }
+#endif
+ }
#endif
- applyStyle();
+ applyStyle();
- if ( type() == GuiServer ) {
- setVolume();
- }
+ if ( type() == GuiServer ) {
+ setVolume();
+ }
- 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 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.
+ widget \a w has any use for text input methods.
- \sa setInputMethodHint()
+
+ \sa setInputMethodHint() InputMethodHint
*/
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
+ \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.
+ \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
+ Hints to the system that widget \a w has use for text input methods
as specified by \a mode.
- \sa inputMethodHint()
+ \sa inputMethodHint() InputMethodHint
*/
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 )
{
- // 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;
-
- ke->simpleData.keycode = 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;
+
+ if ( activePopupWidget() && activePopupWidget() ->inherits( "QPopupMenu" ) )
+ key = Qt::Key_Return;
+
+#ifdef QWS
+ ke->simpleData.keycode = key;
+#endif
}
class HackWidget : public QWidget
{
public:
- bool needsOk()
- {
- return ( getWState() & WState_Reserved1 );
- }
+ bool needsOk()
+ { return ( getWState() & WState_Reserved1 ); }
};
/*!
\internal
*/
+
+#ifdef QWS
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();
+ break;
+ default:
+ break;
+ }
+ }
+ 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 );
}
+#endif
/*!
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;
}
/*!
@@ -632,11 +794,11 @@ QPEApplication::~QPEApplication()
*/
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( "../" );
}
/*!
@@ -644,11 +806,7 @@ QString QPEApplication::qpeDir()
*/
QString QPEApplication::documentDir()
{
- const char * base = getenv( "HOME" );
- if ( base )
- return QString( base ) + "/Documents/";
-
- return QString( "../Documents/" );
+ return QString( qpeDir() + "Documents");
}
static int deforient = -1;
@@ -658,22 +816,22 @@ static int deforient = -1;
*/
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;
}
/*!
@@ -681,13 +839,17 @@ int QPEApplication::defaultRotation()
*/
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 );
+ 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
+ }
}
/*!
@@ -722,143 +884,134 @@ void QPEApplication::applyStyle()
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 )
+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;
- 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;
-
- printf( "'%s' received grabKeyboard ( '%s' ) -> kbgrabber = %d\n", d-> appName.latin1(), who.latin1(), d-> kbgrabber );
- }
- 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 );
- }
+ QDataStream stream( data, IO_ReadOnly );
+ if ( msg == "applyStyle()" ) {
+ applyStyle();
+ } 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 );
+ }
#endif
}
@@ -867,218 +1020,149 @@ void QPEApplication::systemMessage( const QCString & msg, const QByteArray & dat
*/
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;
-#ifdef Q_WS_QWS
-
- 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;
+ 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;
+ 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();
+ }
+ 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;
+ }
+ 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 );
- }
-#endif
-}
-
+ 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()" ) {
+ if (d->qpe_main_widget)
+ 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;
+ } 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()" ) {
+ qDebug("got nextView()");
+/*
+ if ( raiseAppropriateWindow() )
+*/
+ emit appMessage( msg, data);
+ } else {
+ emit appMessage( msg, data);
+ }
-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
}
/*!
- 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.
\sa showMainDocumentWidget()
*/
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 );
}
/*!
- 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.
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&).
+ The \a mw widget \e must have this 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 ) {
-#ifdef Q_WS_QWS
- if ( !nomaximize )
- mw->showMaximized();
- else
-#endif
+ if ( mw && argc() == 2 )
+ Global::setDocument( mw, QString::fromUtf8(argv()[1]) );
- mw->show();
- }
- }
- else if ( d->keep_running ) {
-#ifdef Q_WS_QWS
- if ( !nomaximize )
- mw->showMaximized();
- else
-#endif
-
- mw->show();
- }
+ d->show(mw, 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.
\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.
+ Returns TRUE if the application will quit after processing the
+ current list of qcop messages; otherwise returns FALSE.
\sa setKeepRunning()
*/
@@ -1093,74 +1177,74 @@ bool QPEApplication::keepRunning() const
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
- else {
- QStyle *sty = 0;
- QString path = QPEApplication::qpeDir ( ) + "/plugins/styles/lib" + style. lower ( ) + ".so";
+ else {
+ QStyle *sty = 0;
+ QString path = QPEApplication::qpeDir ( ) + "/plugins/styles/lib" + style. lower ( ) + ".so";
- static QLibrary *lastlib = 0;
- static StyleInterface *lastiface = 0;
+ static QLibrary *lastlib = 0;
+ static StyleInterface *lastiface = 0;
- QLibrary *lib = new QLibrary ( path );
- StyleInterface *iface = 0;
+ QLibrary *lib = new QLibrary ( path );
+ StyleInterface *iface = 0;
- if ( lib-> queryInterface ( IID_Style, ( QUnknownInterface ** ) &iface ) == QS_OK )
- sty = iface-> create ( );
+ if ( lib-> queryInterface ( IID_Style, ( QUnknownInterface ** ) &iface ) == QS_OK )
+ sty = iface-> create ( );
- if ( sty ) {
- setStyle ( sty );
+ if ( sty ) {
+ setStyle ( sty );
- if ( lastiface )
- lastiface-> release ( );
- lastiface = iface;
+ if ( lastiface )
+ lastiface-> release ( );
+ lastiface = iface;
- if ( lastlib ) {
- lastlib-> unload ( );
- delete lastlib;
- }
- lastlib = lib;
- }
- else {
- if ( iface )
- iface-> release ( );
- delete lib;
+ if ( lastlib ) {
+ lastlib-> unload ( );
+ delete lastlib;
+ }
+ lastlib = lib;
+ }
+ else {
+ if ( iface )
+ iface-> release ( );
+ delete lib;
- setStyle ( new QPEStyle ( ));
- }
- }
+ setStyle ( new QPEStyle ( ));
+ }
+ }
#endif
}
@@ -1169,24 +1253,24 @@ void QPEApplication::internalSetStyle( const QString &style )
*/
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
}
@@ -1195,7 +1279,7 @@ void QPEApplication::prepareForTermination( bool willrestart )
*/
void QPEApplication::shutdown()
{
- // Implement in server's QPEApplication subclass
+ // Implement in server's QPEApplication subclass
}
/*!
@@ -1203,57 +1287,58 @@ void QPEApplication::shutdown()
*/
void QPEApplication::restart()
{
- // Implement in server's QPEApplication subclass
+ // Implement in server's QPEApplication subclass
}
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.
+ Returns the current StylusMode for widget \a w.
- \sa setStylusOperation()
+ \sa setStylusOperation() StylusMode
*/
-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).
+ events (the default).
\value RightOnHold the stylus generates RightButton events
- if the user uses the press-and-hold gesture.
+ if the user uses the press-and-hold gesture.
- See setStylusOperation().
+ \sa setStylusOperation() stylusOperation()
*/
/*!
- 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
*/
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 );
+ }
}
@@ -1262,61 +1347,67 @@ void QPEApplication::setStylusOperation( QWidget * w, StylusMode mode )
*/
bool QPEApplication::eventFilter( QObject *o, QEvent *e )
{
- if ( stylusDict && e->type() >= QEvent::MouseButtonPress && e->type() <= QEvent::MouseMove ) {
- QMouseEvent * me = ( QMouseEvent* ) e;
+ if ( stylusDict && e->type() >= QEvent::MouseButtonPress && e->type() <= QEvent::MouseMove ) {
+ QMouseEvent * me = ( QMouseEvent* ) e;
+ StylusMode mode = (StylusMode)(int)stylusDict->find(o);
+ switch (mode) {
+ case RightOnHold:
+ switch ( me->type() ) {
+ case QEvent::MouseButtonPress:
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:
- ;
- }
+ d->presstimer = startTimer(500); // #### pref.
+ d->presswidget = (QWidget*)o;
+ d->presspos = me->pos();
+ d->rightpressed = FALSE;
}
- }
- 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;
- }
+ 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 ) {
+ 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;
}
/*!
@@ -1324,23 +1415,23 @@ bool QPEApplication::eventFilter( QObject *o, QEvent *e )
*/
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
+ stylusDict->remove
( ( void* ) sender() );
- if ( d->presswidget == sender() )
- d->presswidget = 0;
+ if ( d->presswidget == sender() )
+ d->presswidget = 0;
}
/*!
@@ -1348,7 +1439,7 @@ void QPEApplication::removeSenderFromStylusDict()
*/
bool QPEApplication::keyboardGrabbed() const
{
- return d->kbgrabber;
+ return d->kbgrabber;
}
@@ -1358,32 +1449,38 @@ bool QPEApplication::keyboardGrabbed() const
*/
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 ) {
+#ifndef QT_NO_COP
+ QCopEnvelope e( "QPE/System", "grabKeyboard(QString)" );
+ e << QString::null;
+#endif
+ 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.
+ 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.
\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 {
+#ifndef QT_NO_COP
+ QCopEnvelope e( "QPE/System", "grabKeyboard(QString)" );
+ e << d->appName;
+#endif
+ d->kbgrabber = 2; // me
+ }
}
/*!
@@ -1391,17 +1488,21 @@ void QPEApplication::grabKeyboard()
*/
int QPEApplication::exec()
{
- d->sendQCopQ();
- if ( d->keep_running )
- //|| d->qpe_main_widget && d->qpe_main_widget->isVisible() )
- return QApplication::exec();
+#ifndef QT_NO_COP
+ d->sendQCopQ();
+#endif
+ 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;
+#ifndef QT_NO_COP
+ {
+ QCopEnvelope e( "QPE/System", "closing(QString)" );
+ e << d->appName;
+ }
+#endif
+ processEvents();
+ return 0;
}
/*!
@@ -1411,15 +1512,17 @@ int QPEApplication::exec()
*/
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.
+#ifndef QT_NO_COP
+ {
+ QCopEnvelope e( "QPE/System", "closing(QString)" );
+ e << d->appName;
+ }
+#endif
+ processEvents();
- quit();
+ quit();
}
/*!
@@ -1430,16 +1533,20 @@ void QPEApplication::tryQuit()
*/
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();
+ 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
+ quit();
}
#if defined(QT_QWS_IPAQ) || defined(QT_QWS_EBX)
@@ -1449,57 +1556,59 @@ void QPEApplication::hideOrQuit()
// 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 )
{
- 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 )
{
- free( p );
+ free( p );
}
void operator delete( void* p, size_t /*size*/ )
{
- free( p );
+ free( p );
}
#endif
#if ( QT_VERSION <= 230 ) && !defined(SINGLE_APP)
#include <qwidgetlist.h>
+#ifdef QWS
#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
+#endif