• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdelibs API Reference
  • KDE Home
  • Contact Us
 

KInit

  • sources
  • kde-4.14
  • kdelibs
  • kinit
klauncher.h
Go to the documentation of this file.
1 /*
2  This file is part of the KDE libraries
3  Copyright (c) 1999 Waldo Bastian <bastian@kde.org>
4 
5  This library is free software; you can redistribute it and/or
6  modify it under the terms of the GNU Library General Public
7  License version 2 as published by the Free Software Foundation.
8 
9  This library is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  Library General Public License for more details.
13 
14  You should have received a copy of the GNU Library General Public License
15  along with this library; see the file COPYING.LIB. If not, write to
16  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17  Boston, MA 02110-1301, USA.
18 */
19 
20 #ifndef _KLAUNCHER_H_
21 #define _KLAUNCHER_H_
22 
23 #include "autostart.h"
24 
25 #include <sys/types.h>
26 #include <unistd.h>
27 #include <time.h>
28 
29 #ifdef Q_WS_X11
30 #include <X11/Xlib.h>
31 #include <fixx11h.h>
32 #endif
33 
34 #if defined(Q_WS_WIN) || defined(Q_WS_MAC)
35 #define USE_KPROCESS_FOR_KIOSLAVES
36 #endif
37 
38 #include <QtCore/QString>
39 #include <QtCore/QSocketNotifier>
40 #include <QtCore/QTimer>
41 #include <QtCore/QList>
42 #include <QtCore/QObject>
43 #include <QtDBus/QtDBus>
44 
45 #include <kservice.h>
46 #include <kprocess.h>
47 #include <kurl.h>
48 #include <kio/connection.h>
49 
50 class IdleSlave : public QObject
51 {
52  Q_OBJECT
53 public:
54  explicit IdleSlave(QObject *parent);
55  bool match( const QString &protocol, const QString &host, bool connected) const;
56  void connect( const QString &app_socket);
57  pid_t pid() const { return mPid;}
58  int age(time_t now) const;
59  void reparseConfiguration();
60  bool onHold(const KUrl &url) const;
61  QString protocol() const {return mProtocol;}
62 
63 Q_SIGNALS:
64  void statusUpdate(IdleSlave *);
65 
66 protected Q_SLOTS:
67  void gotInput();
68 
69 public:
70  KIO::Connection mConn;
71 protected:
72  QString mProtocol;
73  QString mHost;
74  bool mConnected;
75  pid_t mPid;
76  time_t mBirthDate;
77  bool mOnHold;
78  KUrl mUrl;
79 };
80 
81 class SlaveWaitRequest
82 {
83 public:
84  pid_t pid;
85  QDBusMessage transaction;
86 };
87 
88 class KLaunchRequest
89 {
90 public:
91  QString name;
92  QStringList arg_list;
93  QString dbus_name;
94  QString tolerant_dbus_name;
95  enum status_t { Init = 0, Launching, Running, Error, Done };
96  pid_t pid;
97  status_t status;
98  QDBusMessage transaction;
99  KService::DBusStartupType dbus_startup_type;
100  bool autoStart;
101  QString errorMsg;
102 #ifdef Q_WS_X11
103  QByteArray startup_id; // "" is the default, "0" for none
104  QByteArray startup_dpy; // Display to send startup notification to.
105 #endif
106  QStringList envs; // env. variables to be app's environment
107  QString cwd;
108 #ifdef USE_KPROCESS_FOR_KIOSLAVES
109 protected:
110  KProcess *process;
111  friend class KLauncher;
112 #endif
113 };
114 
115 struct serviceResult
116 {
117  int result; // 0 means success. > 0 means error (-1 means pending)
118  QString dbusName; // Contains DBUS name on success
119  QString error; // Contains error description on failure.
120  pid_t pid;
121 };
122 
123 class KLauncher : public QObject
124 {
125  Q_OBJECT
126 
127 public:
128 #ifndef USE_KPROCESS_FOR_KIOSLAVES
129  KLauncher(int kdeinitSocket);
130 #else
131  KLauncher();
132 #endif
133 
134  ~KLauncher();
135 
136  void close();
137 
138 public slots:
139  void destruct(); // exit!
140 
141 protected:
142  void processDied(pid_t pid, long exitStatus);
143 
144  void requestStart(KLaunchRequest *request);
145  void requestDone(KLaunchRequest *request);
146 
147  bool start_service(KService::Ptr service, const QStringList &urls,
148  const QStringList &envs, const QByteArray &startup_id,
149  bool blind, bool autoStart, const QDBusMessage &msg );
150 
151  void createArgs( KLaunchRequest *request, const KService::Ptr service,
152  const QStringList &url);
153 
154  void queueRequest(KLaunchRequest *);
155 
156  void send_service_startup_info( KLaunchRequest *request, KService::Ptr service, const QByteArray &startup_id,
157  const QStringList &envs );
158  void cancel_service_startup_info( KLaunchRequest *request, const QByteArray& startup_id,
159  const QStringList &envs );
160 
161 Q_SIGNALS:
162  void autoStart0Done();
163  void autoStart1Done();
164  void autoStart2Done();
165 
166 public: // remote methods, called by KLauncherAdaptor
167  void autoStart(int phase = 1);
168 
176  void exec_blind(const QString &name, const QStringList &arg_list, const QStringList &envs, const QString &startup_id);
177  inline void exec_blind(const QString &name, const QStringList &arg_list)
178  { exec_blind(name, arg_list, QStringList(), QLatin1String("0")); }
179 
180  bool kdeinit_exec(const QString &app, const QStringList &args,
181  const QString& workdir, const QStringList &envs,
182  const QString &startup_id, bool wait, const QDBusMessage &msg);
183 
184  void reparseConfiguration();
185  void setLaunchEnv(const QString &name, const QString &value);
186 
204  bool start_service_by_desktop_name(const QString &serviceName, const QStringList &urls, const QStringList &envs, const QString &startup_id, bool blind, const QDBusMessage &msg);
205 
226  bool start_service_by_desktop_path(const QString &serviceName, const QStringList &urls, const QStringList &envs, const QString &startup_id, bool blind, const QDBusMessage &msg);
227 
245  bool start_service_by_name(const QString &serviceName, const QStringList &urls, const QStringList &envs, const QString &startup_id, bool blind, const QDBusMessage &msg); // KDE5: remove
246 
247  pid_t requestHoldSlave(const KUrl &url, const QString &app_socket);
248 
249  pid_t requestSlave(const QString &protocol, const QString &host,
250  const QString &app_socket, QString &error);
255  bool checkForHeldSlave(const QString &url);
256  void waitForSlave(int pid, const QDBusMessage &msg);
257  void terminate_kdeinit();
258 
259 public Q_SLOTS:
260  void slotAutoStart();
261  void slotDequeue();
262  void slotKDEInitData(int);
263  void slotNameOwnerChanged(const QString &name, const QString &oldOnwer, const QString &newOwner);
264  void slotSlaveStatus(IdleSlave *);
265  void acceptSlave();
266  void slotSlaveGone();
267  void idleTimeout();
268 
269 public:
270  serviceResult requestResult; // accessed by the adaptor
271 protected:
272  QList<KLaunchRequest*> requestList; // Requests being handled
273  QList<KLaunchRequest*> requestQueue; // Requests waiting to being handled
274  KLaunchRequest *lastRequest;
275  QList<SlaveWaitRequest*> mSlaveWaitRequest;
276 #ifndef USE_KPROCESS_FOR_KIOSLAVES
277  int kdeinitSocket;
278  QSocketNotifier *kdeinitNotifier;
279 #endif
280  KIO::ConnectionServer mConnectionServer;
281  QList<IdleSlave*> mSlaveList;
282  QTimer mTimer;
283  QTimer mAutoTimer;
284  bool bProcessingQueue;
285  AutoStart mAutoStart;
286  QString mSlaveDebug;
287  QString mSlaveValgrind;
288  QString mSlaveValgrindSkin;
289  bool dontBlockReading;
290 #ifdef Q_WS_X11
291  Display *mCached_dpy;
292 #endif
293  void processRequestReturn(int status, const QByteArray &requestData);
294 
295 protected Q_SLOTS:
296  void slotGotOutput();
297  void slotFinished(int exitCode, QProcess::ExitStatus exitStatus);
298 };
299 #endif
KLaunchRequest::errorMsg
QString errorMsg
Definition: klauncher.h:101
serviceResult
Definition: klauncher.h:115
KLauncher::start_service_by_desktop_path
bool start_service_by_desktop_path(const QString &serviceName, const QStringList &urls, const QStringList &envs, const QString &startup_id, bool blind, const QDBusMessage &msg)
Start a service by desktop path.
Definition: klauncher.cpp:770
KLauncher::requestList
QList< KLaunchRequest * > requestList
Definition: klauncher.h:272
KSharedPtr< KService >
KLauncher::requestResult
serviceResult requestResult
Definition: klauncher.h:270
KProcess
KLaunchRequest::envs
QStringList envs
Definition: klauncher.h:106
KLaunchRequest::arg_list
QStringList arg_list
Definition: klauncher.h:92
SlaveWaitRequest
Definition: klauncher.h:81
KLauncher::cancel_service_startup_info
void cancel_service_startup_info(KLaunchRequest *request, const QByteArray &startup_id, const QStringList &envs)
Definition: klauncher.cpp:967
IdleSlave::age
int age(time_t now) const
Definition: klauncher.cpp:168
KLauncher::slotSlaveStatus
void slotSlaveStatus(IdleSlave *)
Definition: klauncher.cpp:1274
QSocketNotifier
kurl.h
QByteArray
IdleSlave::onHold
bool onHold(const KUrl &url) const
Definition: klauncher.cpp:161
KLauncher::autoStart
void autoStart(int phase=1)
Definition: klauncher.cpp:522
KLauncher::checkForHeldSlave
bool checkForHeldSlave(const QString &url)
Return true of there is a slave held for url.
Definition: klauncher.cpp:1233
KLauncher::exec_blind
void exec_blind(const QString &name, const QStringList &arg_list)
Definition: klauncher.h:177
KLauncher::requestHoldSlave
pid_t requestHoldSlave(const KUrl &url, const QString &app_socket)
Definition: klauncher.cpp:1093
IdleSlave::connect
void connect(const QString &app_socket)
Definition: klauncher.cpp:133
KLauncher::mConnectionServer
KIO::ConnectionServer mConnectionServer
Definition: klauncher.h:280
KLauncher::exec_blind
void exec_blind(const QString &name, const QStringList &arg_list, const QStringList &envs, const QString &startup_id)
Starts a program.
Definition: klauncher.cpp:726
KLauncher::kdeinit_exec
bool kdeinit_exec(const QString &app, const QStringList &args, const QString &workdir, const QStringList &envs, const QString &startup_id, bool wait, const QDBusMessage &msg)
Definition: klauncher.cpp:999
IdleSlave::reparseConfiguration
void reparseConfiguration()
Definition: klauncher.cpp:143
KLauncher::reparseConfiguration
void reparseConfiguration()
Definition: klauncher.cpp:1317
KLauncher::mCached_dpy
Display * mCached_dpy
Definition: klauncher.h:291
IdleSlave::mBirthDate
time_t mBirthDate
Definition: klauncher.h:76
KLaunchRequest::status_t
status_t
Definition: klauncher.h:95
KLaunchRequest::transaction
QDBusMessage transaction
Definition: klauncher.h:98
IdleSlave::IdleSlave
IdleSlave(QObject *parent)
Definition: klauncher.cpp:70
KLaunchRequest
Definition: klauncher.h:88
SlaveWaitRequest::transaction
QDBusMessage transaction
Definition: klauncher.h:85
IdleSlave::mHost
QString mHost
Definition: klauncher.h:73
KLauncher
Definition: klauncher.h:123
KLaunchRequest::cwd
QString cwd
Definition: klauncher.h:107
IdleSlave::mPid
pid_t mPid
Definition: klauncher.h:75
KLaunchRequest::Done
Definition: klauncher.h:95
KLaunchRequest::startup_id
QByteArray startup_id
Definition: klauncher.h:103
KLaunchRequest::Error
Definition: klauncher.h:95
AutoStart
Definition: autostart.h:28
KLauncher::slotDequeue
void slotDequeue()
Definition: klauncher.cpp:1047
KLauncher::send_service_startup_info
void send_service_startup_info(KLaunchRequest *request, KService::Ptr service, const QByteArray &startup_id, const QStringList &envs)
Definition: klauncher.cpp:915
KLauncher::mSlaveWaitRequest
QList< SlaveWaitRequest * > mSlaveWaitRequest
Definition: klauncher.h:275
KUrl
IdleSlave::mProtocol
QString mProtocol
Definition: klauncher.h:72
KLauncher::lastRequest
KLaunchRequest * lastRequest
Definition: klauncher.h:274
KLauncher::slotFinished
void slotFinished(int exitCode, QProcess::ExitStatus exitStatus)
Definition: klauncher.cpp:1336
KLaunchRequest::dbus_startup_type
KService::DBusStartupType dbus_startup_type
Definition: klauncher.h:99
QObject::name
const char * name() const
KLauncher::mAutoTimer
QTimer mAutoTimer
Definition: klauncher.h:283
kprocess.h
KLauncher::start_service_by_desktop_name
bool start_service_by_desktop_name(const QString &serviceName, const QStringList &urls, const QStringList &envs, const QString &startup_id, bool blind, const QDBusMessage &msg)
Start a service by desktop name.
Definition: klauncher.cpp:799
KLauncher::close
void close()
Definition: klauncher.cpp:262
KLauncher::requestSlave
pid_t requestSlave(const QString &protocol, const QString &host, const QString &app_socket, QString &error)
Definition: klauncher.cpp:1114
QTimer
IdleSlave::mOnHold
bool mOnHold
Definition: klauncher.h:77
QObject
KLauncher::mSlaveValgrind
QString mSlaveValgrind
Definition: klauncher.h:287
KLaunchRequest::startup_dpy
QByteArray startup_dpy
Definition: klauncher.h:104
KLauncher::start_service_by_name
bool start_service_by_name(const QString &serviceName, const QStringList &urls, const QStringList &envs, const QString &startup_id, bool blind, const QDBusMessage &msg)
Start a service by (translated) name - deprecated.
Definition: klauncher.cpp:751
KLauncher::destruct
void destruct()
Definition: klauncher.cpp:274
KLauncher::bProcessingQueue
bool bProcessingQueue
Definition: klauncher.h:284
IdleSlave::statusUpdate
void statusUpdate(IdleSlave *)
IdleSlave
Definition: klauncher.h:50
KLaunchRequest::name
QString name
Definition: klauncher.h:91
QString
QList< KLaunchRequest * >
KLauncher::acceptSlave
void acceptSlave()
Definition: klauncher.cpp:1259
KLauncher::mAutoStart
AutoStart mAutoStart
Definition: klauncher.h:285
KLauncher::processDied
void processDied(pid_t pid, long exitStatus)
Definition: klauncher.cpp:409
QStringList
kservice.h
KLauncher::mSlaveList
QList< IdleSlave * > mSlaveList
Definition: klauncher.h:281
IdleSlave::mConn
KIO::Connection mConn
Definition: klauncher.h:70
KLaunchRequest::Launching
Definition: klauncher.h:95
KLauncher::mTimer
QTimer mTimer
Definition: klauncher.h:282
KLauncher::setLaunchEnv
void setLaunchEnv(const QString &name, const QString &value)
Definition: klauncher.cpp:282
IdleSlave::match
bool match(const QString &protocol, const QString &host, bool connected) const
Definition: klauncher.cpp:149
IdleSlave::mUrl
KUrl mUrl
Definition: klauncher.h:78
KLauncher::requestQueue
QList< KLaunchRequest * > requestQueue
Definition: klauncher.h:273
KLaunchRequest::tolerant_dbus_name
QString tolerant_dbus_name
Definition: klauncher.h:94
KLaunchRequest::dbus_name
QString dbus_name
Definition: klauncher.h:93
IdleSlave::mConnected
bool mConnected
Definition: klauncher.h:74
IdleSlave::gotInput
void gotInput()
Definition: klauncher.cpp:86
KLauncher::waitForSlave
void waitForSlave(int pid, const QDBusMessage &msg)
Definition: klauncher.cpp:1244
KLaunchRequest::pid
pid_t pid
Definition: klauncher.h:96
KLauncher::slotKDEInitData
void slotKDEInitData(int)
Definition: klauncher.cpp:342
KLaunchRequest::Init
Definition: klauncher.h:95
serviceResult::result
int result
Definition: klauncher.h:117
serviceResult::pid
pid_t pid
Definition: klauncher.h:120
KLauncher::autoStart0Done
void autoStart0Done()
KLauncher::KLauncher
KLauncher()
Definition: klauncher.cpp:196
QDBusMessage
serviceResult::dbusName
QString dbusName
Definition: klauncher.h:118
KLauncher::requestDone
void requestDone(KLaunchRequest *request)
Definition: klauncher.cpp:567
QLatin1String
KLauncher::autoStart1Done
void autoStart1Done()
KLaunchRequest::Running
Definition: klauncher.h:95
IdleSlave::protocol
QString protocol() const
Definition: klauncher.h:61
KLauncher::requestStart
void requestStart(KLaunchRequest *request)
Definition: klauncher.cpp:640
KLauncher::idleTimeout
void idleTimeout()
Definition: klauncher.cpp:1301
KLauncher::dontBlockReading
bool dontBlockReading
Definition: klauncher.h:289
KLauncher::slotSlaveGone
void slotSlaveGone()
Definition: klauncher.cpp:1290
KLauncher::autoStart2Done
void autoStart2Done()
IdleSlave::pid
pid_t pid() const
Definition: klauncher.h:57
KLaunchRequest::autoStart
bool autoStart
Definition: klauncher.h:100
KLauncher::processRequestReturn
void processRequestReturn(int status, const QByteArray &requestData)
Definition: klauncher.cpp:365
KLauncher::queueRequest
void queueRequest(KLaunchRequest *)
Definition: klauncher.cpp:1036
KService::DBusStartupType
DBusStartupType
KLauncher::slotGotOutput
void slotGotOutput()
Definition: klauncher.cpp:1326
KLauncher::~KLauncher
~KLauncher()
Definition: klauncher.cpp:256
autostart.h
KLauncher::slotAutoStart
void slotAutoStart()
Definition: klauncher.cpp:533
KLauncher::start_service
bool start_service(KService::Ptr service, const QStringList &urls, const QStringList &envs, const QByteArray &startup_id, bool blind, bool autoStart, const QDBusMessage &msg)
Definition: klauncher.cpp:814
KLauncher::terminate_kdeinit
void terminate_kdeinit()
Definition: klauncher.cpp:1365
QObject::parent
QObject * parent() const
serviceResult::error
QString error
Definition: klauncher.h:119
KLauncher::createArgs
void createArgs(KLaunchRequest *request, const KService::Ptr service, const QStringList &url)
Definition: klauncher.cpp:1068
KLauncher::mSlaveValgrindSkin
QString mSlaveValgrindSkin
Definition: klauncher.h:288
KLauncher::slotNameOwnerChanged
void slotNameOwnerChanged(const QString &name, const QString &oldOnwer, const QString &newOwner)
Definition: klauncher.cpp:467
KLauncher::mSlaveDebug
QString mSlaveDebug
Definition: klauncher.h:286
KLaunchRequest::status
status_t status
Definition: klauncher.h:97
KLaunchRequest::process
KProcess * process
Definition: klauncher.h:110
SlaveWaitRequest::pid
pid_t pid
Definition: klauncher.h:84
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:23:53 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

KInit

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

kdelibs API Reference

Skip menu "kdelibs API Reference"
  • DNSSD
  • Interfaces
  •   KHexEdit
  •   KMediaPlayer
  •   KSpeech
  •   KTextEditor
  • kconf_update
  • KDE3Support
  •   KUnitTest
  • KDECore
  • KDED
  • KDEsu
  • KDEUI
  • KDEWebKit
  • KDocTools
  • KFile
  • KHTML
  • KImgIO
  • KInit
  • kio
  • KIOSlave
  • KJS
  •   KJS-API
  •   WTF
  • kjsembed
  • KNewStuff
  • KParts
  • KPty
  • Kross
  • KUnitConversion
  • KUtils
  • Nepomuk
  • Plasma
  • Solid
  • Sonnet
  • ThreadWeaver

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal