-rw-r--r-- | core/tools/quicklauncher/main.cpp | 227 |
1 files changed, 115 insertions, 112 deletions
diff --git a/core/tools/quicklauncher/main.cpp b/core/tools/quicklauncher/main.cpp index b1befce..fb2ca44 100644 --- a/core/tools/quicklauncher/main.cpp +++ b/core/tools/quicklauncher/main.cpp @@ -70,3 +70,3 @@ void setproctitle (const char *fmt,...) { if (!argv0) - return; + return; @@ -78,5 +78,6 @@ void setproctitle (const char *fmt,...) { if (i > argv_lth - 2) { - i = argv_lth - 2; - buf[i] = '\0'; + i = argv_lth - 2; + buf[i] = '\0'; } + memset(argv0[0], '\0', argv_lth); /* clear the memory area */ @@ -95,7 +96,7 @@ public: { - QCString ch("QPE/QuickLauncher-"); - ch += QString::number(getpid()); - qlChannel = new QCopChannel( ch, this); - connect( qlChannel, SIGNAL(received(const QCString&,const QByteArray&)), - this, SLOT(message(const QCString&,const QByteArray&)) ); + QCString ch("QPE/QuickLauncher-"); + ch += QString::number(getpid()); + qlChannel = new QCopChannel( ch, this); + connect( qlChannel, SIGNAL(received(const QCString&,const QByteArray&)), + this, SLOT(message(const QCString&,const QByteArray&)) ); } @@ -104,21 +105,22 @@ public: { - QString appName = argv[0]; - int sep = appName.findRev( '/' ); - if ( sep > 0 ) - appName = appName.mid( sep+1 ); + QString appName = argv[0]; + int sep = appName.findRev( '/' ); + if ( sep > 0 ) + appName = appName.mid( sep+1 ); + + appIface = 0; + if ( loader->queryInterface(appName, IID_QtopiaApplication, (QUnknownInterface**)&appIface) == QS_OK ) { + mainWindow = appIface->createMainWindow( appName ); + } - appIface = 0; - if ( loader->queryInterface(appName, IID_QtopiaApplication, (QUnknownInterface**)&appIface) == QS_OK ) { - mainWindow = appIface->createMainWindow( appName ); - } - if ( mainWindow ) { - if ( mainWindow->metaObject()->slotNames().contains("setDocument(const QString&)") ) { - app->showMainDocumentWidget( mainWindow ); + if ( mainWindow ) { + if ( mainWindow->metaObject()->slotNames().contains("setDocument(const QString&)") ) { + app->showMainDocumentWidget( mainWindow ); + } else { + app->showMainWidget( mainWindow ); + } } else { - app->showMainWidget( mainWindow ); + owarn << "Could not create application main window" << oendl; + exit(-1); } - } else { - owarn << "Could not create application main window" << oendl; - exit(-1); - } } @@ -128,23 +130,23 @@ private slots: { - QStrList argList; - - if ( msg == "execute(QStrList)" ) { - delete qlChannel; - QDataStream stream( data, IO_ReadOnly ); - QStrList argList; - stream >> argList; - odebug << "QuickLauncher execute: " << argList.at(0) << oendl; - doQuickLaunch( argList ); - delete this; - } else if ( msg == "execute(QString)" ) { - delete qlChannel; - QDataStream stream( data, IO_ReadOnly ); - QString arg; - stream >> arg; - odebug << "QuickLauncher execute: " << arg << oendl; QStrList argList; - argList.append( arg.utf8() ); - doQuickLaunch( argList ); - delete this; - } + + if ( msg == "execute(QStrList)" ) { + delete qlChannel; + QDataStream stream( data, IO_ReadOnly ); + QStrList argList; + stream >> argList; + odebug << "QuickLauncher execute: " << argList.at(0) << oendl; + doQuickLaunch( argList ); + delete this; + } else if ( msg == "execute(QString)" ) { + delete qlChannel; + QDataStream stream( data, IO_ReadOnly ); + QString arg; + stream >> arg; + odebug << "QuickLauncher execute: " << arg << oendl; + QStrList argList; + argList.append( arg.utf8() ); + doQuickLaunch( argList ); + delete this; + } } @@ -154,18 +156,20 @@ private: { - static int myargc = argList.count(); - static char **myargv = new char *[myargc + 1]; - for ( int j = 0; j < myargc; j++ ) { - myargv[j] = new char [strlen(argList.at(j))+1]; - strcpy( myargv[j], argList.at(j) ); - } - myargv[myargc] = NULL; + static int myargc = argList.count(); + static char **myargv = new char *[myargc + 1]; + + for ( int j = 0; j < myargc; j++ ) { + myargv[j] = new char [strlen(argList.at(j))+1]; + strcpy( myargv[j], argList.at(j) ); + } + + myargv[myargc] = NULL; #ifdef _OS_LINUX_ - // Change name of process - setproctitle(myargv[0]); + // Change name of process + setproctitle(myargv[0]); #endif - connect(app, SIGNAL(lastWindowClosed()), app, SLOT(hideOrQuit())); - app->exit_loop(); - app->initApp( myargc, myargv ); - exec( myargc, myargv ); + connect(app, SIGNAL(lastWindowClosed()), app, SLOT(hideOrQuit())); + app->exit_loop(); + app->initApp( myargc, myargv ); + exec( myargc, myargv ); } @@ -186,49 +190,46 @@ int main( int argc, char** argv ) int sep = arg0.findRev( '/' ); + if ( sep > 0 ) - arg0 = arg0.mid( sep+1 ); + arg0 = arg0.mid( sep+1 ); + if ( arg0 != "quicklauncher" ) { - odebug << "QuickLauncher invoked as: " << arg0.data() << oendl; - QuickLauncher::exec( argc, argv ); + odebug << "QuickLauncher invoked as: " << arg0.data() << oendl; + QuickLauncher::exec( argc, argv ); } else { #ifdef _OS_LINUX_ - // Setup to change proc title - int i; - char **envp = environ; - /* Move the environment so we can reuse the memory. - * (Code borrowed from sendmail.) */ - for (i = 0; envp[i] != NULL; i++) - continue; - environ = (char **) malloc(sizeof(char *) * (i + 1)); - if (environ == NULL) - return -1; - for (i = 0; envp[i] != NULL; i++) - if ((environ[i] = strdup(envp[i])) == NULL) - return -1; - environ[i] = NULL; - - argv0 = argv; - if (i > 0) - argv_lth = envp[i-1] + strlen(envp[i-1]) - argv0[0]; - else - argv_lth = argv0[argc-1] + strlen(argv0[argc-1]) - argv0[0]; + // Setup to change proc title + int i; + char **envp = environ; + /* Move the environment so we can reuse the memory. + * (Code borrowed from sendmail.) */ + for (i = 0; envp[i] != NULL; i++) + continue; + environ = (char **) malloc(sizeof(char *) * (i + 1)); + if (environ == NULL) + return -1; + for (i = 0; envp[i] != NULL; i++) + if ((environ[i] = strdup(envp[i])) == NULL) + return -1; + environ[i] = NULL; + + argv0 = argv; + if (i > 0) + argv_lth = envp[i-1] + strlen(envp[i-1]) - argv0[0]; + else + argv_lth = argv0[argc-1] + strlen(argv0[argc-1]) - argv0[0]; #endif - (void)new QuickLauncher(); - odebug << "QuickLauncher running" << oendl; - // Pre-load default fonts - QFontMetrics fm( QApplication::font() ); - fm.ascent(); // causes font load. - QFont f( QApplication::font() ); - f.setWeight( QFont::Bold ); - QFontMetrics fmb( f ); - fmb.ascent(); // causes font load. - - // Each of the following force internal structures/internal - // initialization to be performed. This may mean allocating - // memory that is not needed by all applications. -#if 0 - TimeZone::current().isValid(); // popuplate timezone cache - TimeString::currentDateFormat(); // create internal structures - TimeString::currentAMPM(); -#endif - Resource::loadIconSet("new"); // do internal init + (void)new QuickLauncher(); + odebug << "QuickLauncher running" << oendl; + // Pre-load default fonts + QFontMetrics fm( QApplication::font() ); + fm.ascent(); // causes font load. + QFont f( QApplication::font() ); + f.setWeight( QFont::Bold ); + QFontMetrics fmb( f ); + fmb.ascent(); // causes font load. + + // Each of the following force internal structures/internal + // initialization to be performed. This may mean allocating + // memory that is not needed by all applications. + Resource::loadIconSet("new"); // do internal init @@ -239,10 +240,10 @@ int main( int argc, char** argv ) - // Create a widget to force initialization of title bar images, etc. - QObject::disconnect(app, SIGNAL(lastWindowClosed()), app, SLOT(hideOrQuit())); - QWidget *w = new QWidget(0,0,Qt::WDestructiveClose|Qt::WStyle_ContextHelp|Qt::WStyle_Tool); - w->setGeometry( -100, -100, 10, 10 ); - w->show(); - QTimer::singleShot( 0, w, SLOT(close()) ); + // Create a widget to force initialization of title bar images, etc. + QObject::disconnect(app, SIGNAL(lastWindowClosed()), app, SLOT(hideOrQuit())); + QWidget *w = new QWidget(0,0,Qt::WDestructiveClose|Qt::WStyle_ContextHelp|Qt::WStyle_Tool); + w->setGeometry( -100, -100, 10, 10 ); + w->show(); + QTimer::singleShot( 0, w, SLOT(close()) ); - app->enter_loop(); + app->enter_loop(); } @@ -252,8 +253,10 @@ int main( int argc, char** argv ) if ( mainWindow ) - delete (QWidget*)mainWindow; - + delete (QWidget*)mainWindow; delete app; + if ( appIface ) - loader->releaseInterface( appIface ); + loader->releaseInterface( appIface ); delete loader; + + // Neither QLibrary nor my Dropin is a QObject and they don't depend @@ -266,6 +269,6 @@ int main( int argc, char** argv ) // we just skip deletion and hope things go well -zecke -// delete app; + // delete app; // hack instead -zecke -// delete app->pidChannel; -// app->pidChannel = 0; + // delete app->pidChannel; + // app->pidChannel = 0; |