25 #include "kapplication.h" 26 #include "klauncher.h" 27 #include "kcmdlineargs.h" 33 #include <tqcstring.h> 36 #include "klauncher_cmds.h" 38 static void sig_handler(
int sig_num)
41 signal( SIGHUP, SIG_IGN);
42 signal( SIGTERM, SIG_IGN);
43 fprintf(stderr,
"[klauncher] Exiting on signal %d\n", sig_num);
44 KLauncher::destruct(255);
47 static KCmdLineOptions options[] =
49 {
"new-startup",
"Internal", 0 },
53 extern "C" KDE_EXPORT
int kdemain(
int argc,
char**argv )
56 if (fcntl(LAUNCHER_FD, F_GETFD) == -1)
58 fprintf(stderr,
"%s", i18n(
"[klauncher] This program is not supposed to be started manually.\n" 59 "[klauncher] It is started automatically by kdeinit.\n").local8Bit().data());
63 TQCString cname = KApplication::launcher();
64 char *name = cname.data();
65 KCmdLineArgs::init(argc, argv, name,
"KLauncher",
"A service launcher.",
68 KLauncher::addCmdLineOptions();
69 KCmdLineArgs::addCmdLineOptions( options );
72 putenv(strdup(
"SESSION_MANAGER="));
75 KLocale::setMainCatalogue(
"kdelibs");
77 KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
82 TQCString dcopName = KApplication::dcopClient()->registerAs(name,
false);
83 if (dcopName.isEmpty())
85 kdWarning() <<
"[klauncher] DCOP communication problem!" << endl;
88 if (dcopName == cname)
93 kdWarning() <<
"[klauncher] Another instance of klauncher is already running!" << endl;
98 kdWarning() <<
"[klauncher] Waiting for already running klauncher to exit." << endl;
104 KLauncher *launcher =
new KLauncher(LAUNCHER_FD, args->isSet(
"new-startup"));
105 launcher->dcopClient()->setDefaultObject( name );
106 launcher->dcopClient()->setDaemonMode(
true );
108 KCrash::setEmergencySaveFunction(sig_handler);
109 signal( SIGHUP, sig_handler);
110 signal( SIGPIPE, SIG_IGN);
111 signal( SIGTERM, sig_handler);