• Skip to content
  • Skip to link menu
KDE 3.5 API Reference
  • KDE API Reference
  • API Reference
  • Sitemap
  • Contact Us
 

KInit

klauncher.h

Go to the documentation of this file.
00001 /*
00002    This file is part of the KDE libraries
00003    Copyright (c) 1999 Waldo Bastian <bastian@kde.org>
00004 
00005    This library is free software; you can redistribute it and/or
00006    modify it under the terms of the GNU Library General Public
00007    License version 2 as published by the Free Software Foundation.
00008 
00009    This library is distributed in the hope that it will be useful,
00010    but WITHOUT ANY WARRANTY; without even the implied warranty of
00011    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00012    Library General Public License for more details.
00013 
00014    You should have received a copy of the GNU Library General Public License
00015    along with this library; see the file COPYING.LIB.  If not, write to
00016    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00017    Boston, MA 02110-1301, USA.
00018 */
00019 
00020 #ifndef _KLAUNCHER_H_
00021 #define _KLAUNCHER_H_
00022 
00023 #include <sys/types.h>
00024 #include <unistd.h>
00025 #include <time.h>
00026 #include <qstring.h>
00027 #include <qvaluelist.h>
00028 #include <qsocketnotifier.h>
00029 #include <qptrlist.h>
00030 #include <qtimer.h>
00031 
00032 #include <dcopclient.h>
00033 #include <kio/connection.h>
00034 #include <ksock.h>
00035 #include <kurl.h>
00036 #include <kuniqueapplication.h>
00037 
00038 #include <kservice.h>
00039 
00040 #include "autostart.h"
00041 
00042 class IdleSlave : public QObject
00043 {
00044    Q_OBJECT
00045 public:
00046    IdleSlave(KSocket *socket);
00047    bool match( const QString &protocol, const QString &host, bool connected);
00048    void connect( const QString &app_socket);
00049    pid_t pid() const { return mPid;}
00050    int age(time_t now);
00051    void reparseConfiguration();
00052    bool onHold(const KURL &url);
00053    QString protocol() const   {return mProtocol;}
00054 
00055 signals:
00056    void statusUpdate(IdleSlave *);
00057 
00058 protected slots:
00059    void gotInput();
00060 
00061 protected:
00062    KIO::Connection mConn;
00063    QString mProtocol;
00064    QString mHost;
00065    bool mConnected;
00066    pid_t mPid;
00067    time_t mBirthDate;
00068    bool mOnHold;
00069    KURL mUrl;
00070 };
00071 
00072 class SlaveWaitRequest
00073 {
00074 public:
00075    pid_t pid;
00076    DCOPClientTransaction *transaction;
00077 };
00078 
00079 class KLaunchRequest
00080 {
00081 public:
00082    QCString name;
00083    QValueList<QCString> arg_list;
00084    QCString dcop_name;
00085    enum status_t { Init = 0, Launching, Running, Error, Done };
00086    pid_t pid;
00087    status_t status;
00088    DCOPClientTransaction *transaction;
00089    KService::DCOPServiceType_t dcop_service_type;
00090    bool autoStart;
00091    QString errorMsg;
00092 #ifdef Q_WS_X11
00093    QCString startup_id; // "" is the default, "0" for none
00094    QCString startup_dpy; // Display to send startup notification to.
00095 #endif
00096    QValueList<QCString> envs; // env. variables to be app's environment
00097    QCString cwd;
00098 };
00099 
00100 struct serviceResult
00101 {
00102   int result;        // 0 means success. > 0 means error (-1 means pending)
00103   QCString dcopName; // Contains DCOP name on success
00104   QString error;     // Contains error description on failure.
00105   pid_t pid;
00106 };
00107 
00108 class KLauncher : public KApplication, public DCOPObject
00109 {
00110    Q_OBJECT
00111 
00112 public:
00113    KLauncher(int _kdeinitSocket, bool new_startup);
00114 
00115    ~KLauncher();
00116 
00117    void close();
00118    static void destruct(int exit_code); // exit!
00119 
00120    // DCOP
00121    virtual bool process(const QCString &fun, const QByteArray &data,
00122                 QCString &replyType, QByteArray &replyData);
00123    virtual QCStringList functions();
00124    virtual QCStringList interfaces();
00125 
00126 protected:
00127    void processDied(pid_t pid, long exitStatus);
00128 
00129    void requestStart(KLaunchRequest *request);
00130    void requestDone(KLaunchRequest *request);
00131 
00132    void setLaunchEnv(const QCString &name, const QCString &value);
00133    void exec_blind(const QCString &name, const QValueList<QCString> &arg_list,
00134        const QValueList<QCString> &envs, const QCString& startup_id = "" );
00135    bool start_service(KService::Ptr service, const QStringList &urls,
00136        const QValueList<QCString> &envs, const QCString& startup_id = "",
00137        bool blind = false, bool autoStart = false );
00138    bool start_service_by_name(const QString &serviceName, const QStringList &urls,
00139        const QValueList<QCString> &envs, const QCString& startup_id, bool blind);
00140    bool start_service_by_desktop_path(const QString &serviceName, const QStringList &urls,
00141        const QValueList<QCString> &envs, const QCString& startup_id, bool blind);
00142    bool start_service_by_desktop_name(const QString &serviceName, const QStringList &urls,
00143        const QValueList<QCString> &envs, const QCString& startup_id, bool blind);
00144    bool kdeinit_exec(const QString &app, const QStringList &args,
00145        const QValueList<QCString> &envs, QCString startup_id, bool wait);
00146 
00147    void waitForSlave(pid_t pid);
00148 
00149    void autoStart(int phase);
00150 
00151    void createArgs( KLaunchRequest *request, const KService::Ptr service,
00152                     const QStringList &url);
00153 
00154    pid_t requestHoldSlave(const KURL &url, const QString &app_socket);
00155    pid_t requestSlave(const QString &protocol, const QString &host,
00156                       const QString &app_socket, QString &error);
00157 
00158 
00159    void queueRequest(KLaunchRequest *);
00160 
00161    void send_service_startup_info( KLaunchRequest *request, KService::Ptr service, const QCString& startup_id,
00162        const QValueList<QCString> &envs );
00163    void cancel_service_startup_info( KLaunchRequest *request, const QCString& startup_id,
00164        const QValueList<QCString> &envs );
00165 
00166 public slots:
00167    void slotAutoStart();
00168    void slotDequeue();
00169    void slotKDEInitData(int);
00170    void slotAppRegistered(const QCString &appId);
00171    void slotSlaveStatus(IdleSlave *);
00172    void acceptSlave( KSocket *);
00173    void slotSlaveGone();
00174    void idleTimeout();
00175 
00176 protected:
00177    QPtrList<KLaunchRequest> requestList; // Requests being handled
00178    QPtrList<KLaunchRequest> requestQueue; // Requests waiting to being handled
00179    int kdeinitSocket;
00180    QSocketNotifier *kdeinitNotifier;
00181    serviceResult DCOPresult;
00182    KLaunchRequest *lastRequest;
00183    QPtrList<SlaveWaitRequest> mSlaveWaitRequest;
00184    QString mPoolSocketName;
00185    KServerSocket *mPoolSocket;
00186    QPtrList<IdleSlave> mSlaveList;
00187    QTimer mTimer;
00188    QTimer mAutoTimer;
00189    bool bProcessingQueue;
00190    AutoStart mAutoStart;
00191    QCString mSlaveDebug;
00192    QCString mSlaveValgrind;
00193    QCString mSlaveValgrindSkin;
00194    bool dontBlockReading;
00195    bool newStartup;
00196 #ifdef Q_WS_X11
00197    Display *mCached_dpy;
00198 #endif
00199 };
00200 #endif

KInit

Skip menu "KInit"
  • Main Page
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Class Members
  • Related Pages

API Reference

Skip menu "API Reference"
  • dcop
  • DNSSD
  • interfaces
  • Kate
  • kconf_update
  • KDECore
  • KDED
  • kdefx
  • KDEsu
  • kdeui
  • KDocTools
  • KHTML
  • KImgIO
  • KInit
  • kio
  • kioslave
  • KJS
  • KNewStuff
  • KParts
  • KUtils
Generated for API Reference by doxygen 1.5.9
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal