-rw-r--r-- | x11/libqpe-x11/qpe/qpeapplication.cpp | 26 | ||||
-rw-r--r-- | x11/libqpe-x11/qpe/qpeapplication.h | 8 | ||||
-rw-r--r-- | x11/libqpe-x11/qt/qwindowsystem_qws.h | 3 |
3 files changed, 26 insertions, 11 deletions
diff --git a/x11/libqpe-x11/qpe/qpeapplication.cpp b/x11/libqpe-x11/qpe/qpeapplication.cpp index 73e7ce4..c49f3ad 100644 --- a/x11/libqpe-x11/qpe/qpeapplication.cpp +++ b/x11/libqpe-x11/qpe/qpeapplication.cpp @@ -322,243 +322,248 @@ QPEApplication::QPEApplication(int &arg, char** argv, Type t) // we do not have setArgs so we need to take // care of that for ( int a = 0; a < arg; a++ ) { if ( qstrcmp( argv[a], "-preload" ) == 0 ) { d->preloaded = TRUE; }else if ( qstrcmp( argv[a ] , "-preload-show" ) == 0 ) { d->preloaded = TRUE; d->forceshow = TRUE; } } initTranslations(); applyStyle(); if ( type() == GuiServer ) ; installEventFilter( this ); QPEMenuToolFocusManager::initialize(); } void QPEApplication::initTranslations() { // Translations add it 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; } } QString QPEApplication::qpeDir() { const char * base = getenv( "OPIEDIR" ); if ( base ) return QString( base ) + "/"; return QString( "../" ); } QString QPEApplication::documentDir() { const char* base = getenv( "HOME"); if ( base ) return QString( base ) + "/Documents"; return QString( "../Documents" ); } void QPEApplication::applyStyle() { Config config( "qpe" ); config.setGroup( "Appearance" ); // Widget style QString style = config.readEntry( "Style", "Light" ); internalSetStyle( style ); // Colors QColor bgcolor( config.readEntry( "Background", "#E5E1D5" ) ); QColor btncolor( config.readEntry( "Button", "#D6CDBB" ) ); QPalette pal( btncolor, bgcolor ); QString color = config.readEntry( "Highlight", "#800000" ); pal.setColor( QColorGroup::Highlight, QColor( color ) ); color = config.readEntry( "HighlightedText", "#FFFFFF" ); pal.setColor( QColorGroup::HighlightedText, QColor( color ) ); color = config.readEntry( "Text", "#000000" ); pal.setColor( QColorGroup::Text, QColor( color ) ); color = config.readEntry( "ButtonText", "#000000" ); pal.setColor( QPalette::Active, QColorGroup::ButtonText, QColor( color ) ); color = config.readEntry( "Base", "#FFFFFF" ); pal.setColor( QColorGroup::Base, QColor( color ) ); pal.setColor( QPalette::Disabled, QColorGroup::Text, pal.color( QPalette::Active, QColorGroup::Background ).dark() ); setPalette( pal, TRUE ); // Font QString ff = config.readEntry( "FontFamily", font().family() ); int fs = config.readNumEntry( "FontSize", font().pointSize() ); setFont( QFont(ff, fs) ); } int QPEApplication::defaultRotation() { return 0; } -void QPEApplication::setDefaultRotation(int r ) { +void QPEApplication::setDefaultRotation(int) { } void QPEApplication::grabKeyboard() { QPEApplication::Private * 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 } } void QPEApplication::ungrabKeyboard() { QPEApplication::Private * d = ( ( QPEApplication* ) qApp ) ->d; if ( d->kbgrabber == 2 ) { QCopEnvelope e( "QPE/System", "grabKeyboard(QString)" ); e << QString::null; d->kbregrab = FALSE; d->kbgrabber = 0; } } void QPEApplication::showMainWidget( QWidget* wid, bool b) { d->show(wid, b ); } void QPEApplication::showMainDocumentWidget( QWidget* mw, bool m) { if ( mw && argc() == 2 ) Global::setDocument( mw, QString::fromUtf8(argv()[1] ) ); d->show(mw, m ); } void QPEApplication::showDialog( QDialog* d, bool nomax ) { + showWidget( d, nomax ); +} +int QPEApplication::execDialog( QDialog* d, bool nomax) { + showDialog(d,nomax); + return d->exec(); +} + +void QPEApplication::showWidget( QWidget* d, bool nomax ) { QSize sh = d->sizeHint(); int w = QMAX(sh.width(),d->width()); int h = QMAX(sh.height(),d->height()); if ( !nomax && ( w > qApp->desktop()->width()*3/4 || h > qApp->desktop()->height()*3/4 ) ) { - d->showMaximized(); + d->showMaximized(); } else { - d->resize(w,h); - d->show(); + d->resize(w,h); + d->show(); } } -int QPEApplication::execDialog( QDialog* d, bool nomax) { - showDialog(d,nomax); - return d->exec(); -} + void QPEApplication::setKeepRunning() { if ( qApp && qApp->inherits( "QPEApplication" ) ) { QPEApplication * qpeApp = ( QPEApplication* ) qApp; qpeApp->d->keep_running = TRUE; } } bool QPEApplication::keepRunning()const { return d->keep_running; } bool QPEApplication::keyboardGrabbed()const { return d->kbgrabber; } int QPEApplication::exec() { /* now send the QCOP stuff gotten from the file */ d->sendQCopQ(); if ( d->keep_running ) { qWarning("going to exec"); int a = QApplication::exec(); qWarning("left"); return a; } { QCopEnvelope e( "QPE/System", "closing(QString)" ); e << d->appName; } qWarning("processing events!"); processEvents(); return 0; } void QPEApplication::internalSetStyle( const QString& ) { } void QPEApplication::systemMessage( const QCString& chan, const QByteArray& ) { qWarning("QPEApplication::systemMessage( %s )", chan.data() ); } void QPEApplication::pidMessage( const QCString& msg, const QByteArray& ) { if ( msg == "flush()" ) { emit flush(); QCopEnvelope e( "QPE/Desktop", "flushDone(QString)" ); e << d->appName; }else if ( msg == "reload()" ) { emit reload(); } } 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; } } // InputMethods Hints namespace { static QPtrDict<void>* inputMethodDict = 0; static void createInputMethodDict(){ if ( !inputMethodDict ) inputMethodDict = new QPtrDict<void>; } static QPtrDict<void>* stylusDict = 0; static void createDict() { if ( !stylusDict ) stylusDict = new QPtrDict<void>; } }; void QPEApplication::setInputMethodHint( QWidget* w, InputMethodHint mode ) { createInputMethodDict(); if ( mode == Normal ) { inputMethodDict->remove ( w ); }else { inputMethodDict->insert( w, ( void* ) mode ); } } QPEApplication::InputMethodHint QPEApplication::inputMethodHint( QWidget* w) { if ( inputMethodDict && w ) return ( InputMethodHint ) ( int ) inputMethodDict->find( w ); return Normal; } void QPEApplication::removeSenderFromStylusDict() { stylusDict->remove( ( void* ) sender() ); if ( d->presswidget == sender() ) d->presswidget = 0; } void QPEApplication::setStylusOperation( QWidget* w, StylusMode mode) { createDict(); @@ -664,133 +669,138 @@ bool QPEApplication::eventFilter( QObject* o, QEvent* e ) { return FALSE; } // Quit stuff void QPEApplication::restart() { } void QPEApplication::shutdown() { } void QPEApplication::tryQuit() { qWarning("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(); quit(); } void QPEApplication::hideOrQuit() { qWarning("hide or close"); processEvents(); qWarning("past processing"); // 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 ) { qWarning("hiding"); QCopEnvelope e("QPE/System", "fastAppHiding(QString)" ); e << d->appName; d->qpe_main_widget->hide(); } else quit(); } /*! \internal */ 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(); } #ifndef SINGLE_APP { QCopEnvelope envelope( "QPE/System", "forceQuit()" ); } processEvents(); // ensure the message goes out. sleep( 1 ); // You have 1 second to comply. #endif } int QPEApplication::x11ClientMessage(QWidget* w, XEvent* event, bool b ) { qWarning("X11 ClientMessage %d %d", event->type, ClientMessage); if ( event->type == ClientMessage ) { if ( (event->xclient.message_type == d->wm_protocols) && (event->xclient.data.l[0] == d->wm_context_accept ) ) { qWarning("accepted!!!"); /* * I'm not sure if we should use activeWidget * or activeModalWidget * a QDialog could be not modal too */ if ( w->inherits("QDialog" ) ) { qWarning("inherits QDialog!!!"); QDialog* dia = (QDialog*)w; /* * call it directly or via QTimer::singleShot? */ QTimer::singleShot(0, dia, SLOT(accept() ) ); return 0; } } } return QApplication::x11ClientMessage(w, event, b ); } #define KeyPress XKeyPress #define KeyRelease XKeyRelease #if defined(OPIE_NEW_MALLOC) +#define likely(x) x // The libraries with the skiff package (and possibly others) have // completely useless implementations of builtin new and delete that // use about 50% of your CPU. Here we revert to the simple libc // functions. void* operator new[]( size_t size ) { return malloc( size ); } void* operator new( size_t size ) { return malloc( size ); } void operator delete[]( void* p ) { + if ( likely(p) ) free( p ); } void operator delete[]( void* p, size_t /*size*/ ) { + if ( likely(p) ) free( p ); } void operator delete( void* p ) { + if ( likely(p) ) free( p ); } void operator delete( void* p, size_t /*size*/ ) { + if ( likely(p) ) free( p ); } #endif diff --git a/x11/libqpe-x11/qpe/qpeapplication.h b/x11/libqpe-x11/qpe/qpeapplication.h index b1fc074..5521998 100644 --- a/x11/libqpe-x11/qpe/qpeapplication.h +++ b/x11/libqpe-x11/qpe/qpeapplication.h @@ -1,105 +1,107 @@ #ifndef OPIE_QPE_APPLICATION_H #define OPIE_QPE_APPLICATION_H /** * LGPLed */ #include <qapplication.h> #include <qevent.h> - -#include <qpe/timestring.h> +#include <qtopia/timestring.h> +#include <unistd.h> +#include <stdlib.h> class QCopChannel; class QPEApplication : public QApplication { Q_OBJECT public: QPEApplication(int& argc, char** argv, Type=GuiClient ); ~QPEApplication(); static QString qpeDir(); static QString documentDir(); void applyStyle(); static int defaultRotation(); static void setDefaultRotation( int r ); static void grabKeyboard(); static void ungrabKeyboard(); enum StylusMode { LeftOnly, RightOnHold }; static void setStylusOperation( QWidget*, StylusMode ); static StylusMode stylusOperation( QWidget* ); enum InputMethodHint { Normal, AlwaysOff, AlwaysOn }; static void setInputMethodHint( QWidget*, InputMethodHint ); static InputMethodHint inputMethodHint( QWidget* ); void showMainWidget( QWidget*, bool nomax = FALSE ); void showMainDocumentWidget( QWidget*, bool nomax = FALSE ); static void showDialog( QDialog*, bool nomax = FALSE ); - static int execDialog( QDialog*, bool nomax = FALSE ); + static int execDialog ( QDialog*, bool nomax = FALSE ); + static void showWidget( QWidget*, bool nomax = FALSE ); static void setKeepRunning(); bool keepRunning()const; bool keyboardGrabbed()const; int exec(); // QWS bits enum screenSaverHint { Disable = 0, DisableLightOff = 1, DisableSuspend = 2, Enable = 100 }; /* reimplemented for internal purposes */ int x11ClientMessage( QWidget*, XEvent*, bool ); signals: void clientMoused(); void timeChanged(); void clockChanged( bool pm ); void micChanged( bool muted ); void volumeChanged( bool muted ); void appMessage( const QCString& msg, const QByteArray& data); void weekChanged( bool startOnMonday ); void dateFormatChanged( DateFormat ); void flush(); void reload(); private: void initTranslations(); void internalSetStyle(const QString&); private slots: void hideOrQuit(); void systemMessage( const QCString&, const QByteArray& ); void pidMessage( const QCString&, const QByteArray& ); void removeSenderFromStylusDict(); protected: virtual void restart(); virtual void shutdown(); void prepareForTermination(bool willrestart); bool eventFilter( QObject*, QEvent* ); void timerEvent( QTimerEvent* ); void raiseAppropriateWindow(); virtual void tryQuit(); private: class Private; Private* d; QCopChannel *m_sys; QCopChannel *m_pid; }; enum Transformation { Rot0, Rot90, Rot180, Rot270 }; /* from qgfxtransformed_qws.cpp */ #endif diff --git a/x11/libqpe-x11/qt/qwindowsystem_qws.h b/x11/libqpe-x11/qt/qwindowsystem_qws.h index 88902c8..42470cd 100644 --- a/x11/libqpe-x11/qt/qwindowsystem_qws.h +++ b/x11/libqpe-x11/qt/qwindowsystem_qws.h @@ -1,37 +1,40 @@ #ifndef OPIE_QWINDOWSYSTEM_H #define OPIE_QWINDOWSYSTEM_H #include <qimage.h> class QWSScreenSaver; class QWSServer { public: QWSServer(){} ~QWSServer(){} static void sendKeyEvent(int, int, int, bool, bool ) { } struct KeyboardFilter { + bool filter(int,int,int,bool,bool) { + return false; + } }; static void setKeyboardFilter( KeyboardFilter* ) { } static void setScreenSaver( QWSScreenSaver* ) { } static void setScreenSaverInterval( int ) { } static void setScreenSaverIntervals( int[] ) { } static void screenSaverActivate( bool ) { } static void setDesktopBackground( const QImage& ) { } }; struct QWSScreenSaver { }; #endif |