mirror of
https://bitbucket.org/smil3y/kdelibs.git
synced 2025-02-24 10:52:49 +00:00

since most of the settings are "frozen" now there is little to no chance that it will be needed. CMake files that reference paths for installing .upd files are left intact for now.
248 lines
6.6 KiB
C++
248 lines
6.6 KiB
C++
/* This file is part of the KDE libraries
|
|
* Copyright (C) 1999 David Faure <faure@kde.org>
|
|
* (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 KDED_H
|
|
#define KDED_H
|
|
|
|
#include <QtCore/QObject>
|
|
#include <QtCore/QString>
|
|
#include <QtCore/QTimer>
|
|
#include <QtCore/QHash>
|
|
#include <QtCore/QSet>
|
|
|
|
#include <QtDBus/QtDBus>
|
|
|
|
#include <ksycoca.h>
|
|
#include <ksycocatype.h>
|
|
#include <kdedmodule.h>
|
|
#include <kservice.h>
|
|
|
|
class QDBusServiceWatcher;
|
|
class KDirWatch;
|
|
|
|
// No need for this in libkio - apps only get readonly access
|
|
class Kded : public QObject
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
Kded();
|
|
virtual ~Kded();
|
|
|
|
static Kded *self() { return _self;}
|
|
static void messageFilter(const QDBusMessage &);
|
|
|
|
void noDemandLoad(const QString &obj); // Don't load obj on demand
|
|
|
|
KDEDModule *loadModule(const QString &obj, bool onDemand);
|
|
KDEDModule *loadModule(const KService::Ptr& service, bool onDemand);
|
|
QStringList loadedModules();
|
|
bool unloadModule(const QString &obj);
|
|
//bool isWindowRegistered(qlonglong windowId) const;
|
|
/**
|
|
* Applications can register/unregister their windows with kded modules.
|
|
* This allows kpasswdserver and kcookiejar to delete authentication
|
|
* and cookies that are local to a particular window when closing it.
|
|
*/
|
|
//@{
|
|
/**
|
|
* Register a window with KDED
|
|
*/
|
|
void registerWindowId(qlonglong windowId, const QString &sender);
|
|
/**
|
|
* Unregister a window previously registered with KDED
|
|
*/
|
|
void unregisterWindowId(qlonglong windowId, const QString &sender);
|
|
//@}
|
|
void recreate(const QDBusMessage&);
|
|
void recreate(bool initial);
|
|
void loadSecondPhase();
|
|
|
|
//@{
|
|
/**
|
|
* Check if a module should be loaded on startup.
|
|
*
|
|
* @param module the name of the desktop file for the module, without the .desktop extension
|
|
* @return @c true if the module will be loaded at startup, @c false otherwise
|
|
*/
|
|
bool isModuleAutoloaded(const QString &module) const;
|
|
/**
|
|
* Check if a module should be loaded on startup.
|
|
*
|
|
* @param module a service description for the module
|
|
* @return @c true if the module will be loaded at startup, @c false otherwise
|
|
*/
|
|
bool isModuleAutoloaded(const KService::Ptr &module) const;
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Check if a module should be loaded on demand
|
|
*
|
|
* @param module the name of the desktop file for the module, without the .desktop extension
|
|
* @return @c true if the module will be loaded when its D-Bus interface
|
|
* is requested, @c false otherwise
|
|
*/
|
|
bool isModuleLoadedOnDemand(const QString &module) const;
|
|
/**
|
|
* Check if a module should be loaded on demand
|
|
*
|
|
* @param module a service description for the module
|
|
* @return @c true if the module will be loaded when its D-Bus interface
|
|
* is requested, @c false otherwise
|
|
*/
|
|
bool isModuleLoadedOnDemand(const KService::Ptr &module) const;
|
|
//@}
|
|
|
|
/**
|
|
* Configure whether a module should be loaded on startup
|
|
*
|
|
* If a module is set to be auto-loaded, it will be loaded at the start of a KDE
|
|
* session. Depending on the phase it is set to load in, it may also be loaded
|
|
* when the first KDE application is run outside of a KDE session.
|
|
*
|
|
* @param module the name of the desktop file for the module, without the .desktop extension
|
|
* @param autoload if @c true, the module will be loaded at startup,
|
|
* otherwise it will not
|
|
*/
|
|
void setModuleAutoloading(const QString &module, bool autoload);
|
|
|
|
|
|
public Q_SLOTS:
|
|
/**
|
|
* Loads / unloads modules according to config
|
|
*/
|
|
void initModules();
|
|
|
|
/**
|
|
* Recreate the database file
|
|
*/
|
|
void recreate();
|
|
|
|
/**
|
|
* Recreating finished
|
|
*/
|
|
void recreateDone();
|
|
void recreateFailed(const QDBusError &error);
|
|
|
|
/**
|
|
* Collect all directories to watch
|
|
*/
|
|
void updateDirWatch();
|
|
|
|
/**
|
|
* Update directories to watch
|
|
*/
|
|
void updateResourceList();
|
|
|
|
/**
|
|
* An application unregistered itself from DBus
|
|
*/
|
|
void slotApplicationRemoved(const QString&);
|
|
|
|
/**
|
|
* A KDEDModule is about to get destroyed.
|
|
*/
|
|
void slotKDEDModuleRemoved(KDEDModule *);
|
|
|
|
protected Q_SLOTS:
|
|
|
|
/**
|
|
* @internal Triggers rebuilding
|
|
*/
|
|
void dirDeleted(const QString& path);
|
|
|
|
/**
|
|
* @internal Triggers rebuilding
|
|
*/
|
|
void update (const QString& dir );
|
|
|
|
void runDelayedCheck();
|
|
|
|
private:
|
|
void afterRecreateFinished();
|
|
|
|
/**
|
|
* Scans dir for new files and new subdirectories.
|
|
*/
|
|
void readDirectory(const QString& dir );
|
|
|
|
/**
|
|
* Pointer to the dirwatch class which tells us, when some directories
|
|
* changed.
|
|
* Slower polling for remote file systems is now done in KDirWatch (JW).
|
|
*/
|
|
KDirWatch* m_pDirWatch;
|
|
|
|
/**
|
|
* When a desktop file is updated, a timer is started (5 sec)
|
|
* before rebuilding the binary - so that multiple updates result
|
|
* in only one rebuilding.
|
|
*/
|
|
QTimer* m_pTimer;
|
|
|
|
QList<QDBusMessage> m_recreateRequests;
|
|
int m_recreateCount;
|
|
bool m_recreateBusy;
|
|
|
|
QHash<QString,KDEDModule *> m_modules;
|
|
//QHash<QString,KLibrary *> m_libs;
|
|
QHash<QString,QObject *> m_dontLoad;
|
|
|
|
//window id tracking, with a QDBusServiceWatcher to remove them as needed
|
|
QDBusServiceWatcher *m_serviceWatcher;
|
|
QHash<QString,QList<qlonglong> > m_windowIdList;
|
|
QSet<long> m_globalWindowIdList;
|
|
|
|
QStringList m_allResourceDirs;
|
|
bool m_needDelayedCheck;
|
|
|
|
static Kded *_self;
|
|
};
|
|
|
|
class KBuildsycocaAdaptor: public QDBusAbstractAdaptor
|
|
{
|
|
Q_OBJECT
|
|
Q_CLASSINFO("D-Bus Interface", "org.kde.kbuildsycoca")
|
|
public:
|
|
KBuildsycocaAdaptor(QObject *parent);
|
|
|
|
public Q_SLOTS:
|
|
Q_NOREPLY void recreate(const QDBusMessage&);
|
|
};
|
|
|
|
|
|
class KHostnameD : public QObject
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
KHostnameD(int pollInterval);
|
|
~KHostnameD();
|
|
|
|
public Q_SLOTS:
|
|
void checkHostname();
|
|
|
|
private:
|
|
/**
|
|
* Timer for interval hostname checking.
|
|
*/
|
|
QTimer m_Timer;
|
|
QByteArray m_hostname;
|
|
};
|
|
|
|
#endif
|