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
00026
00027 #ifndef __KSTARTUPINFO_H
00028 #define __KSTARTUPINFO_H
00029
00030 #include <sys/types.h>
00031 #include <qobject.h>
00032 #ifdef Q_WS_X11 // FIXME(E): Redo in a less X11-specific way
00033 #include <qcstring.h>
00034 #include <qstring.h>
00035 #include <qvaluelist.h>
00036
00037 class KStartupInfoId;
00038 class KStartupInfoData;
00039
00040 class KStartupInfoPrivate;
00041
00063 class KStartupInfo
00064 : public QObject
00065 {
00066 Q_OBJECT
00067 public:
00068 enum {
00069 CleanOnCantDetect = 1 << 0,
00070 DisableKWinModule = 1 << 1,
00071 AnnounceSilenceChanges = 1 << 2
00072 };
00073
00092 KStartupInfo( int flags, QObject* parent = NULL, const char* name = NULL );
00104 KStartupInfo( bool clean_on_cantdetect, QObject* parent = 0, const char* name = 0 );
00105 virtual ~KStartupInfo();
00117 static bool sendStartup( const KStartupInfoId& id, const KStartupInfoData& data );
00118
00126 static bool sendStartupX( Display* dpy, const KStartupInfoId& id,
00127 const KStartupInfoData& data );
00128
00139 static bool sendChange( const KStartupInfoId& id, const KStartupInfoData& data );
00140
00148 static bool sendChangeX( Display* dpy, const KStartupInfoId& id,
00149 const KStartupInfoData& data );
00150
00156 static bool sendFinish( const KStartupInfoId& id );
00157
00164 static bool sendFinishX( Display* dpy, const KStartupInfoId& id );
00165
00173 static bool sendFinish( const KStartupInfoId& id, const KStartupInfoData& data );
00174
00182 static bool sendFinishX( Display* dpy, const KStartupInfoId& id,
00183 const KStartupInfoData& data );
00184
00191 static KStartupInfoId currentStartupIdEnv();
00195 static void resetStartupEnv();
00203 static void appStarted();
00210 enum startup_t { NoMatch, Match, CantDetect };
00218 startup_t checkStartup( WId w );
00227 startup_t checkStartup( WId w, KStartupInfoId& id );
00237 startup_t checkStartup( WId w, KStartupInfoData& data );
00248 startup_t checkStartup( WId w, KStartupInfoId& id, KStartupInfoData& data );
00253 void setTimeout( unsigned int secs );
00259 static void setWindowStartupId( WId window, const QCString& id );
00265 static QCString windowStartupId( WId w );
00269 class Data;
00270 signals:
00277 void gotNewStartup( const KStartupInfoId& id, const KStartupInfoData& data );
00283 void gotStartupChange( const KStartupInfoId& id, const KStartupInfoData& data );
00290 void gotRemoveStartup( const KStartupInfoId& id, const KStartupInfoData& data );
00291 protected:
00292 virtual void customEvent( QCustomEvent* e_P );
00293 private slots:
00294 void startups_cleanup();
00295 void startups_cleanup_no_age();
00296 void got_message( const QString& msg );
00297 void window_added( WId w );
00298 void slot_window_added( WId w );
00299 private:
00300 void init( int flags );
00301 friend class KStartupInfoPrivate;
00302 void got_startup_info( const QString& msg_P, bool update_only_P );
00303 void got_remove_startup_info( const QString& msg_P );
00304 void new_startup_info_internal( const KStartupInfoId& id_P,
00305 Data& data_P, bool update_only_P );
00306 void remove_startup_info_internal( const KStartupInfoId& id_P );
00307 void remove_startup_pids( const KStartupInfoId& id, const KStartupInfoData& data );
00308 void remove_startup_pids( const KStartupInfoData& data );
00309 startup_t check_startup_internal( WId w, KStartupInfoId* id, KStartupInfoData* data,
00310 bool remove );
00311 bool find_id( const QCString& id_P, KStartupInfoId* id_O,
00312 KStartupInfoData* data_O, bool remove );
00313 bool find_pid( pid_t pid_P, const QCString& hostname, KStartupInfoId* id_O,
00314 KStartupInfoData* data_O, bool remove );
00315 bool find_wclass( QCString res_name_P, QCString res_class_P,
00316 KStartupInfoId* id_O, KStartupInfoData* data_O, bool remove );
00317 static QCString get_window_startup_id( WId w_P );
00318 static QCString get_window_hostname( WId w_P );
00319 void startups_cleanup_internal( bool age_P );
00320 void clean_all_noncompliant();
00321 bool clean_on_cantdetect_;
00322 unsigned int timeout;
00323 KStartupInfoPrivate* d;
00324 };
00325
00326 class KStartupInfoIdPrivate;
00327
00340 class KStartupInfoId
00341 {
00342 public:
00347 bool operator==( const KStartupInfoId& id ) const;
00352 bool operator!=( const KStartupInfoId& id ) const;
00357 bool none() const;
00365 void initId( const QCString& id = "" );
00370 const QCString& id() const;
00375 bool setupStartupEnv() const;
00379 KStartupInfoId();
00383 KStartupInfoId( const KStartupInfoId& data );
00384 ~KStartupInfoId();
00385 KStartupInfoId& operator=( const KStartupInfoId& data );
00386 bool operator<( const KStartupInfoId& id ) const;
00387 private:
00388 KStartupInfoId( const QString& txt );
00389 QString to_text() const;
00390 friend class KStartupInfo;
00391 KStartupInfoIdPrivate* d;
00392 };
00393
00394 class KStartupInfoDataPrivate;
00395
00408 class KStartupInfoData
00409 {
00410 public:
00415 void setBin( const QString& bin );
00420 const QString& bin() const;
00424 void setName( const QString& name );
00431 const QString& findName() const;
00437 const QString& name() const;
00442 void setIcon( const QString& icon );
00449 const QString& findIcon() const;
00454 const QString& icon() const;
00460 void setDesktop( int desktop );
00465 int desktop() const;
00472 void setWMClass( const QCString& wmclass );
00479 const QCString findWMClass() const;
00485 const QCString& WMClass() const;
00493 void addPid( pid_t pid );
00498 const QValueList< pid_t >& pids() const;
00504 bool is_pid( pid_t pid ) const;
00510 void setHostname( const QCString& hostname = QCString());
00515 const QCString& hostname() const;
00516
00517 enum TriState { Yes, No, Unknown };
00518
00524 void setSilent( TriState state );
00525
00531 TriState silent() const;
00532
00538 void update( const KStartupInfoData& data );
00542 KStartupInfoData();
00543
00547 KStartupInfoData( const KStartupInfoData& data );
00548 ~KStartupInfoData();
00549 KStartupInfoData& operator=( const KStartupInfoData& data );
00550 private:
00551 KStartupInfoData( const QString& txt );
00552 QString to_text() const;
00553 void remove_pid( pid_t pid );
00554 friend class KStartupInfo;
00555 friend class KStartupInfo::Data;
00556 KStartupInfoDataPrivate* d;
00557 };
00558
00559 #endif
00560 #endif