summaryrefslogtreecommitdiffstats
path: root/tdeinit/tdelauncher.h
diff options
context:
space:
mode:
Diffstat (limited to 'tdeinit/tdelauncher.h')
-rw-r--r--tdeinit/tdelauncher.h200
1 files changed, 200 insertions, 0 deletions
diff --git a/tdeinit/tdelauncher.h b/tdeinit/tdelauncher.h
new file mode 100644
index 000000000..791958980
--- /dev/null
+++ b/tdeinit/tdelauncher.h
@@ -0,0 +1,200 @@
+/*
+ This file is part of the KDE libraries
+ Copyright (c) 1999 Waldo Bastian <bastian@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef _KLAUNCHER_H_
+#define _KLAUNCHER_H_
+
+#include <sys/types.h>
+#include <unistd.h>
+#include <time.h>
+#include <tqstring.h>
+#include <tqvaluelist.h>
+#include <tqsocketnotifier.h>
+#include <tqptrlist.h>
+#include <tqtimer.h>
+
+#include <dcopclient.h>
+#include <tdeio/connection.h>
+#include <ksock.h>
+#include <kurl.h>
+#include <kuniqueapplication.h>
+
+#include <kservice.h>
+
+#include "autostart.h"
+
+class IdleSlave : public TQObject
+{
+ Q_OBJECT
+public:
+ IdleSlave(TDESocket *socket);
+ bool match( const TQString &protocol, const TQString &host, bool connected);
+ void connect( const TQString &app_socket);
+ pid_t pid() const { return mPid;}
+ int age(time_t now);
+ void reparseConfiguration();
+ bool onHold(const KURL &url);
+ TQString protocol() const {return mProtocol;}
+
+signals:
+ void statusUpdate(IdleSlave *);
+
+protected slots:
+ void gotInput();
+
+protected:
+ TDEIO::Connection mConn;
+ TQString mProtocol;
+ TQString mHost;
+ bool mConnected;
+ pid_t mPid;
+ time_t mBirthDate;
+ bool mOnHold;
+ KURL mUrl;
+};
+
+class SlaveWaitRequest
+{
+public:
+ pid_t pid;
+ DCOPClientTransaction *transaction;
+};
+
+class TDELaunchRequest
+{
+public:
+ TQCString name;
+ TQValueList<TQCString> arg_list;
+ TQCString dcop_name;
+ enum status_t { Init = 0, Launching, Running, Error, Done };
+ pid_t pid;
+ status_t status;
+ DCOPClientTransaction *transaction;
+ KService::DCOPServiceType_t dcop_service_type;
+ bool autoStart;
+ TQString errorMsg;
+#ifdef Q_WS_X11
+ TQCString startup_id; // "" is the default, "0" for none
+ TQCString startup_dpy; // Display to send startup notification to.
+#endif
+ TQValueList<TQCString> envs; // env. variables to be app's environment
+ TQCString cwd;
+};
+
+struct serviceResult
+{
+ int result; // 0 means success. > 0 means error (-1 means pending)
+ TQCString dcopName; // Contains DCOP name on success
+ TQString error; // Contains error description on failure.
+ pid_t pid;
+};
+
+class TDELauncher : public TDEApplication, public DCOPObject
+{
+ Q_OBJECT
+
+public:
+ TDELauncher(int _tdeinitSocket, bool new_startup);
+
+ ~TDELauncher();
+
+ void close();
+ static void destruct(int exit_code); // exit!
+
+ // DCOP
+ virtual bool process(const TQCString &fun, const TQByteArray &data,
+ TQCString &replyType, TQByteArray &replyData);
+ virtual QCStringList functions();
+ virtual QCStringList interfaces();
+
+protected:
+ void processDied(pid_t pid, long exitStatus);
+
+ void requestStart(TDELaunchRequest *request);
+ void requestDone(TDELaunchRequest *request);
+
+ void setLaunchEnv(const TQCString &name, const TQCString &value);
+ void exec_blind(const TQCString &name, const TQValueList<TQCString> &arg_list,
+ const TQValueList<TQCString> &envs, const TQCString& startup_id = "" );
+ bool start_service(KService::Ptr service, const TQStringList &urls,
+ const TQValueList<TQCString> &envs, const TQCString& startup_id = "",
+ bool blind = false, bool autoStart = false );
+ bool start_service_by_name(const TQString &serviceName, const TQStringList &urls,
+ const TQValueList<TQCString> &envs, const TQCString& startup_id, bool blind);
+ bool start_service_by_desktop_path(const TQString &serviceName, const TQStringList &urls,
+ const TQValueList<TQCString> &envs, const TQCString& startup_id, bool blind);
+ bool start_service_by_desktop_name(const TQString &serviceName, const TQStringList &urls,
+ const TQValueList<TQCString> &envs, const TQCString& startup_id, bool blind);
+ bool tdeinit_exec(const TQString &app, const TQStringList &args,
+ const TQValueList<TQCString> &envs, TQCString startup_id, bool wait);
+
+ void waitForSlave(pid_t pid);
+
+ void autoStart(int phase);
+
+ void createArgs( TDELaunchRequest *request, const KService::Ptr service,
+ const TQStringList &url);
+
+ pid_t requestHoldSlave(const KURL &url, const TQString &app_socket);
+ pid_t requestSlave(const TQString &protocol, const TQString &host,
+ const TQString &app_socket, TQString &error);
+
+
+ void queueRequest(TDELaunchRequest *);
+
+ void send_service_startup_info( TDELaunchRequest *request, KService::Ptr service, const TQCString& startup_id,
+ const TQValueList<TQCString> &envs );
+ void cancel_service_startup_info( TDELaunchRequest *request, const TQCString& startup_id,
+ const TQValueList<TQCString> &envs );
+
+public slots:
+ void slotAutoStart();
+ void slotDequeue();
+ void slotKDEInitData(int);
+ void slotAppRegistered(const TQCString &appId);
+ void slotSlaveStatus(IdleSlave *);
+ void acceptSlave( TDESocket *);
+ void slotSlaveGone();
+ void idleTimeout();
+
+protected:
+ TQPtrList<TDELaunchRequest> requestList; // Requests being handled
+ TQPtrList<TDELaunchRequest> requestQueue; // Requests waiting to being handled
+ int tdeinitSocket;
+ TQSocketNotifier *tdeinitNotifier;
+ serviceResult DCOPresult;
+ TDELaunchRequest *lastRequest;
+ TQPtrList<SlaveWaitRequest> mSlaveWaitRequest;
+ TQString mPoolSocketName;
+ TDEServerSocket *mPoolSocket;
+ TQPtrList<IdleSlave> mSlaveList;
+ TQTimer mTimer;
+ TQTimer mAutoTimer;
+ bool bProcessingQueue;
+ AutoStart mAutoStart;
+ TQCString mSlaveDebug;
+ TQCString mSlaveValgrind;
+ TQCString mSlaveValgrindSkin;
+ bool dontBlockReading;
+ bool newStartup;
+#ifdef Q_WS_X11
+ Display *mCached_dpy;
+#endif
+};
+#endif