00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
#ifndef __KSTARTUPINFO_H
00026
#define __KSTARTUPINFO_H
00027
00028
#include <sys/types.h>
00029
#include <qobject.h>
00030
00031
#ifdef Q_WS_X11 // FIXME(E): Redo in a less X11-specific way
00032
00033
#include <qcstring.h>
00034
#include <qstring.h>
00035
#include <qvaluelist.h>
00036
#include "kdelibs_export.h"
00037
00038
class KStartupInfoId;
00039
class KStartupInfoData;
00040
00041
class KStartupInfoPrivate;
00042
00063 class KDECORE_EXPORT KStartupInfo
00064 :
public QObject
00065 {
00066 Q_OBJECT
00067
public:
00076
static void disableAutoAppStartedSending(
bool disable =
true );
00077
00085
static void appStarted();
00086
00092
static void appStarted(
const QCString& startup_id );
00093
00103
static void setNewStartupId(
QWidget* window,
const QCString& startup_id );
00104
00114
static void silenceStartup(
bool silence );
00115
00121
static QCString createNewStartupId();
00125
enum {
00126 CleanOnCantDetect = 1 << 0,
00127 DisableKWinModule = 1 << 1,
00128 AnnounceSilenceChanges = 1 << 2
00129 };
00130
00149 KStartupInfo(
int flags,
QObject* parent = NULL,
const char* name = NULL );
00161 KStartupInfo(
bool clean_on_cantdetect,
QObject* parent = 0,
const char* name = 0 );
00162
virtual ~KStartupInfo();
00175
static bool sendStartup(
const KStartupInfoId&
id,
const KStartupInfoData& data );
00176
00185
static bool sendStartupX( Display* dpy,
const KStartupInfoId&
id,
00186
const KStartupInfoData& data );
00187
00198
static bool sendChange(
const KStartupInfoId&
id,
const KStartupInfoData& data );
00199
00207
static bool sendChangeX( Display* dpy,
const KStartupInfoId&
id,
00208
const KStartupInfoData& data );
00209
00215
static bool sendFinish(
const KStartupInfoId&
id );
00216
00223
static bool sendFinishX( Display* dpy,
const KStartupInfoId&
id );
00224
00232
static bool sendFinish(
const KStartupInfoId&
id,
const KStartupInfoData& data );
00233
00241
static bool sendFinishX( Display* dpy,
const KStartupInfoId&
id,
00242
const KStartupInfoData& data );
00243
00250
static KStartupInfoId currentStartupIdEnv();
00254
static void resetStartupEnv();
00261 enum startup_t { NoMatch, Match, CantDetect };
00267 startup_t checkStartup( WId w );
00275 startup_t checkStartup( WId w,
KStartupInfoId&
id );
00283 startup_t checkStartup( WId w,
KStartupInfoData& data );
00292 startup_t checkStartup( WId w,
KStartupInfoId&
id,
KStartupInfoData& data );
00297
void setTimeout(
unsigned int secs );
00303
static void setWindowStartupId( WId window,
const QCString&
id );
00309
static QCString windowStartupId( WId w );
00313
static void handleAutoAppStartedSending();
00317
class Data;
00318 signals:
00325
void gotNewStartup(
const KStartupInfoId&
id,
const KStartupInfoData& data );
00331
void gotStartupChange(
const KStartupInfoId&
id,
const KStartupInfoData& data );
00338
void gotRemoveStartup(
const KStartupInfoId&
id,
const KStartupInfoData& data );
00339
protected:
00343
virtual void customEvent(
QCustomEvent* e_P );
00344
private slots:
00345
void startups_cleanup();
00346
void startups_cleanup_no_age();
00347
void got_message(
const QString& msg );
00348
void window_added( WId w );
00349
void slot_window_added( WId w );
00350
private:
00351
void init(
int flags );
00352
friend class KStartupInfoPrivate;
00353
void got_startup_info(
const QString& msg_P,
bool update_only_P );
00354
void got_remove_startup_info(
const QString& msg_P );
00355
void new_startup_info_internal(
const KStartupInfoId& id_P,
00356 Data& data_P,
bool update_only_P );
00357
void remove_startup_info_internal(
const KStartupInfoId& id_P );
00358
void remove_startup_pids(
const KStartupInfoId&
id,
const KStartupInfoData& data );
00359
void remove_startup_pids(
const KStartupInfoData& data );
00360 startup_t check_startup_internal( WId w,
KStartupInfoId*
id,
KStartupInfoData* data );
00361
bool find_id(
const QCString& id_P,
KStartupInfoId* id_O,
00362
KStartupInfoData* data_O );
00363
bool find_pid( pid_t pid_P,
const QCString& hostname,
KStartupInfoId* id_O,
00364
KStartupInfoData* data_O );
00365
bool find_wclass(
QCString res_name_P,
QCString res_class_P,
00366
KStartupInfoId* id_O,
KStartupInfoData* data_O );
00367
static QCString get_window_hostname( WId w_P );
00368
void startups_cleanup_internal(
bool age_P );
00369
void clean_all_noncompliant();
00370
static QString check_required_startup_fields(
const QString& msg,
00371
const KStartupInfoData& data,
int screen );
00372
bool clean_on_cantdetect_;
00373
unsigned int timeout;
00374 KStartupInfoPrivate* d;
00375 };
00376
00377
class KStartupInfoIdPrivate;
00378
00390 class KDECORE_EXPORT KStartupInfoId
00391 {
00392
public:
00397
bool operator==(
const KStartupInfoId&
id )
const;
00402
bool operator!=(
const KStartupInfoId&
id )
const;
00407
bool none()
const;
00415
void initId(
const QCString&
id =
"" );
00420
const QCString& id()
const;
00426
unsigned long timestamp()
const;
00431
bool setupStartupEnv()
const;
00435 KStartupInfoId();
00439 KStartupInfoId(
const KStartupInfoId& data );
00440 ~KStartupInfoId();
00441 KStartupInfoId& operator=(
const KStartupInfoId& data );
00442
bool operator<(
const KStartupInfoId&
id )
const;
00443
private:
00444 KStartupInfoId(
const QString& txt );
00445
QString to_text()
const;
00446
friend class KStartupInfo;
00447 KStartupInfoIdPrivate* d;
00448 };
00449
00450
class KStartupInfoDataPrivate;
00451
00463 class KDECORE_EXPORT KStartupInfoData
00464 {
00465
public:
00470
void setBin(
const QString& bin );
00475
const QString& bin()
const;
00479
void setName(
const QString& name );
00485
const QString& findName()
const;
00491
const QString& name()
const;
00498
void setDescription(
const QString& descr );
00505
const QString& findDescription()
const;
00512
const QString& description()
const;
00517
void setIcon(
const QString& icon );
00524
const QString& findIcon()
const;
00529
const QString& icon()
const;
00535
void setDesktop(
int desktop );
00540
int desktop()
const;
00547
void setWMClass(
const QCString& wmclass );
00554
const QCString findWMClass()
const;
00560
const QCString& WMClass()
const;
00568
void addPid( pid_t pid );
00573
const QValueList< pid_t >& pids()
const;
00579
bool is_pid( pid_t pid )
const;
00585
void setHostname(
const QCString& hostname =
QCString());
00590
const QCString& hostname()
const;
00591
00595
enum TriState { Yes, No, Unknown };
00596
00602
void setSilent( TriState state );
00603
00609 TriState silent()
const;
00610
00619
void setTimestamp(
unsigned long time );
00620
00626
unsigned long timestamp()
const;
00627
00631
int screen()
const;
00632
00637
void setScreen(
int screen );
00638
00644
void update(
const KStartupInfoData& data );
00645
00649 KStartupInfoData();
00650
00654 KStartupInfoData(
const KStartupInfoData& data );
00655 ~KStartupInfoData();
00656 KStartupInfoData& operator=(
const KStartupInfoData& data );
00657
private:
00658 KStartupInfoData(
const QString& txt );
00659
QString to_text()
const;
00660
void remove_pid( pid_t pid );
00661
friend class KStartupInfo;
00662
friend class KStartupInfo::Data;
00663 KStartupInfoDataPrivate* d;
00664 };
00665
00666
#endif //Q_WS_X11
00667
00668
#endif