KInit
klauncher_main.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include <config.h>
00021
00022 #include <unistd.h>
00023 #include <fcntl.h>
00024
00025 #include "klauncher.h"
00026 #include <kcomponentdata.h>
00027 #include "kcrash.h"
00028 #include "kdebug.h"
00029 #include <stdio.h>
00030 #include <stdlib.h>
00031 #include <signal.h>
00032 #include <klocale.h>
00033
00034 #include "klauncher_cmds.h"
00035 #include <QtCore/QCoreApplication>
00036
00037 #ifndef Q_WS_WIN
00038 static void sig_handler(int sig_num)
00039 {
00040
00041 signal( SIGHUP, SIG_IGN);
00042 signal( SIGTERM, SIG_IGN);
00043 fprintf(stderr, "klauncher: Exiting on signal %d\n", sig_num);
00044 KLauncher::destruct(255);
00045 }
00046 #endif
00047
00048 extern "C" KDE_EXPORT int kdemain( int argc, char**argv )
00049 {
00050 #ifndef Q_WS_WIN
00051
00052 if (fcntl(LAUNCHER_FD, F_GETFD) == -1)
00053 {
00054 fprintf(stderr, "%s", i18n("klauncher: This program is not supposed to be started manually.\n"
00055 "klauncher: It is started automatically by kdeinit4.\n").toLocal8Bit().data());
00056 return 1;
00057 }
00058 #endif
00059 KComponentData componentData("klauncher");
00060
00061
00062 putenv(strdup("SESSION_MANAGER="));
00063
00064
00065 KLocale::setMainCatalog("kdelibs4");
00066
00067
00068 QCoreApplication app(argc, argv);
00069 app.setApplicationName( componentData.componentName() );
00070
00071 int maxTry = 3;
00072 while(true)
00073 {
00074 QString service(QLatin1String("org.kde.klauncher"));
00075 if (!QDBusConnection::sessionBus().isConnected()) {
00076 kWarning() << "No DBUS session-bus found. Check if you have started the DBUS server.";
00077 return 1;
00078 }
00079 QDBusReply<QDBusConnectionInterface::RegisterServiceReply> reply =
00080 QDBusConnection::sessionBus().interface()->registerService(service);
00081 if (!reply.isValid())
00082 {
00083 kWarning() << "DBUS communication problem!";
00084 return 1;
00085 }
00086 if (reply == QDBusConnectionInterface::ServiceRegistered)
00087 break;
00088
00089 if (--maxTry == 0)
00090 {
00091 kWarning() << "Another instance of klauncher is already running!";
00092 return 1;
00093 }
00094
00095
00096 kWarning() << "Waiting for already running klauncher to exit.";
00097 sleep(1);
00098
00099
00100 }
00101
00102 KLauncher *launcher = new KLauncher(LAUNCHER_FD);
00103 QDBusConnection::sessionBus().registerObject("/", launcher);
00104
00105 #ifndef Q_WS_WIN
00106 KCrash::setEmergencySaveFunction(sig_handler);
00107 signal( SIGHUP, sig_handler);
00108 signal( SIGPIPE, SIG_IGN);
00109 signal( SIGTERM, sig_handler);
00110 #endif
00111
00112 return app.exec();
00113 }