[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [kactivities/ivan/plugin-refactor] service: KAMD back on its feet
From:       Ivan Čukić <ivan.cukic () kde ! org>
Date:       2012-06-28 16:55:47
Message-ID: 20120628165547.D7A41A60DF () git ! kde ! org
[Download RAW message or body]

Git commit b0f80f87948c9f7db618798a7cb0a7d2ed35b0b3 by Ivan Čukić.
Committed on 28/06/2012 at 13:51.
Pushed by ivan into branch 'ivan/plugin-refactor'.

KAMD back on its feet

C  +103  -413  service/Activities.cpp [from: service/ActivityManager.cpp - 062% \
similarity] A  +217  -0    service/Activities.h     [License: GPL (v2)]
C  +7    -23   service/Activities_p.h [from: service/ActivityManager_p.h - 081% \
similarity] R  +40   -6    service/Application.cpp [from: service/main.cpp - 072% \
similarity] C  +14   -19   service/Application.h [from: service/jobs/Job.h - 070% \
similarity] M  +92   -68   service/CMakeLists.txt
M  +3    -0    service/NepomukActivityManager.cpp
M  +5    -0    service/NepomukActivityManager.h
A  +284  -0    service/Resources.cpp     [License: GPL (v2)]
A  +111  -0    service/Resources.h     [License: GPL (v2)]
M  +7    -0    service/TODO
C  +3    -21   service/common.h [from: service/ui/UiHandler.cpp - 073% similarity]
M  +0    -4    service/config-features.h.cmake
A  +91   -0    service/dbus/org.kde.ActivityManager.Activities.xml
A  +11   -0    service/dbus/org.kde.ActivityManager.Features.xml
A  +62   -0    service/dbus/org.kde.ActivityManager.Resources.xml
R  +0    -0    service/files/activitymanager-plugin.desktop [from: \
service/activitymanager-plugin.desktop - 100% similarity] R  +0    -0    \
service/files/kactivitymanagerd.desktop [from: service/kactivitymanagerd.desktop - \
100% similarity] M  +2    -1    service/jobs/Job.h
M  +1    -0    service/jobs/ui/Message.cpp
R  +14   -39   service/old/ActivityManager.cpp [from: service/ActivityManager.cpp - \
098% similarity] C  +0    -0    service/old/ActivityManager.h [from: \
service/ActivityManager.h - 100% similarity] R  +9    -58   \
service/old/ActivityManagerInterface.h [from: service/ActivityManager.h - 086% \
similarity] R  +0    -0    service/old/ActivityManager_p.h [from: \
service/ActivityManager_p.h - 100% similarity] R  +0    -0    \
service/old/EventProcessor.cpp [from: service/EventProcessor.cpp - 100% similarity] R \
+0    -0    service/old/EventProcessor.h [from: service/EventProcessor.h - 100% \
similarity] R  +0    -0    service/old/Messages.sh [from: service/Messages.sh - 100% \
similarity] R  +0    -0    service/old/Plugin.cpp [from: service/Plugin.cpp - 100% \
similarity] R  +0    -0    service/old/Plugin.h [from: service/Plugin.h - 100% \
similarity] R  +0    -0    service/old/SharedInfo.cpp [from: service/SharedInfo.cpp - \
100% similarity] R  +0    -0    service/old/SharedInfo.h [from: service/SharedInfo.h \
- 100% similarity] R  +0    -0    service/old/queries.sparql [from: \
service/queries.sparql - 100% similarity] D  +0    -163  \
service/org.kde.ActivityManager.xml M  +1    -1    service/ui/Ui.cpp
M  +0    -6    service/ui/UiHandler.cpp
M  +1    -5    service/ui/UiHandler.h
C  +25   -18   service/utils/d_ptr.h [from: service/jobs/Job.h - 062% similarity]
C  +31   -11   service/utils/d_ptr_implementation.h [from: service/ui/UiHandler.cpp - \
059% similarity] R  +8    -14   service/utils/for_each_assoc.h [from: service/Utils.h \
- 083% similarity] C  +8    -20   service/utils/nullptr.h [from: \
service/ui/UiHandler.cpp - 069% similarity] C  +12   -20   \
service/utils/override_macro.h [from: service/ui/UiHandler.cpp - 067% similarity]     \
[License: UNKNOWN]  *

The files marked with a * at the end have a non valid license. Please read: \
http://techbase.kde.org/Policies/Licensing_Policy and use the headers which are \
listed at that page.


http://commits.kde.org/kactivities/b0f80f87948c9f7db618798a7cb0a7d2ed35b0b3

diff --git a/service/ActivityManager.cpp b/service/Activities.cpp
similarity index 62%
copy from service/ActivityManager.cpp
copy to service/Activities.cpp
index f6b03d6..1013e2f 100644
--- a/service/ActivityManager.cpp
+++ b/service/Activities.cpp
@@ -17,66 +17,64 @@
  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 
-#include "ActivityManager.h"
-#include "ActivityManager_p.h"
+#include "Activities.h"
+#include "Activities_p.h"
+
 #include "NepomukActivityManager.h"
 
-#include <QUuid>
+#include "activitiesadaptor.h"
+
 #include <QDBusConnection>
+#include <QDBusInterface>
+#include <QUuid>
 
-#include <KConfig>
-#include <KConfigGroup>
-#include <KCrash>
-#include <KLocale>
-#include <KUrl>
+// #include <KConfig>
+// #include <KConfigGroup>
+// #include <KCrash>
 #include <KDebug>
+// #include <KLocale>
+// #include <KUrl>
 
-#include <KWindowSystem>
-
-#include "activitymanageradaptor.h"
-#include "EventProcessor.h"
+#include <config-features.h>
 
-#include "jobs/schedulers/all.h"
 #include "jobs/activity/all.h"
 #include "jobs/encryption/all.h"
 #include "jobs/general/all.h"
 #include "jobs/nepomuk/all.h"
+#include "jobs/schedulers/all.h"
 #include "jobs/ui/all.h"
-
+//
+// #ifdef HAVE_NEPOMUK
+// #include "jobs/encryption/Common.h"
+// #include "jobs/nepomuk/Move.h"
+// #endif
+//
 #include "ui/Ui.h"
 
-#include <config-features.h>
+#include "common.h"
+
+#include <utils/nullptr.h>
+#include <utils/d_ptr_implementation.h>
 
 // Private
 
-ActivityManagerPrivate::ActivityManagerPrivate(ActivityManager * parent
-            // ,
-            // QHash < WId, SharedInfo::WindowData > & _windows,
-            // QHash < KUrl, SharedInfo::ResourceData > & _resources
-        )
+Activities::Private::Private(Activities * parent)
     : config("activitymanagerrc"),
-      // windows(_windows),
-      // resources(_resources),
-      sharedInfo(new SharedInfo(parent)),
       q(parent),
       ksmserverInterface(nullptr),
       screensaverInterface(nullptr)
 {
 }
 
-ActivityManagerPrivate::~ActivityManagerPrivate()
+Activities::Private::~Private()
 {
     configSync();
 }
 
 // Main
 
-ActivityManager::ActivityManager()
-    : d(new ActivityManagerPrivate(this
-            // ,
-            // SharedInfo::self()->m_windows,
-            // SharedInfo::self()->m_resources
-        ))
+Activities::Activities()
+    : d(this)
 {
     kDebug() << "\n\n-------------------------------------------------------";
     kDebug() << "Starting the KDE Activity Manager daemon" << \
QDateTime::currentDateTime(); @@ -84,48 +82,30 @@ ActivityManager::ActivityManager()
 
     // Basic initialization \
//////////////////////////////////////////////////////////////////////////////////  
-    // TODO: We should move away from any gui-related code
-    setQuitOnLastWindowClosed(false);
-
     // Initializing D-Bus service
-    QDBusConnection dbus = QDBusConnection::sessionBus();
-    new ActivityManagerAdaptor(this);
-    dbus.registerService("org.kde.ActivityManager");
-    dbus.registerObject("/ActivityManager", this);
-
-    // KAMD is a daemon, if it crashes it is not a problem as
-    // long as it restarts properly
-    // NOTE: We have a custom crash handler
-    KCrash::setFlags(KCrash::AutoRestart);
-
-    // Initializing the event processor
-    EventProcessor::self();
+    new ActivitiesAdaptor(this);
+    QDBusConnection::sessionBus().registerObject(
+            ACTIVITY_MANAGER_OBJECT_PATH(Activities), this);
 
     // Initializing config
     connect(&d->configSyncTimer, SIGNAL(timeout()),
-             d, SLOT(configSync()));
+             d.get(), SLOT(configSync()));
 
     d->configSyncTimer.setSingleShot(true);
     d->configSyncTimer.setInterval(2 * 60 * 1000);
 
-    // Listening to active window changes
-    connect(KWindowSystem::self(), SIGNAL(windowRemoved(WId)),
-            d, SLOT(windowClosed(WId)));
-    connect(KWindowSystem::self(), SIGNAL(activeWindowChanged(WId)),
-            d, SLOT(activeWindowChanged(WId)));
-
     // Listen to ksmserver for starting/stopping
     QDBusServiceWatcher *watcher = new QDBusServiceWatcher("org.kde.ksmserver",
                                                            \
                QDBusConnection::sessionBus(),
                                                            \
                QDBusServiceWatcher::WatchForRegistration);
-    connect(watcher, SIGNAL(serviceRegistered(QString)), d, \
SLOT(sessionServiceRegistered())); +    connect(watcher, \
SIGNAL(serviceRegistered(QString)), d.get(), SLOT(sessionServiceRegistered()));  \
d->sessionServiceRegistered();  
     // Listen to screensaver for starting/stopping
     QDBusServiceWatcher *watcher2 = new QDBusServiceWatcher("org.kde.screensaver",
                                                             \
                QDBusConnection::sessionBus(),
                                                             \
                QDBusServiceWatcher::WatchForRegistration);
-    connect(watcher2, SIGNAL(serviceRegistered(QString)), d, \
SLOT(screensaverServiceRegistered())); +    connect(watcher2, \
SIGNAL(serviceRegistered(QString)), d.get(), SLOT(screensaverServiceRegistered()));  \
d->screensaverServiceRegistered();  
     // Activity initialization \
/////////////////////////////////////////////////////////////////////////////// @@ \
-133,13 +113,13 @@ ActivityManager::ActivityManager()  // Reading activities from the \
config file  
     foreach (const QString & activity, d->activitiesConfig().keyList()) {
-        d->activities[activity] = ActivityManager::Stopped;
+        d->activities[activity] = Activities::Stopped;
     }
 
     const QStringList & runningActivities = \
d->mainConfig().readEntry("runningActivities", d->activities.keys());  foreach (const \
QString & activity, runningActivities) {  if (d->activities.contains(activity)) {
-            d->activities[activity] = ActivityManager::Running;
+            d->activities[activity] = Activities::Running;
         }
     }
 
@@ -147,9 +127,6 @@ ActivityManager::ActivityManager()
 
     EXEC_NEPOMUK( syncActivities(d->activities.keys(), d->activitiesConfig(), \
d->activityIconsConfig()) );  
-    connect(this, SIGNAL(CurrentActivityChanged(QString)),
-            d->sharedInfo, SIGNAL(currentActivityChanged(QString)));
-
 #ifdef HAVE_NEPOMUK
     if (NEPOMUK_PRESENT) {
         connect(this, SIGNAL(CurrentActivityChanged(QString)),
@@ -162,16 +139,15 @@ ActivityManager::ActivityManager()
     }
 #endif
 
-
     d->loadLastPublicActivity();
 }
 
-ActivityManager::~ActivityManager()
+Activities::~Activities()
 {
-    delete d;
 }
 
-void ActivityManager::SetActivityEncrypted(const QString & activity, bool encrypted)
+/*
+void Activities::SetActivityEncrypted(const QString & activity, bool encrypted)
 {
     using namespace Jobs;
     using namespace Jobs::Ui;
@@ -266,17 +242,18 @@ void ActivityManager::SetActivityEncrypted(const QString & \
activity, bool encryp  setActivityEncryptedJob.start();
 }
 
-bool ActivityManager::IsActivityEncrypted(const QString & activity) const
+bool Activities::IsActivityEncrypted(const QString & activity) const
 {
     return Jobs::Encryption::Common::isActivityEncrypted(activity);
 }
+*/
 
-QString ActivityManager::CurrentActivity() const
+QString Activities::CurrentActivity() const
 {
     return d->currentActivity;
 }
 
-bool ActivityManager::SetCurrentActivity(const QString & id)
+bool Activities::SetCurrentActivity(const QString & id)
 {
     if (id.isEmpty()) {
         return false;
@@ -285,7 +262,7 @@ bool ActivityManager::SetCurrentActivity(const QString & id)
     return d->setCurrentActivity(id);
 }
 
-bool ActivityManagerPrivate::setCurrentActivity(const QString & activity)
+bool Activities::Private::setCurrentActivity(const QString & activity)
 {
     using namespace Jobs;
     using namespace Jobs::Ui;
@@ -316,8 +293,6 @@ bool ActivityManagerPrivate::setCurrentActivity(const QString & \
activity)  if (!activities.contains(activity)) return false;
     if (currentActivity == activity)    return true;
 
-    activitiesDesktopsConfig().writeEntry(currentActivity, \
                QString::number(KWindowSystem::currentDesktop()));
-
     // Start activity
     // TODO: Move this to job-based execution
     q->StartActivity(activity);
@@ -377,7 +352,7 @@ bool ActivityManagerPrivate::setCurrentActivity(const QString & \
activity)  return true;
 }
 
-void ActivityManagerPrivate::loadLastPublicActivity()
+void Activities::Private::loadLastPublicActivity()
 {
     // Try to load the last used public (non-private) activity
 
@@ -387,7 +362,7 @@ void ActivityManagerPrivate::loadLastPublicActivity()
     if (lastPublicActivity.isEmpty() || \
Jobs::Encryption::Common::isActivityEncrypted(lastPublicActivity)) {  \
lastPublicActivity.clear();  
-        QHashIterator < QString, ActivityManager::State > i(activities);
+        QHashIterator < QString, Activities::State > i(activities);
         while (i.hasNext()) {
             i.next();
             if (!Jobs::Encryption::Common::isActivityEncrypted(i.key())) {
@@ -421,14 +396,14 @@ void ActivityManagerPrivate::loadLastPublicActivity()
     }
 }
 
-void ActivityManagerPrivate::checkForSetCurrentActivityError(KJob * job)
+void Activities::Private::checkForSetCurrentActivityError(KJob * job)
 {
     if (job->error()) {
         loadLastPublicActivity();
     }
 }
 
-void ActivityManagerPrivate::emitCurrentActivityChanged(const QString & id)
+void Activities::Private::emitCurrentActivityChanged(const QString & id)
 {
     currentActivity = id;
     mainConfig().writeEntry("currentActivity", id);
@@ -444,20 +419,10 @@ void ActivityManagerPrivate::emitCurrentActivityChanged(const \
QString & id)  scheduleConfigSync();
 
     emit q->CurrentActivityChanged(id);
-
-    if (activitiesDesktopsConfig().hasKey(id)) {
-        int desktopId = activitiesDesktopsConfig().readEntry(id).toInt();
-
-        if (desktopId <= KWindowSystem::numberOfDesktops() && desktopId >= 0) {
-            KWindowSystem::setCurrentDesktop(desktopId);
-        }
-    }
 }
 
-QString ActivityManager::AddActivity(const QString & name)
+QString Activities::AddActivity(const QString & name)
 {
-    // kDebug() << name;
-
     QString id;
 
     // Ensuring a new Uuid. The loop should usually end after only
@@ -478,7 +443,7 @@ QString ActivityManager::AddActivity(const QString & name)
     return id;
 }
 
-void ActivityManager::RemoveActivity(const QString & activity)
+void Activities::RemoveActivity(const QString & activity)
 {
     // Sanity checks
     if (!d->activities.contains(activity)) return;
@@ -510,7 +475,7 @@ void ActivityManager::RemoveActivity(const QString & activity)
                     QStringList()
                         << "Delete the activity"
                         << "Cancel"
-                ), -1 /* Expecting the first choice */
+                ), -1 // Expecting the first choice
             )
 
         <<  // unmount the activity
@@ -539,17 +504,18 @@ void ActivityManager::RemoveActivity(const QString & activity)
         initializeStructure(activity, InitializeStructure::DeinitializeBoth)
 
     <<  // Remove
-        General::call(d, "removeActivity", activity, true /* waitFinished */);
+        General::call(d.get(), "removeActivity", activity, true /* wait finished */
+        );
 
     removeActivityJob.start();
 }
 
-void ActivityManagerPrivate::removeActivity(const QString & activity)
+void Activities::Private::removeActivity(const QString & activity)
 {
     // If the activity is running, stash it
     q->StopActivity(activity);
 
-    setActivityState(activity, ActivityManager::Invalid);
+    setActivityState(activity, Activities::Invalid);
 
     // Removing the activity
     activities.remove(activity);
@@ -573,54 +539,33 @@ void ActivityManagerPrivate::removeActivity(const QString & \
activity)  configSync();
 }
 
-SharedInfo * ActivityManager::sharedInfo() const
-{
-    return d->sharedInfo;
-}
-
-
-////////////////////////////////////////////////////////////////////////////////
-// ActivityManager_Basics.cpp
-////////////////////////////////////////////////////////////////////////////////
-
-
-#include "ActivityManager.h"
-#include "ActivityManager_p.h"
-#include "NepomukActivityManager.h"
-
-#include "jobs/encryption/Common.h"
 
-KConfigGroup ActivityManagerPrivate::activityIconsConfig()
+KConfigGroup Activities::Private::activityIconsConfig()
 {
     return KConfigGroup(&config, "activities-icons");
 }
 
-KConfigGroup ActivityManagerPrivate::activitiesConfig()
+KConfigGroup Activities::Private::activitiesConfig()
 {
     return KConfigGroup(&config, "activities");
 }
 
-KConfigGroup ActivityManagerPrivate::mainConfig()
+KConfigGroup Activities::Private::mainConfig()
 {
     return KConfigGroup(&config, "main");
 }
 
-KConfigGroup ActivityManagerPrivate::activitiesDesktopsConfig()
-{
-    return KConfigGroup(&config, "activitiesDesktops");
-}
-
-QString ActivityManagerPrivate::activityName(const QString & id)
+QString Activities::Private::activityName(const QString & id)
 {
     return activitiesConfig().readEntry(id, QString());
 }
 
-QString ActivityManagerPrivate::activityIcon(const QString & id)
+QString Activities::Private::activityIcon(const QString & id)
 {
     return activityIconsConfig().readEntry(id, QString());
 }
 
-void ActivityManagerPrivate::scheduleConfigSync(const bool shortInterval)
+void Activities::Private::scheduleConfigSync(const bool shortInterval)
 {
 #define SHORT_INTERVAL (5 * 1000)
 #define LONG_INTERVAL (2 * 60 * 1000)
@@ -642,83 +587,59 @@ void ActivityManagerPrivate::scheduleConfigSync(const bool \
shortInterval)  #undef LONG_INTERVAL
 }
 
-void ActivityManagerPrivate::configSync()
+void Activities::Private::configSync()
 {
     configSyncTimer.stop();
     config.sync();
 }
 
-void ActivityManager::Start()
-{
-    // doing absolutely nothing
-}
-
-void ActivityManager::Stop()
-{
-    d->configSync();
-    QCoreApplication::quit();
-}
-
-bool ActivityManager::IsFeatureOperational(const QString & feature) const
-{
-    if (feature == "activity/resource-linking") {
-        return NEPOMUK_PRESENT;
-    }
-
-    if (feature == "activity/encryption") {
-        return Jobs::Encryption::Common::isEnabled();
-    }
-
-    return false;
-}
-
-QStringList ActivityManager::ListActivities() const
+QStringList Activities::ListActivities() const
 {
     return d->activities.keys();
 }
 
-QStringList ActivityManager::ListActivities(int state) const
+QStringList Activities::ListActivities(int state) const
 {
     return d->activities.keys((State)state);
 }
 
-QString ActivityManager::ActivityName(const QString & id) const
+QString Activities::ActivityName(const QString & id) const
 {
     return d->activityName(id);
 }
 
-void ActivityManager::SetActivityName(const QString & id, const QString & name)
+void Activities::SetActivityName(const QString & id, const QString & name)
 {
     if (!d->activities.contains(id)) return;
 
     d->activitiesConfig().writeEntry(id, name);
 
-    EXEC_NEPOMUK( setActivityName(id, name) );
+    // EXEC_NEPOMUK( setActivityName(id, name) );
 
     d->scheduleConfigSync();
     emit ActivityChanged(id);
 }
 
-QString ActivityManager::ActivityDescription(const QString & id) const
+QString Activities::ActivityDescription(const QString & id) const
 {
     // This is not used anyway
     Q_UNUSED(id)
     return QString();
 }
 
-void ActivityManager::SetActivityDescription(const QString & id, const QString & \
description) +void Activities::SetActivityDescription(const QString & id, const \
QString & description)  {
     // This is not used anyway
     Q_UNUSED(id)
     Q_UNUSED(description)
 }
 
-QString ActivityManager::ActivityIcon(const QString & id) const
+QString Activities::ActivityIcon(const QString & id) const
 {
     return d->activityIcon(id);
 }
 
-void ActivityManager::SetActivityIcon(const QString & id, const QString & icon)
+void Activities::SetActivityIcon(const QString & id, const QString & icon)
 {
     if (!d->activities.contains(id)) return;
 
@@ -730,181 +651,10 @@ void ActivityManager::SetActivityIcon(const QString & id, \
const QString & icon)  emit ActivityChanged(id);
 }
 
-// static
-ActivityManager * ActivityManager::self()
-{
-    return static_cast<ActivityManager*>(kapp);
-}
-
-
-
-////////////////////////////////////////////////////////////////////////////////
-// ActivityManager_Resources.cpp
-////////////////////////////////////////////////////////////////////////////////
-
-
-#include "ActivityManager.h"
-#include "ActivityManager_p.h"
-#include "NepomukActivityManager.h"
-
-#include <KDebug>
-#include "EventProcessor.h"
-
-#ifdef HAVE_NEPOMUK
-#include "jobs/encryption/Common.h"
-#include "jobs/nepomuk/Move.h"
-#endif
-
-void ActivityManager::RegisterResourceEvent(QString application, uint _windowId,
-        const QString & uri, uint event, uint reason)
-{
-    if (event > Event::LastEventType || reason > Event::LastEventReason)
-        return;
-
-    if (uri.isEmpty() || application.isEmpty())
-        return;
-
-    // Dirty way to skip special web browser URIs
-    if (uri.startsWith(QLatin1String("about:")))
-        return;
-
-    // Dirty way to skip invalid URIs (needed for akregator)
-    QChar firstChar = uri[0];
-    if (
-            (firstChar < 'a' || firstChar > 'z') &&
-            (firstChar < 'A' || firstChar > 'Z')
-       ) return;
-
-    KUrl kuri(uri);
-    WId windowId = (WId) _windowId;
-
-    kDebug() << "New event on the horizon" << application << windowId << event << \
                uri;
-
-    EXEC_NEPOMUK( toRealUri(kuri) );
-
-    if (event == Event::Opened) {
-
-        // d->windows[windowId].resources << kuri;
-        // d->resources[kuri].activities << CurrentActivity();
-
-    } else if (event == Event::Closed) {
-
-        // TODO: Remove from d->resources if needed
-        // d->windows.remove(windowId);
-
-    }
-
-    EventProcessor::self()->addEvent(application, windowId,
-            kuri.url(), (Event::Type) event, (Event::Reason) reason);
-
-}
-
-
-void ActivityManager::RegisterResourceMimeType(const QString & uri, const QString & \
                mimetype)
-{
-    kDebug() << "Setting the mime for" << uri << "to be" << mimetype;
-    KUrl kuri(uri);
-
-    // d->resources[kuri].mimetype = mimetype;
-
-    EXEC_NEPOMUK( setResourceMimeType(KUrl(uri), mimetype) );
-}
-
-
-void ActivityManager::RegisterResourceTitle(const QString & uri, const QString & \
                title)
-{
-    // A dirty saninty check for the title
-    if (title.length() < 3) return;
-
-    kDebug() << "Setting the title for" << uri << "to be" << title << \
                title.length();
-    KUrl kuri(uri);
-
-    // d->resources[kuri].title = title;
-
-    EXEC_NEPOMUK( setResourceTitle(KUrl(uri), title) );
-}
-
-
-void ActivityManager::LinkResourceToActivity(const QString & uri, const QString & \
                _activity)
-{
-    #ifdef HAVE_NEPOMUK
-    const QString & activity = _activity.isEmpty() ? CurrentActivity() : _activity;
-
-    EXEC_NEPOMUK( linkResourceToActivity(KUrl(uri), activity) );
-
-    if (Jobs::Encryption::Common::isActivityEncrypted(activity)) {
-        Jobs::Nepomuk::move(activity, true, QStringList() << uri)
-            ->create(this)->start();
-    }
-    #endif
-}
-
-
-void ActivityManager::UnlinkResourceFromActivity(const QString & uri, const QString \
                & _activity)
-{
-    #ifdef HAVE_NEPOMUK
-    const QString & activity = _activity.isEmpty() ? CurrentActivity() : _activity;
-
-    EXEC_NEPOMUK( unlinkResourceFromActivity(KUrl(uri), activity) );
-
-    // if (Jobs::Encryption::Common::isActivityEncrypted(activity)) {
-    //     Jobs::Nepomuk::move(activity, true, QStringList() << uri)
-    //         ->create(this)->start();
-    // }
-    #endif
-}
-
-
-bool ActivityManager::IsResourceLinkedToActivity(const QString & uri, const QString \
                & _activity) const
-{
-    #ifdef HAVE_NEPOMUK
-    const QString & activity = _activity.isEmpty() ? CurrentActivity() : _activity;
-
-    return EXEC_NEPOMUK( isResourceLinkedToActivity(KUrl(uri), activity) );
-
-    #else
-    return false;
-    #endif
-}
-
-
-QStringList ActivityManager::ResourcesLinkedToActivity(const QString & activity) \
                const
-{
-    QStringList result;
-
-    foreach (const KUrl & uri, resourcesLinkedToActivity(activity.isEmpty() ? \
                CurrentActivity() : activity)) {
-        result << uri.url();
-    }
-
-    return result;
-}
-
-
-QList <KUrl> ActivityManager::resourcesLinkedToActivity(const QString & activity) \
                const
-{
-    if (NEPOMUK_PRESENT) {
-    #ifdef HAVE_NEPOMUK
-        return EXEC_NEPOMUK(resourcesLinkedToActivity(activity.isEmpty() ? \
                CurrentActivity() : activity));
-    #endif
-    } else return QList <KUrl>();
-}
-
-
-
-////////////////////////////////////////////////////////////////////////////////
-// ActivityManager_StartStop.cpp
-////////////////////////////////////////////////////////////////////////////////
-
-
-#include "ActivityManager.h"
-#include "ActivityManager_p.h"
-
-#include <QDBusInterface>
-#include <KDebug>
-
-void ActivityManagerPrivate::sessionServiceRegistered()
+void Activities::Private::sessionServiceRegistered()
 {
     delete ksmserverInterface;
+
     ksmserverInterface = new QDBusInterface("org.kde.ksmserver", "/KSMServer", \
"org.kde.KSMServerInterface");  if (ksmserverInterface->isValid()) {
         ksmserverInterface->setParent(this);
@@ -918,9 +668,10 @@ void ActivityManagerPrivate::sessionServiceRegistered()
     }
 }
 
-void ActivityManagerPrivate::screensaverServiceRegistered()
+void Activities::Private::screensaverServiceRegistered()
 {
     delete screensaverInterface;
+
     screensaverInterface = new QDBusInterface("org.freedesktop.ScreenSaver", \
"/ScreenSaver", "org.freedesktop.ScreenSaver");  if (screensaverInterface->isValid()) \
{  screensaverInterface->setParent(this);
@@ -928,31 +679,28 @@ void ActivityManagerPrivate::screensaverServiceRegistered()
     } else {
         delete screensaverInterface;
         screensaverInterface = nullptr;
-        //kDebug() << "couldn't connect to screensaver!";
     }
 }
 
-void ActivityManagerPrivate::setActivityState(const QString & id, \
ActivityManager::State state) +void Activities::Private::setActivityState(const \
QString & id, Activities::State state)  {
     if (activities[id] == state) return;
 
     // kDebug() << "Set the state of" << id << "to" << state;
 
-    /**
-     * Treating 'Starting' as 'Running', and 'Stopping' as 'Stopped'
-     * as far as the config file is concerned
-     */
+    // Treating 'Starting' as 'Running', and 'Stopping' as 'Stopped'
+    // as far as the config file is concerned
     bool configNeedsUpdating = ((activities[id] & 4) != (state & 4));
 
     activities[id] = state;
 
     switch (state) {
-        case ActivityManager::Running:
+        case Activities::Running:
             // kDebug() << "sending ActivityStarted signal";
             emit q->ActivityStarted(id);
             break;
 
-        case ActivityManager::Stopped:
+        case Activities::Stopped:
             // kDebug() << "sending ActivityStopped signal";
             emit q->ActivityStopped(id);
             break;
@@ -966,15 +714,15 @@ void ActivityManagerPrivate::setActivityState(const QString & \
id, ActivityManage  
     if (configNeedsUpdating) {
         mainConfig().writeEntry("runningActivities",
-                activities.keys(ActivityManager::Running) +
-                activities.keys(ActivityManager::Starting));
+                activities.keys(Activities::Running) +
+                activities.keys(Activities::Starting));
         scheduleConfigSync();
     }
 }
 
-void ActivityManagerPrivate::ensureCurrentActivityIsRunning()
+void Activities::Private::ensureCurrentActivityIsRunning()
 {
-    QStringList runningActivities = q->ListActivities(ActivityManager::Running);
+    QStringList runningActivities = q->ListActivities(Activities::Running);
 
     if (!runningActivities.contains(currentActivity)) {
         if (runningActivities.size() > 0) {
@@ -988,7 +736,7 @@ void ActivityManagerPrivate::ensureCurrentActivityIsRunning()
 
 // Main
 
-void ActivityManager::StartActivity(const QString & id)
+void Activities::StartActivity(const QString & id)
 {
     // kDebug() << id;
 
@@ -1007,10 +755,10 @@ void ActivityManager::StartActivity(const QString & id)
     d->setActivityState(id, Starting);
 
     //ugly hack to avoid dbus deadlocks
-    QMetaObject::invokeMethod(d, "reallyStartActivity", Qt::QueuedConnection, \
Q_ARG(QString, id)); +    QMetaObject::invokeMethod(d.get(), "reallyStartActivity", \
Qt::QueuedConnection, Q_ARG(QString, id));  }
 
-void ActivityManagerPrivate::reallyStartActivity(const QString & id)
+void Activities::Private::reallyStartActivity(const QString & id)
 {
     bool called = false;
     // start the starting :)
@@ -1026,7 +774,7 @@ void ActivityManagerPrivate::reallyStartActivity(const QString & \
id)  called = true;
             } else {
                 // kDebug() << "call returned false; probably ksmserver is busy";
-                setActivityState(transitioningActivity, ActivityManager::Stopped);
+                setActivityState(transitioningActivity, Activities::Stopped);
                 transitioningActivity.clear();
                 return; //assume we're mid-logout and just don't touch anything
             }
@@ -1043,17 +791,17 @@ void ActivityManagerPrivate::reallyStartActivity(const QString \
& id)  configSync(); //force immediate sync
 }
 
-void ActivityManagerPrivate::startCompleted()
+void Activities::Private::startCompleted()
 {
     if (transitioningActivity.isEmpty()) {
         // kDebug() << "huh?";
         return;
     }
-    setActivityState(transitioningActivity, ActivityManager::Running);
+    setActivityState(transitioningActivity, Activities::Running);
     transitioningActivity.clear();
 }
 
-void ActivityManager::StopActivity(const QString & id)
+void Activities::StopActivity(const QString & id)
 {
     // kDebug() << id;
 
@@ -1072,10 +820,10 @@ void ActivityManager::StopActivity(const QString & id)
     d->setActivityState(id, Stopping);
 
     //ugly hack to avoid dbus deadlocks
-    QMetaObject::invokeMethod(d, "reallyStopActivity", Qt::QueuedConnection, \
Q_ARG(QString, id)); +    QMetaObject::invokeMethod(d.get(), "reallyStopActivity", \
Qt::QueuedConnection, Q_ARG(QString, id));  }
 
-void ActivityManagerPrivate::reallyStopActivity(const QString & id)
+void Activities::Private::reallyStopActivity(const QString & id)
 {
     bool called = false;
     // start the stopping :)
@@ -1107,13 +855,13 @@ void ActivityManagerPrivate::reallyStopActivity(const QString \
& id)  }
 }
 
-void ActivityManagerPrivate::stopCompleted()
+void Activities::Private::stopCompleted()
 {
     if (transitioningActivity.isEmpty()) {
         // kDebug() << "huh?";
         return;
     }
-    setActivityState(transitioningActivity, ActivityManager::Stopped);
+    setActivityState(transitioningActivity, Activities::Stopped);
     if (currentActivity == transitioningActivity) {
         ensureCurrentActivityIsRunning();
     }
@@ -1121,28 +869,22 @@ void ActivityManagerPrivate::stopCompleted()
     configSync(); //force immediate sync
 }
 
-void ActivityManagerPrivate::stopCancelled()
+void Activities::Private::stopCancelled()
 {
     if (transitioningActivity.isEmpty()) {
         // kDebug() << "huh?";
         return;
     }
-    setActivityState(transitioningActivity, ActivityManager::Running);
+    setActivityState(transitioningActivity, Activities::Running);
     transitioningActivity.clear();
 }
 
-int ActivityManager::ActivityState(const QString & id) const
+int Activities::ActivityState(const QString & id) const
 {
-    //kDebug() << id << "- is it in" << d->activities << "?";
-    if (!d->activities.contains(id)) {
-        return Invalid;
-    } else {
-        // kDebug() << "state of" << id << "is" << d->activities[id];
-        return d->activities[id];
-    }
+    return d->activities.contains(id) ? d->activities[id] : Invalid;
 }
 
-void ActivityManagerPrivate::screenLockStateChanged(const bool locked)
+void Activities::Private::screenLockStateChanged(const bool locked)
 {
     if (locked) {
         // already in limbo state.
@@ -1150,7 +892,9 @@ void ActivityManagerPrivate::screenLockStateChanged(const bool \
locked)  return;
         }
 
-        if (q->IsActivityEncrypted(currentActivity)) {
+        using namespace Jobs::Encryption::Common;
+
+        if (isActivityEncrypted(currentActivity)) {
             currentActivityBeforeScreenLock = currentActivity;
             setCurrentActivity(QString());
         }
@@ -1162,57 +906,3 @@ void ActivityManagerPrivate::screenLockStateChanged(const bool \
locked)  }
 }
 
-
-////////////////////////////////////////////////////////////////////////////////
-// ActivityManager_Windowing.cpp
-////////////////////////////////////////////////////////////////////////////////
-
-
-#include "ActivityManager.h"
-#include "ActivityManager_p.h"
-
-#include <KWindowSystem>
-
-#include "EventProcessor.h"
-
-// Private
-
-// copied from kdelibs\kdeui\notifications\kstatusnotifieritemdbus_p.cpp
-// if there is a common place for such definitions please move
-#ifdef Q_OS_WIN64 // krazy:skip
-__inline int toInt(WId wid)
-{
-    return (int)((__int64)wid);
-}
-
-#else
-__inline int toInt(WId wid)
-{
-    return (int)wid;
-}
-#endif
-
-void ActivityManagerPrivate::windowClosed(WId windowId)
-{
-    Q_UNUSED(windowId)
-    // kDebug() << "Window closed..." << windowId
-    //          << "one of ours?" << windows.contains(windowId);
-
-    // if (!windows.contains(windowId)) {
-    //     return;
-    // }
-
-    // foreach (const KUrl & uri, windows[windowId].resources) {
-    //     q->RegisterResourceEvent(windows[windowId].application,
-    //             toInt(windowId), uri.url(), Event::Closed, \
                resources[uri].reason);
-    // }
-}
-
-void ActivityManagerPrivate::activeWindowChanged(WId windowId)
-{
-    Q_UNUSED(windowId)
-    // kDebug() << "Window focussed..." << windowId
-    //          << "one of ours?" << windows.contains(windowId);
-
-}
-
diff --git a/service/Activities.h b/service/Activities.h
new file mode 100644
index 0000000..3d88ece
--- /dev/null
+++ b/service/Activities.h
@@ -0,0 +1,217 @@
+/*
+ *   Copyright (C) 2010, 2011, 2012 Ivan Cukic <ivan.cukic(at)kde.org>
+ *
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License version 2,
+ *   or (at your option) any later version, as published by the Free
+ *   Software Foundation
+ *
+ *   This program 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 General Public License for more details
+ *
+ *   You should have received a copy of the GNU General Public
+ *   License along with this program; if not, write to the
+ *   Free Software Foundation, Inc.,
+ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+
+#ifndef ACTIVITY_MANAGER_H
+#define ACTIVITY_MANAGER_H
+
+#include <QString>
+#include <QStringList>
+
+#include <KUrl>
+
+#include <utils/d_ptr.h>
+
+/**
+ * Service for tracking the user actions and managing the
+ * activities
+ */
+class Activities: public QObject {
+    Q_OBJECT
+    Q_CLASSINFO("D-Bus Interface", "org.kde.Activities")
+    Q_PROPERTY(QString CurrentActivity READ CurrentActivity WRITE SetCurrentActivity \
NOTIFY CurrentActivityChanged) +
+public:
+    /**
+     * Activity state
+     * @note: Do not change the values, needed for bit-operations
+     */
+    enum State {
+        Invalid  = 0,
+        Running  = 2,
+        Starting = 3,
+        Stopped  = 4,
+        Stopping = 5
+    };
+
+    /**
+     * The event type
+     */
+    enum EventType {
+        Accessed = 1,
+        Opened = 2,
+        Modified = 3,
+        Closed = 4,
+        FocussedIn = 5,
+        FocussedOut = 6
+    };
+
+    /**
+     * Creates new Activities
+     */
+    Activities();
+
+    /**
+     * Destroys this interface
+     */
+    virtual ~Activities();
+
+// workspace activities control
+public Q_SLOTS:
+    /**
+     * @returns the id of the current activity, empty string if none
+     */
+    QString CurrentActivity() const;
+
+    /**
+     * Sets the current activity
+     * @param id id of the activity to make current
+     */
+    bool SetCurrentActivity(const QString & id);
+
+    /**
+     * Adds a new activity
+     * @param name name of the activity
+     * @returns id of the newly created activity
+     */
+    QString AddActivity(const QString & name);
+
+    /**
+     * Starts the specified activity
+     * @param id id of the activity to stash
+     */
+    void StartActivity(const QString & id);
+
+    /**
+     * Stops the specified activity
+     * @param id id of the activity to stash
+     */
+    void StopActivity(const QString & id);
+
+    /**
+     * @returns the state of the activity
+     * @param id id of the activity
+     */
+    int ActivityState(const QString & id) const;
+
+    /**
+     * Removes the specified activity
+     * @param id id of the activity to delete
+     */
+    void RemoveActivity(const QString & id);
+
+    /**
+     * @returns the list of all existing activities
+     */
+    QStringList ListActivities() const;
+
+    /**
+     * @returns the list of activities with the specified state
+     * @param state state
+     */
+    QStringList ListActivities(int state) const;
+
+    /**
+     * @returns the name of the specified activity
+     * @param id id of the activity
+     */
+    QString ActivityName(const QString & id) const;
+
+    /**
+     * Sets the name of the specified activity
+     * @param id id of the activity
+     * @param name name to be set
+     */
+    void SetActivityName(const QString & id, const QString & name);
+
+    /**
+     * @returns the description of the specified activity
+     * @param id id of the activity
+     */
+    QString ActivityDescription(const QString & id) const;
+
+    /**
+     * Sets the description of the specified activity
+     * @param id id of the activity
+     * @param description description to be set
+     */
+    void SetActivityDescription(const QString & id, const QString & description);
+
+    /**
+     * @returns the icon of the specified activity
+     * @param id id of the activity
+     */
+    QString ActivityIcon(const QString & id) const;
+
+    /**
+     * Sets the icon of the specified activity
+     * @param id id of the activity
+     * @param icon icon to be set
+     */
+    void SetActivityIcon(const QString & id, const QString & icon);
+
+
+Q_SIGNALS:
+    /**
+     * This signal is emitted when the global
+     * activity is changed
+     * @param id id of the new current activity
+     */
+    void CurrentActivityChanged(const QString & id);
+
+    /**
+     * This signal is emitted when a new activity is created
+     * @param id id of the activity
+     */
+    void ActivityAdded(const QString & id);
+
+    /**
+     * This signal is emitted when an activity is started
+     * @param id id of the activity
+     */
+    void ActivityStarted(const QString & id);
+
+    /**
+     * This signal is emitted when an activity is stashed
+     * @param id id of the activity
+     */
+    void ActivityStopped(const QString & id);
+
+    /**
+     * This signal is emitted when an activity is deleted
+     * @param id id of the activity
+     */
+    void ActivityRemoved(const QString & id);
+
+    /**
+     * Emitted when an activity name, description and/or icon are changed
+     * @param id id of the changed activity
+     */
+    void ActivityChanged(const QString & id);
+
+    /**
+     * Emitted when the state of activity is changed
+     */
+    void ActivityStateChanged(const QString & id, int state);
+
+
+private:
+    D_PTR;
+};
+
+#endif // ACTIVITY_MANAGER_H
diff --git a/service/ActivityManager_p.h b/service/Activities_p.h
similarity index 81%
copy from service/ActivityManager_p.h
copy to service/Activities_p.h
index 34b09b3..c0f2a6e 100644
--- a/service/ActivityManager_p.h
+++ b/service/Activities_p.h
@@ -28,38 +28,29 @@
 #include <KConfigGroup>
 #include <KUrl>
 
-#include "ActivityManager.h"
+#include "Activities.h"
 #include "Event.h"
-#include "SharedInfo.h"
 
 #include <config-features.h>
 
 #ifdef HAVE_NEPOMUK
     #include <Nepomuk/ResourceManager>
     #include <Nepomuk/Resource>
-
-    #define EXEC_NEPOMUK(A) NepomukActivityManager::self()->A
-    #define NEPOMUK_PRESENT NepomukActivityManager::self()->initialized()
-
-#else
-    #define EXEC_NEPOMUK(A) // nepomuk disabled //
-    #define NEPOMUK_PRESENT false
-
 #endif
 
 class QDBusInterface;
 class KJob;
 
-class ActivityManagerPrivate: public QObject {
+class Activities::Private: public QObject {
     Q_OBJECT
 
 public:
-    ActivityManagerPrivate(ActivityManager * parent
+    Private(Activities * parent
             // ,
             // QHash < WId, SharedInfo::WindowData > & _windows,
             // QHash < KUrl, SharedInfo::ResourceData > & _resources
         );
-    ~ActivityManagerPrivate();
+    ~Private();
 
     void addRunningActivity(const QString & id);
     void removeRunningActivity(const QString & id);
@@ -70,8 +61,8 @@ public Q_SLOTS:
     bool setCurrentActivity(const QString & id);
 
 public:
-    void setActivityState(const QString & id, ActivityManager::State state);
-    QHash < QString, ActivityManager::State > activities;
+    void setActivityState(const QString & id, Activities::State state);
+    QHash < QString, Activities::State > activities;
 
     // Current activity
     QString currentActivity;
@@ -90,7 +81,6 @@ public:
 public:
     void initConifg();
 
-    KConfigGroup activitiesDesktopsConfig();
     KConfigGroup activitiesConfig();
     KConfigGroup activityIconsConfig();
     KConfigGroup mainConfig();
@@ -102,9 +92,6 @@ public Q_SLOTS:
     void scheduleConfigSync(const bool shortInterval = false);
     void configSync();
 
-    void windowClosed(WId windowId);
-    void activeWindowChanged(WId windowId);
-
     void startCompleted();
     void stopCompleted();
     void stopCancelled();
@@ -124,11 +111,8 @@ public Q_SLOTS:
     void screenLockStateChanged(const bool locked);
     void checkForSetCurrentActivityError(KJob * job);
 
-public:
-    SharedInfo * sharedInfo;
-
 private:
-    ActivityManager * const q;
+    Activities * const q;
 
     QDBusInterface * ksmserverInterface; // just keeping it for the signals
     QDBusInterface * screensaverInterface; // just keeping it for the signals
diff --git a/service/main.cpp b/service/Application.cpp
similarity index 72%
rename from service/main.cpp
rename to service/Application.cpp
index 1591dd1..4e76217 100644
--- a/service/main.cpp
+++ b/service/Application.cpp
@@ -17,20 +17,53 @@
  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 
-#include <ActivityManager.h>
+#include <Application.h>
 
 #include <QDebug>
-#include <KCrash>
+#include <QDBusConnection>
 
+#include <KCrash>
 #include <KAboutData>
 #include <KCmdLineArgs>
 
+#include <Activities.h>
+#include <Resources.h>
+
 #include <signal.h>
 #include <stdlib.h>
 
 #include "jobs/encryption/Common.h"
 
-#include <config-features.h>
+#include <utils/nullptr.h>
+
+Application::Application()
+    : KApplication(),
+      resources(new Resources()),
+      activities(new Activities())
+{
+    // TODO: We should move away from any GUI code
+    setQuitOnLastWindowClosed(false);
+
+    QDBusConnection dbus = QDBusConnection::sessionBus();
+
+    if (!dbus.registerService("org.kde.ActivityManager")) {
+        qDebug() << "There can be only one running instance of Activity Manager";
+        exit(0);
+    }
+
+    // KAMD is a daemon, if it crashes it is not a problem as
+    // long as it restarts properly
+    // NOTE: We have a custom crash handler
+    KCrash::setFlags(KCrash::AutoRestart);
+
+}
+
+Application::~Application()
+{
+}
+
+
+// Leaving object oriented world :)
 
 static void initSignalCatching();
 
@@ -44,7 +77,7 @@ int main(int argc, char ** argv)
 
     KCmdLineArgs::init(argc, argv, &about);
 
-    ActivityManager application;
+    Application application;
 
     initSignalCatching();
 
@@ -54,7 +87,8 @@ int main(int argc, char ** argv)
 // Signal handling
 static void signalHandler(int sig)
 {
-    Jobs::Encryption::Common::unmountAll();
+    // TODO:
+    // Jobs::Encryption::Common::unmountAll();
 
     // something (probably ksmserver) has asked us to terminate.
     // If it is really ksmserver then the user is probably logging out, so we
@@ -62,7 +96,7 @@ static void signalHandler(int sig)
     if (sig == SIGTERM) {
         //qDebug() << "signalHandler(SIGTERM): stopping ActivityManager\n";
 
-        ActivityManager::self()->Stop();
+        // ActivityManager::self()->Stop();
     }
 
     // If we have crashed, then restart
diff --git a/service/jobs/Job.h b/service/Application.h
similarity index 70%
copy from service/jobs/Job.h
copy to service/Application.h
index 6e1cae1..30d40b9 100644
--- a/service/jobs/Job.h
+++ b/service/Application.h
@@ -17,31 +17,26 @@
  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 
-#ifndef JOBS_JOB_H
-#define JOBS_JOB_H
+#ifndef APPLICATION_H
+#define APPLICATION_H
 
-#include <KJob>
-#include <QString>
-#include <Utils.h>
+#include <KApplication>
+#include <memory>
+
+class Resources;
+class Activities;
 
 /**
- * Job
+ * Application
  */
-class Job: public KJob {
-    Q_OBJECT
-
+class Application: public KApplication {
 public:
-    Job(QObject * parent = nullptr);
-    virtual ~Job();
-
-    virtual void init();
-
-    static QObject * global();
+    Application();
+    virtual ~Application();
 
 private:
-    class Private;
-    Private * const d;
+    const std::unique_ptr < Resources > resources;
+    const std::unique_ptr < Activities > activities;
 };
 
-#endif // JOBS_JOB_H
-
+#endif // APPLICATION_H
diff --git a/service/CMakeLists.txt b/service/CMakeLists.txt
index 2973211..0153de0 100644
--- a/service/CMakeLists.txt
+++ b/service/CMakeLists.txt
@@ -1,83 +1,86 @@
 project(ActivityManager)
 
-# Properties
+# Build options
 
-define_property(GLOBAL PROPERTY KACTIVITIES_BUILD_NEPOMUK_PLUGIN
+define_property (GLOBAL PROPERTY KACTIVITIES_BUILD_NEPOMUK_PLUGIN
     BRIEF_DOCS "Should the nepomuk plugin be built?"
-    FULL_DOCS "The Nepomuk plugin is deprecated and replaced by sqlite
-    plugin which uses sqlite for statistics processing. If Nepomuk is enabled,
-    the sqlite plugin will export important data to it.")
+    FULL_DOCS  "The Nepomuk plugin is deprecated and replaced by sqlite
+                plugin which uses sqlite for statistics processing. If
+                Nepomuk is enabled, the sqlite plugin will export important
+                data to it."
+    )
 
-define_property(GLOBAL PROPERTY KACTIVITIES_BUILD_DUMMY_PLUGIN
+define_property (GLOBAL PROPERTY KACTIVITIES_BUILD_DUMMY_PLUGIN
     BRIEF_DOCS "Should the dummy plugin be built?"
-    FULL_DOCS "The dummy plugin does nothing. Enable only if you want to test
-    the plugin overriding mechanisms.")
+    FULL_DOCS  "The dummy plugin does nothing. Enable only if you want to test
+                the plugin overriding mechanisms."
+    )
 
 
-# C++0x
+# Testing for C++0x/C++11 features
 
-set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../cmake/modules \
${CMAKE_MODULE_PATH}) +set (CMAKE_MODULE_PATH \
${CMAKE_CURRENT_SOURCE_DIR}/../cmake/modules ${CMAKE_MODULE_PATH})  
-string(COMPARE EQUAL "${CMAKE_CXX_COMPILER_ID}" "Clang" CMAKE_COMPILER_IS_CLANG)
+string (COMPARE EQUAL "${CMAKE_CXX_COMPILER_ID}" "Clang" CMAKE_COMPILER_IS_CLANG)
 
-if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANG)
-    message(STATUS "We have GNU or Clang, adding -std=c++0x flag")
-    add_definitions("-std=c++0x")
-    set(ADDITIONAL_DEFINITIONS "-std=c++0x")
-endif(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANG)
+if (CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANG)
+    message (STATUS "We have GNU or Clang, adding -std=c++0x flag")
+    add_definitions ("-std=c++0x")
+    set (ADDITIONAL_DEFINITIONS "-std=c++0x")
+endif ()
 
 include(CheckCxxFeatures)
 
-CXX_CHECK_FEATURE("c++11" "auto"          "N2546" HAVE_CXX11_AUTO        \
                "${ADDITIONAL_DEFINITIONS}")
-CXX_CHECK_FEATURE("c++11" "nullptr"       "N2431" HAVE_CXX11_NULLPTR     \
                "${ADDITIONAL_DEFINITIONS}")
-CXX_CHECK_FEATURE("c++11" "lambda"        "N2927" HAVE_CXX11_LAMBDA      \
                "${ADDITIONAL_DEFINITIONS}")
-CXX_CHECK_FEATURE("c++11" "override"      "N3206" HAVE_CXX11_OVERRIDE    \
                "${ADDITIONAL_DEFINITIONS}")
-CXX_CHECK_FEATURE("c++11" "unique_ptr"    "none"  HAVE_CXX11_UNIQUE_PTR  \
                "${ADDITIONAL_DEFINITIONS}")
-CXX_CHECK_FEATURE("c++"   "override-attr" "none"  HAVE_CXX_OVERRIDE_ATTR \
"${ADDITIONAL_DEFINITIONS}") +CXX_CHECK_FEATURE ("c++11" "auto"          "N2546" \
HAVE_CXX11_AUTO        "${ADDITIONAL_DEFINITIONS}") +CXX_CHECK_FEATURE ("c++11" \
"nullptr"       "N2431" HAVE_CXX11_NULLPTR     "${ADDITIONAL_DEFINITIONS}") \
+CXX_CHECK_FEATURE ("c++11" "lambda"        "N2927" HAVE_CXX11_LAMBDA      \
"${ADDITIONAL_DEFINITIONS}") +CXX_CHECK_FEATURE ("c++11" "override"      "N3206" \
HAVE_CXX11_OVERRIDE    "${ADDITIONAL_DEFINITIONS}") +CXX_CHECK_FEATURE ("c++11" \
"unique_ptr"    "none"  HAVE_CXX11_UNIQUE_PTR  "${ADDITIONAL_DEFINITIONS}") \
+CXX_CHECK_FEATURE ("c++"   "override-attr" "none"  HAVE_CXX_OVERRIDE_ATTR \
"${ADDITIONAL_DEFINITIONS}")  
 if (NOT HAVE_CXX11_AUTO OR NOT HAVE_CXX11_LAMBDA)
-    message(FATAL_ERROR "You need a compiler that supports at least the following \
C++11 features: auto, lambda") +    message (FATAL_ERROR "You need a compiler that \
supports at least the following C++11 features: auto, lambda")  endif ()
 
 # General
 
-set(ADDITIONAL_LINK_LIBS)
+set (ADDITIONAL_LINK_LIBS)
 
 # Checking for Nepomuk
 
-macro_optional_find_package(Nepomuk)
-macro_log_feature(
-        Nepomuk_FOUND
-        "Nepomuk" "Nepomuk" "http://www.kde.org" FALSE ""
-        "STRONGLY_RECOMMENDED: Nepomuk is needed for some activity-related info")
+macro_optional_find_package (Nepomuk)
+macro_log_feature (Nepomuk_FOUND
+    "Nepomuk" "Nepomuk" "http://www.kde.org" FALSE ""
+    "STRONGLY_RECOMMENDED: Nepomuk is needed for some activity-related info"
+    )
+
+set (sdo_SRCS)
 
-set(sdo_SRCS "")
+if (Nepomuk_FOUND)
+    set (HAVE_NEPOMUK 1)
 
-if(Nepomuk_FOUND)
-    set(HAVE_NEPOMUK 1)
-    include_directories(${SOPRANO_INCLUDE_DIR})
-    set(ADDITIONAL_LINK_LIBS
+    include_directories (${SOPRANO_INCLUDE_DIR})
+    set (ADDITIONAL_LINK_LIBS
         ${ADDITIONAL_LINK_LIBS}
         ${NEPOMUK_LIBRARIES}
         ${NEPOMUK_QUERY_LIBRARIES}
         ${SOPRANO_LIBRARIES}
-    )
+        )
 
-    soprano_add_ontology(
-        sdo_SRCS
+    soprano_add_ontology (sdo_SRCS
         ${CMAKE_SOURCE_DIR}/ontologies/kao.trig
         "KAO" "Nepomuk::Vocabulary" "trig"
-    )
+        )
 
-endif(Nepomuk_FOUND)
+endif ()
 
 # config file
 
-configure_file(config-features.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-features.h \
) +configure_file (config-features.h.cmake \
${CMAKE_CURRENT_BINARY_DIR}/config-features.h)  
 # Standard stuff
 
-include_directories(
+include_directories (
     ${CMAKE_SOURCE_DIR}
     ${CMAKE_BINARY_DIR}
     ${CMAKE_CURRENT_SOURCE_DIR}
@@ -85,17 +88,25 @@ include_directories(
     ${KDE4_INCLUDES}
     )
 
-# add_subdirectory(plugins)
-add_subdirectory(ui/plugins)
+# add_subdirectory (plugins)
+# add_subdirectory (ui/plugins)
+
+set (activity_manager_SRCS
+    Application.cpp
+
+    Activities.cpp
+    Resources.cpp
 
-set(activity_manager_SRCS
-    ActivityManager.cpp
     NepomukActivityManager.cpp
-    EventProcessor.cpp
-    Plugin.cpp
+
     Event.cpp
-    SharedInfo.cpp
-    main.cpp
+
+    #    ActivityManager.cpp
+    #    NepomukActivityManager.cpp
+    #    EventProcessor.cpp
+    #    Plugin.cpp
+    #    Event.cpp
+    #    SharedInfo.cpp
 
     jobs/Job.cpp
     jobs/JobFactory.cpp
@@ -122,45 +133,58 @@ set(activity_manager_SRCS
 
     ui/UiHandler.cpp
     ui/Ui.cpp
+
     ${sdo_SRCS}
     )
 
-if(Nepomuk_FOUND)
-    set(activity_manager_SRCS
-        ${activity_manager_SRCS}
-        jobs/nepomuk/Move.cpp
-        )
-endif(Nepomuk_FOUND)
+# if (Nepomuk_FOUND)
+#     set(activity_manager_SRCS
+#         ${activity_manager_SRCS}
+#         jobs/nepomuk/Move.cpp
+#         )
+# endif ()
+
+# qt4_add_dbus_adaptor (activity_manager_SRCS
+#     org.kde.ActivityManager.xml
+#     ActivityManager.h ActivityManager
+#     )
+
+qt4_add_dbus_adaptor (activity_manager_SRCS
+    dbus/org.kde.ActivityManager.Activities.xml
+    Activities.h Activities
+    )
 
-qt4_add_dbus_adaptor(
-    activity_manager_SRCS org.kde.ActivityManager.xml
-    ActivityManager.h ActivityManager
+qt4_add_dbus_adaptor (activity_manager_SRCS
+    dbus/org.kde.ActivityManager.Resources.xml
+    Resources.h Resources
     )
 
-kde4_add_executable(activity-manager ${activity_manager_SRCS})
+kde4_add_executable (activity-manager ${activity_manager_SRCS})
 
-target_link_libraries(
-    activity-manager
+target_link_libraries (activity-manager
     ${KDE4_KDECORE_LIBS}
     ${KDE4_KDEUI_LIBS} # TODO: Remove kdeui
     ${KDE4_KIO_LIBS}   # TODO: Remove kio
     ${ADDITIONAL_LINK_LIBS}
     )
 
-set_target_properties(activity-manager PROPERTIES OUTPUT_NAME kactivitymanagerd)
+set_target_properties (activity-manager
+    PROPERTIES OUTPUT_NAME kactivitymanagerd
+    )
 
 ########### install application ###############
 
-install(
-    FILES kactivitymanagerd.desktop DESTINATION ${SERVICES_INSTALL_DIR}
+install (FILES
+    files/kactivitymanagerd.desktop
+    DESTINATION ${SERVICES_INSTALL_DIR}
     )
 
-install(
-    TARGETS activity-manager ${INSTALL_TARGETS_DEFAULT_ARGS}
+install (TARGETS
+    activity-manager ${INSTALL_TARGETS_DEFAULT_ARGS}
     )
 
-install(FILES
-    activitymanager-plugin.desktop
+install (FILES
+    files/activitymanager-plugin.desktop
     DESTINATION ${SERVICETYPES_INSTALL_DIR}
     )
 
diff --git a/service/NepomukActivityManager.cpp b/service/NepomukActivityManager.cpp
index ddac951..03867bf 100644
--- a/service/NepomukActivityManager.cpp
+++ b/service/NepomukActivityManager.cpp
@@ -45,6 +45,9 @@
 #include <QDBusConnection>
 #include <QDBusConnectionInterface>
 
+#include <utils/nullptr.h>
+
+// TODO: Move into a plugin
 // The activities KIO works only if nepomuk is present, so we can
 // freely send the change event here
 #include <KDirNotify>
diff --git a/service/NepomukActivityManager.h b/service/NepomukActivityManager.h
index 0c08068..cf5155b 100644
--- a/service/NepomukActivityManager.h
+++ b/service/NepomukActivityManager.h
@@ -29,6 +29,11 @@
 #    include <Nepomuk/Vocabulary/NIE>
 #    include <Nepomuk/Vocabulary/NFO>
 #    include "kao.h"
+#    define EXEC_NEPOMUK(A) NepomukActivityManager::self()->A
+#    define NEPOMUK_PRESENT NepomukActivityManager::self()->initialized()
+#else
+#    define EXEC_NEPOMUK(A) // nepomuk disabled //
+#    define NEPOMUK_PRESENT false
 #endif
 
 #include <QObject>
diff --git a/service/Resources.cpp b/service/Resources.cpp
new file mode 100644
index 0000000..9d6abab
--- /dev/null
+++ b/service/Resources.cpp
@@ -0,0 +1,284 @@
+/*
+ *   Copyright (C) 2010, 2011, 2012 Ivan Cukic <ivan.cukic(at)kde.org>
+ *
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License version 2,
+ *   or (at your option) any later version, as published by the Free
+ *   Software Foundation
+ *
+ *   This program 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 General Public License for more details
+ *
+ *   You should have received a copy of the GNU General Public
+ *   License along with this program; if not, write to the
+ *   Free Software Foundation, Inc.,
+ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+
+#include "Resources.h"
+#include "resourcesadaptor.h"
+
+#include <QDBusConnection>
+#include <QDateTime>
+#include <QList>
+#include <QThread>
+#include <QMutex>
+#include <QMutexLocker>
+
+#include <KUrl>
+#include <KDebug>
+
+#include <NepomukActivityManager.h>
+
+#include <time.h>
+
+#include "common.h"
+
+#include <utils/d_ptr_implementation.h>
+
+// TODO
+QString CurrentActivity() { return QString(); }
+
+// Convenience functions that check whether the proper activity id is passed
+// and invokes the desired lambda/functor on that value is nepomuk is present
+template <typename Result, typename Function>
+static Result doWithNepomukForActivity(const QString & _activity, Function doWhat, \
Result noNepomukResult) { +    #ifdef HAVE_NEPOMUK
+        if (NEPOMUK_PRESENT) {
+            const QString & activity = _activity.isEmpty() ? CurrentActivity() : \
_activity; +            return doWhat(activity);
+
+        } else return noNepomukResult;
+
+    #else
+        Q_UNUSED(_activity)
+        Q_UNUSED(doWhat)
+        return noNepomukResult;
+
+    #endif
+}
+
+template <typename Function>
+static void doWithNepomukForActivity(const QString & _activity, Function doWhat) {
+    #ifdef HAVE_NEPOMUK
+        if (NEPOMUK_PRESENT) {
+            const QString & activity = _activity.isEmpty() ? CurrentActivity() : \
_activity; +            doWhat(activity);
+        }
+    #endif
+}
+
+class Resources::Private: public QThread {
+public:
+    Private(Resources * parent)
+        : QThread(parent), q(parent)
+    {
+    }
+
+    EventList events;
+    QMutex events_mutex;
+
+    void run()
+    {
+        forever {
+            // initial delay before processing the events
+            sleep(5);
+
+            EventList currentEvents;
+
+            {
+                QMutexLocker locker(& events_mutex);
+
+                if (events.count() == 0) {
+                    // kDebug() << "No more events to process, exiting.";
+                    return;
+                }
+
+                currentEvents = events;
+                events.clear();
+            }
+
+            emit q->ProcessedResourceEvents(currentEvents);
+        }
+    }
+
+    void addEvent(const QString & application, WId wid, const QString & uri,
+                int type, int reason)
+    {
+        Event newEvent(application, wid, uri, type, reason);
+        addEvent(newEvent);
+    }
+
+    void addEvent(const Event & newEvent)
+    {
+        // Passing the events to the plugins that want them immediately
+        emit q->RegisteredResourceEvent(newEvent);
+
+        // And now, for something completely delayed
+        {
+            QMutexLocker locker(& events_mutex);
+
+            // Deleting the accessed events if we have other types of events
+            // with the same parameters
+            // TODO: Filter out a bit more
+            if (newEvent.type != Event::Accessed) {
+                foreach (const Event & event, events) {
+                    if (event.type == Event::Accessed && event.uri == newEvent.uri
+                            && event.application == newEvent.application) {
+                        // Accessed events are of a lower priority
+                        // then the other ones
+                        if (newEvent.type == Event::Accessed) {
+                            events.removeAll(newEvent);
+                        }
+                    }
+                }
+            }
+
+            events.append(newEvent);
+        }
+
+        start();
+    }
+
+    QList <KUrl> resourcesLinkedToActivity(const QString & activity) const
+    {
+        return doWithNepomukForActivity(activity, [] (const QString & activity)
+            {
+                return EXEC_NEPOMUK(resourcesLinkedToActivity(activity));
+            },
+            QList<KUrl>()
+        );
+    }
+
+private:
+    Resources * const q;
+};
+
+
+Resources::Resources()
+    : d(this)
+{
+    new ResourcesAdaptor(this);
+    QDBusConnection::sessionBus().registerObject(
+            ACTIVITY_MANAGER_OBJECT_PATH(Resources), this);
+}
+
+Resources::~Resources()
+{
+}
+
+void Resources::RegisterResourceEvent(QString application, uint _windowId,
+        const QString & uri, uint event, uint reason)
+{
+    if (
+           event > Event::LastEventType
+        || reason > Event::LastEventReason
+        || uri.isEmpty()
+        || application.isEmpty()
+        // Dirty way to skip special web browser URIs
+        || uri.startsWith(QLatin1String("about:"))
+    ) return;
+
+    // Dirty way to skip invalid URIs (needed for akregator)
+    QChar firstChar = uri[0];
+    if (
+            (firstChar < 'a' || firstChar > 'z') &&
+            (firstChar < 'A' || firstChar > 'Z')
+       ) return;
+
+    KUrl kuri(uri);
+    WId windowId = (WId) _windowId;
+
+    kDebug() << "New event on the horizon" << application << windowId << event << \
uri; +
+    EXEC_NEPOMUK( toRealUri(kuri) );
+
+    d->addEvent(application, windowId,
+            kuri.url(), (Event::Type) event, (Event::Reason) reason);
+}
+
+
+void Resources::RegisterResourceMimeType(const QString & uri, const QString & \
mimetype) +{
+    if (!mimetype.isEmpty()) return;
+
+    KUrl kuri(uri);
+
+    EXEC_NEPOMUK( setResourceMimeType(KUrl(uri), mimetype) );
+
+    emit RegisteredResourceMimeType(uri, mimetype);
+}
+
+
+void Resources::RegisterResourceTitle(const QString & uri, const QString & title)
+{
+    // A dirty saninty check for the title
+    if (title.length() < 3) return;
+
+    KUrl kuri(uri);
+
+    EXEC_NEPOMUK( setResourceTitle(KUrl(uri), title) );
+
+    emit RegisteredResourceTitle(uri, title);
+}
+
+
+void Resources::LinkResourceToActivity(const QString & uri, const QString & \
activity) +{
+    // TODO:
+    // if (Jobs::Encryption::Common::isActivityEncrypted(activity)) {
+    //     Jobs::Nepomuk::move(activity, true, QStringList() << uri)
+    //         ->create(this)->start();
+    // }
+
+    return doWithNepomukForActivity(activity, [&uri,this] (const QString & activity)
+        {
+            EXEC_NEPOMUK( linkResourceToActivity(KUrl(uri), activity) );
+            emit UnlinkedResourceFromActivity(uri, activity);
+        }
+    );
+}
+
+
+void Resources::UnlinkResourceFromActivity(const QString & uri, const QString & \
activity) +{
+    // TODO:
+    // if (Jobs::Encryption::Common::isActivityEncrypted(activity)) {
+    //     Jobs::Nepomuk::move(activity, true, QStringList() << uri)
+    //         ->create(this)->start();
+    // }
+
+    return doWithNepomukForActivity(activity, [&uri,this] (const QString & activity)
+        {
+            EXEC_NEPOMUK( unlinkResourceFromActivity(KUrl(uri), activity) );
+            emit UnlinkedResourceFromActivity(uri, activity);
+        }
+    );
+}
+
+
+bool Resources::IsResourceLinkedToActivity(const QString & uri, const QString & \
activity) const +{
+    return doWithNepomukForActivity(activity, [&uri] (const QString & activity)
+        {
+            return EXEC_NEPOMUK( isResourceLinkedToActivity(KUrl(uri), activity) );
+        },
+        /* default */ false
+    );
+}
+
+
+QStringList Resources::ResourcesLinkedToActivity(const QString & activity) const
+{
+    QStringList result;
+
+    foreach (const KUrl & uri, d->resourcesLinkedToActivity(activity.isEmpty() ? \
CurrentActivity() : activity)) { +        result << uri.url();
+    }
+
+    return result;
+}
+
+
diff --git a/service/Resources.h b/service/Resources.h
new file mode 100644
index 0000000..be883c1
--- /dev/null
+++ b/service/Resources.h
@@ -0,0 +1,111 @@
+/*
+ *   Copyright (C) 2012 Ivan Cukic <ivan.cukic(at)kde.org>
+ *
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License version 2,
+ *   or (at your option) any later version, as published by the Free
+ *   Software Foundation
+ *
+ *   This program 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 General Public License for more details
+ *
+ *   You should have received a copy of the GNU General Public
+ *   License along with this program; if not, write to the
+ *   Free Software Foundation, Inc.,
+ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+
+#ifndef RESOURCE_MANAGER_H_
+#define RESOURCE_MANAGER_H_
+
+#include <QObject>
+#include <QStringList>
+
+#include <Event.h>
+
+#include <utils/d_ptr.h>
+
+/**
+ * Resources
+ */
+class Resources: public QObject {
+    Q_OBJECT
+    Q_CLASSINFO("D-Bus Interface", "org.kde.ActivityManager.Resources")
+
+public:
+    Resources();
+    virtual ~Resources();
+
+public Q_SLOTS:
+    /**
+     * Registers a new event
+     * @param application the name of application that sent the event. Ignored if \
the event is not of type Opened +     * @param windowId ID of the window that \
displays the resource. Ignored if the event is of type Accessed +     * @param uri \
URI of the resource on which the event happened +     * @param event type of the \
event +     * @param reason reason for opening the resource
+     */
+    void RegisterResourceEvent(QString application, uint windowId, const QString & \
uri, uint event, uint reason); +
+    /**
+     * Registers resource's mimetype. If not manually specified, it will
+     * be retrieved if needed from Nepomuk
+     *
+     * Note that this will be forgotten when the resource in question is closed.
+     * @param uri URI of the resource
+     */
+    void RegisterResourceMimeType(const QString & uri, const QString & mimetype);
+
+    /**
+     * Registers resource's title. If not manually specified, it will be a shortened
+     * version of the uri
+     *
+     * Note that this will be forgotten when the resource in question is closed.
+     * @param uri URI of the resource
+     */
+    void RegisterResourceTitle(const QString & uri, const QString & title);
+
+    /**
+     * Links the specified resource to the activity
+     * @param uri URI of the resource
+     * @param uri activity id of the activity to link to. If empty, the resource
+     *     is linked to the current activity
+     */
+    void LinkResourceToActivity(const QString & uri, const QString & activity = \
QString()); +
+    /**
+     * Unlinks the specified resource from the activity
+     * @param uri URI of the resource
+     * @param uri activity id of the activity to unlink from. If empty, the resource
+     *     is unlinked from the current activity
+     */
+    void UnlinkResourceFromActivity(const QString & uri, const QString & activity = \
QString()); +
+    /**
+     * @returns whether the resource is linked to the activity
+     * @param uri URI of the resource
+     * @param uri activity id
+     */
+    bool IsResourceLinkedToActivity(const QString & uri, const QString & activity = \
QString()) const; +
+    /**
+     * @returns the list of resources linked to the specified activity
+     */
+    QStringList ResourcesLinkedToActivity(const QString & activity = QString()) \
const; +
+Q_SIGNALS:
+    void RegisteredResourceEvent(const Event & event);
+    void ProcessedResourceEvents(const EventList & events);
+    void RegisteredResourceMimeType(const QString & uri, const QString & mimetype);
+    void RegisteredResourceTitle(const QString & uri, const QString & title);
+    void LinkedResourceToActivity(const QString & uri, const QString & activity);
+    void UnlinkedResourceFromActivity(const QString & uri, const QString & \
activity); +
+private:
+    D_PTR;
+};
+
+#endif // RESOURCE_MANAGER_H_
+
diff --git a/service/TODO b/service/TODO
index 72d4739..eb55c5a 100644
--- a/service/TODO
+++ b/service/TODO
@@ -1,2 +1,9 @@
+- Refactor:
+  KSMserver code
+  Windowing and resources
+  Virtual desktop switching
+
+
+
 - Activities directory structure
 - Name instead of 'Current' ... or 'Current' to work :)
diff --git a/service/ui/UiHandler.cpp b/service/common.h
similarity index 73%
copy from service/ui/UiHandler.cpp
copy to service/common.h
index a87eaa2..73f1da6 100644
--- a/service/ui/UiHandler.cpp
+++ b/service/common.h
@@ -17,25 +17,7 @@
  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 
-#include "UiHandler.h"
-
-class UiHandler::Private {
-public:
-    SharedInfo * sharedInfo;
-};
-
-UiHandler::UiHandler(QObject * parent)
-    : QObject(parent), d(new Private())
-{
-}
-
-UiHandler::~UiHandler()
-{
-    delete d;
-}
-
-SharedInfo * UiHandler::sharedInfo() const
-{
-    return d->sharedInfo;
-}
+#define ACTIVITY_MANAGER_SERVICE "org.kde.ActivityManager"
+#define ACTIVITY_MANAGER_OBJECT_TYPE(A) ACTIVITY_MANAGER_SERVICE #A
+#define ACTIVITY_MANAGER_OBJECT_PATH(A) "/ActivityManager/" #A
 
diff --git a/service/config-features.h.cmake b/service/config-features.h.cmake
index b1bff4f..bde6b66 100644
--- a/service/config-features.h.cmake
+++ b/service/config-features.h.cmake
@@ -32,8 +32,4 @@
 #cmakedefine HAVE_CXX11_OVERRIDE
 #cmakedefine HAVE_CXX_OVERRIDE_ATTR
 
-#if !defined(HAVE_CXX11_NULLPTR) && !defined(nullptr)
-    #define nullptr 0
-#endif
-
 #endif
diff --git a/service/dbus/org.kde.ActivityManager.Activities.xml \
b/service/dbus/org.kde.ActivityManager.Activities.xml new file mode 100644
index 0000000..203bff4
--- /dev/null
+++ b/service/dbus/org.kde.ActivityManager.Activities.xml
@@ -0,0 +1,91 @@
+<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" \
"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd"> +<node>
+  <interface name="org.kde.ActivityManager.Activities">
+
+    <method name="CurrentActivity">
+      <arg type="s" direction="out"/>
+    </method>
+    <method name="SetCurrentActivity">
+      <arg type="b" direction="out"/>
+      <arg name="id" type="s" direction="in"/>
+    </method>
+
+    <method name="AddActivity">
+      <arg type="s" direction="out"/>
+      <arg name="name" type="s" direction="in"/>
+    </method>
+    <method name="StartActivity">
+      <arg name="id" type="s" direction="in"/>
+    </method>
+    <method name="StopActivity">
+      <arg name="id" type="s" direction="in"/>
+    </method>
+    <method name="ActivityState">
+      <arg type="i" direction="out"/>
+      <arg name="id" type="s" direction="in"/>
+    </method>
+    <method name="RemoveActivity">
+      <arg name="id" type="s" direction="in"/>
+    </method>
+
+    <method name="ListActivities">
+      <arg type="as" direction="out"/>
+    </method>
+    <method name="ListActivities">
+      <arg type="as" direction="out"/>
+      <arg name="state" type="i" direction="in"/>
+    </method>
+
+    <method name="ActivityName">
+      <arg type="s" direction="out"/>
+      <arg name="id" type="s" direction="in"/>
+    </method>
+    <method name="SetActivityName">
+      <arg name="id" type="s" direction="in"/>
+      <arg name="name" type="s" direction="in"/>
+    </method>
+
+    <method name="ActivityDescription">
+      <arg type="s" direction="out"/>
+      <arg name="id" type="s" direction="in"/>
+    </method>
+    <method name="SetActivityDescription">
+      <arg name="id" type="s" direction="in"/>
+      <arg name="description" type="s" direction="in"/>
+    </method>
+
+    <method name="ActivityIcon">
+      <arg type="s" direction="out"/>
+      <arg name="id" type="s" direction="in"/>
+    </method>
+    <method name="SetActivityIcon">
+      <arg name="id" type="s" direction="in"/>
+      <arg name="icon" type="s" direction="in"/>
+    </method>
+
+    <signal name="CurrentActivityChanged">
+      <arg name="id" type="s" direction="out"/>
+    </signal>
+
+    <signal name="ActivityAdded">
+      <arg name="id" type="s" direction="out"/>
+    </signal>
+    <signal name="ActivityStarted">
+      <arg name="id" type="s" direction="out"/>
+    </signal>
+    <signal name="ActivityStopped">
+      <arg name="id" type="s" direction="out"/>
+    </signal>
+    <signal name="ActivityRemoved">
+      <arg name="id" type="s" direction="out"/>
+    </signal>
+    <signal name="ActivityChanged">
+      <arg name="id" type="s" direction="out"/>
+    </signal>
+    <signal name="ActivityStateChanged">
+      <arg name="id" type="s" direction="out"/>
+      <arg name="state" type="i" direction="out"/>
+    </signal>
+
+  </interface>
+</node>
diff --git a/service/dbus/org.kde.ActivityManager.Features.xml \
b/service/dbus/org.kde.ActivityManager.Features.xml new file mode 100644
index 0000000..ca9b78b
--- /dev/null
+++ b/service/dbus/org.kde.ActivityManager.Features.xml
@@ -0,0 +1,11 @@
+<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" \
"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd"> +<node>
+  <interface name="org.kde.ActivityManager.Features">
+
+    <method name="IsFeatureOperational">
+      <arg type="b" direction="out" />
+      <arg name="id" type="s" direction="in" />
+    </method>
+
+  </interface>
+</node>
diff --git a/service/dbus/org.kde.ActivityManager.Resources.xml \
b/service/dbus/org.kde.ActivityManager.Resources.xml new file mode 100644
index 0000000..1744a66
--- /dev/null
+++ b/service/dbus/org.kde.ActivityManager.Resources.xml
@@ -0,0 +1,62 @@
+<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" \
"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd"> +<node>
+  <interface name="org.kde.ActivityManager.Resources">
+
+    <method name="RegisterResourceEvent">
+      <arg name="application" type="s" direction="in"/>
+      <arg name="windowId" type="u" direction="in"/>
+      <arg name="uri" type="s" direction="in"/>
+      <arg name="event" type="u" direction="in"/>
+      <arg name="reason" type="u" direction="in"/>
+    </method>
+
+    <method name="RegisterResourceMimeType">
+      <arg name="uri" type="s" direction="in"/>
+      <arg name="mimetype" type="s" direction="in"/>
+    </method>
+
+    <method name="RegisterResourceTitle">
+      <arg name="uri" type="s" direction="in"/>
+      <arg name="title" type="s" direction="in"/>
+    </method>
+
+    <method name="LinkResourceToActivity">
+      <arg name="uri" type="s" direction="in"/>
+      <arg name="activity" type="s" direction="in"/>
+    </method>
+
+    <method name="LinkResourceToActivity">
+      <arg name="uri" type="s" direction="in"/>
+    </method>
+
+    <method name="UnlinkResourceFromActivity">
+      <arg name="uri" type="s" direction="in"/>
+      <arg name="activity" type="s" direction="in"/>
+    </method>
+
+    <method name="UnlinkResourceFromActivity">
+      <arg name="uri" type="s" direction="in"/>
+    </method>
+
+    <method name="IsResourceLinkedToActivity">
+      <arg name="uri" type="s" direction="in"/>
+      <arg name="activity" type="s" direction="in"/>
+      <arg type="b" direction="out"/>
+    </method>
+
+    <method name="IsResourceLinkedToActivity">
+      <arg name="uri" type="s" direction="in"/>
+      <arg type="b" direction="out"/>
+    </method>
+
+    <method name="ResourcesLinkedToActivity">
+      <arg type="as" direction="out"/>
+      <arg name="activity" type="s" direction="in"/>
+    </method>
+
+    <method name="ResourcesLinkedToActivity">
+      <arg type="as" direction="out"/>
+    </method>
+
+  </interface>
+</node>
diff --git a/service/activitymanager-plugin.desktop \
b/service/files/activitymanager-plugin.desktop similarity index 100%
rename from service/activitymanager-plugin.desktop
rename to service/files/activitymanager-plugin.desktop
diff --git a/service/kactivitymanagerd.desktop \
b/service/files/kactivitymanagerd.desktop similarity index 100%
rename from service/kactivitymanagerd.desktop
rename to service/files/kactivitymanagerd.desktop
diff --git a/service/jobs/Job.h b/service/jobs/Job.h
index 6e1cae1..d55b672 100644
--- a/service/jobs/Job.h
+++ b/service/jobs/Job.h
@@ -22,7 +22,8 @@
 
 #include <KJob>
 #include <QString>
-#include <Utils.h>
+
+#include <utils/override_macro.h>
 
 /**
  * Job
diff --git a/service/jobs/ui/Message.cpp b/service/jobs/ui/Message.cpp
index 5f5cc1e..aef22cf 100644
--- a/service/jobs/ui/Message.cpp
+++ b/service/jobs/ui/Message.cpp
@@ -29,6 +29,7 @@ Message::JOB_FACTORY(const QString & title, const QString & \
message, int type)  {
     JOB_FACTORY_PROPERTY(title);
     JOB_FACTORY_PROPERTY(message);
+    Q_UNUSED(type);
     // JOB_FACTORY_PROPERTY(type);
 }
 
diff --git a/service/ActivityManager.cpp b/service/old/ActivityManager.cpp
similarity index 98%
rename from service/ActivityManager.cpp
rename to service/old/ActivityManager.cpp
index f6b03d6..909a0ee 100644
--- a/service/ActivityManager.cpp
+++ b/service/old/ActivityManager.cpp
@@ -19,33 +19,39 @@
 
 #include "ActivityManager.h"
 #include "ActivityManager_p.h"
+#include "EventProcessor.h"
 #include "NepomukActivityManager.h"
 
-#include <QUuid>
+#include "activitymanageradaptor.h"
+
 #include <QDBusConnection>
+#include <QDBusInterface>
+#include <QUuid>
 
 #include <KConfig>
 #include <KConfigGroup>
 #include <KCrash>
+#include <KDebug>
 #include <KLocale>
 #include <KUrl>
-#include <KDebug>
-
 #include <KWindowSystem>
 
-#include "activitymanageradaptor.h"
-#include "EventProcessor.h"
+#include <config-features.h>
 
-#include "jobs/schedulers/all.h"
 #include "jobs/activity/all.h"
+#include "jobs/encryption/Common.h"
 #include "jobs/encryption/all.h"
 #include "jobs/general/all.h"
 #include "jobs/nepomuk/all.h"
+#include "jobs/schedulers/all.h"
 #include "jobs/ui/all.h"
 
-#include "ui/Ui.h"
+#ifdef HAVE_NEPOMUK
+#include "jobs/encryption/Common.h"
+#include "jobs/nepomuk/Move.h"
+#endif
 
-#include <config-features.h>
+#include "ui/Ui.h"
 
 // Private
 
@@ -584,12 +590,6 @@ SharedInfo * ActivityManager::sharedInfo() const
 ////////////////////////////////////////////////////////////////////////////////
 
 
-#include "ActivityManager.h"
-#include "ActivityManager_p.h"
-#include "NepomukActivityManager.h"
-
-#include "jobs/encryption/Common.h"
-
 KConfigGroup ActivityManagerPrivate::activityIconsConfig()
 {
     return KConfigGroup(&config, "activities-icons");
@@ -743,18 +743,6 @@ ActivityManager * ActivityManager::self()
 ////////////////////////////////////////////////////////////////////////////////
 
 
-#include "ActivityManager.h"
-#include "ActivityManager_p.h"
-#include "NepomukActivityManager.h"
-
-#include <KDebug>
-#include "EventProcessor.h"
-
-#ifdef HAVE_NEPOMUK
-#include "jobs/encryption/Common.h"
-#include "jobs/nepomuk/Move.h"
-#endif
-
 void ActivityManager::RegisterResourceEvent(QString application, uint _windowId,
         const QString & uri, uint event, uint reason)
 {
@@ -896,12 +884,6 @@ QList <KUrl> ActivityManager::resourcesLinkedToActivity(const \
QString & activity  ////////////////////////////////////////////////////////////////////////////////
  
 
-#include "ActivityManager.h"
-#include "ActivityManager_p.h"
-
-#include <QDBusInterface>
-#include <KDebug>
-
 void ActivityManagerPrivate::sessionServiceRegistered()
 {
     delete ksmserverInterface;
@@ -1168,13 +1150,6 @@ void ActivityManagerPrivate::screenLockStateChanged(const bool \
locked)  ////////////////////////////////////////////////////////////////////////////////
  
 
-#include "ActivityManager.h"
-#include "ActivityManager_p.h"
-
-#include <KWindowSystem>
-
-#include "EventProcessor.h"
-
 // Private
 
 // copied from kdelibs\kdeui\notifications\kstatusnotifieritemdbus_p.cpp
diff --git a/service/ActivityManager.h b/service/old/ActivityManager.h
similarity index 100%
copy from service/ActivityManager.h
copy to service/old/ActivityManager.h
diff --git a/service/ActivityManager.h b/service/old/ActivityManagerInterface.h
similarity index 86%
rename from service/ActivityManager.h
rename to service/old/ActivityManagerInterface.h
index fcaab9d..cb88cda 100644
--- a/service/ActivityManager.h
+++ b/service/old/ActivityManagerInterface.h
@@ -17,17 +17,14 @@
  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 
-#ifndef ACTIVITY_MANAGER_H
-#define ACTIVITY_MANAGER_H
+#ifndef ACTIVITY_MANAGER_INTERFACE_H
+#define ACTIVITY_MANAGER_INTERFACE_H
 
 #define ActivityManagerServicePath "org.kde.ActivityManager"
 
 #include <QString>
 #include <QStringList>
 
-#include <KUniqueApplication>
-#include <KUrl>
-
 class ActivityManagerPrivate;
 class SharedInfo;
 
@@ -35,66 +32,24 @@ class SharedInfo;
  * Service for tracking the user actions and managing the
  * activities
  */
-class ActivityManager: public KUniqueApplication {
+class ActivityManagerInterface: public QObject {
     Q_OBJECT
+
     Q_CLASSINFO("D-Bus Interface", "org.kde.ActivityManager")
     Q_PROPERTY(QString CurrentActivity READ CurrentActivity WRITE SetCurrentActivity \
NOTIFY CurrentActivityChanged)  
 public:
     /**
-     * Activity state
-     * @note: Do not change the values, needed for bit-operations
-     */
-    enum State {
-        Invalid  = 0,
-        Running  = 2,
-        Starting = 3,
-        Stopped  = 4,
-        Stopping = 5
-    };
-
-    /**
-     * The event type
+     * Creates new ActivityManagerInterface
      */
-    enum EventType {
-        Accessed = 1,
-        Opened = 2,
-        Modified = 3,
-        Closed = 4,
-        FocussedIn = 5,
-        FocussedOut = 6
-    };
-
-    /**
-     * Creates new ActivityManager
-     */
-    ActivityManager();
+    ActivityManagerInterface();
 
     /**
      * Destroys this interface
      */
-    virtual ~ActivityManager();
-
-    static ActivityManager* self();
-
-    SharedInfo * sharedInfo() const;
-
-// service control methods
-public Q_SLOTS:
-    /**
-     * Does nothing. If the service is not running, the D-Bus daemon
-     * will automatically create it
-     */
-    void Start();
-
-    /**
-     * Stops the service
-     */
-    void Stop();
-
+    virtual ~ActivityManagerInterface();
 
 
-// workspace activities control
 public Q_SLOTS:
     /**
      * @returns the id of the current activity, empty string if none
@@ -304,12 +259,8 @@ public Q_SLOTS:
      */
     QStringList ResourcesLinkedToActivity(const QString & activity = QString()) \
const;  
-public:
-    QList <KUrl> resourcesLinkedToActivity(const QString & activity) const;
-
 private:
-    friend class ActivityManagerPrivate;
-    class ActivityManagerPrivate * const d;
+    class ActivityManagerInterfacePrivate * const d;
 };
 
-#endif // ACTIVITY_MANAGER_H
+#endif // ACTIVITY_MANAGER_INTERFACE_H
diff --git a/service/ActivityManager_p.h b/service/old/ActivityManager_p.h
similarity index 100%
rename from service/ActivityManager_p.h
rename to service/old/ActivityManager_p.h
diff --git a/service/EventProcessor.cpp b/service/old/EventProcessor.cpp
similarity index 100%
rename from service/EventProcessor.cpp
rename to service/old/EventProcessor.cpp
diff --git a/service/EventProcessor.h b/service/old/EventProcessor.h
similarity index 100%
rename from service/EventProcessor.h
rename to service/old/EventProcessor.h
diff --git a/service/Messages.sh b/service/old/Messages.sh
similarity index 100%
rename from service/Messages.sh
rename to service/old/Messages.sh
diff --git a/service/Plugin.cpp b/service/old/Plugin.cpp
similarity index 100%
rename from service/Plugin.cpp
rename to service/old/Plugin.cpp
diff --git a/service/Plugin.h b/service/old/Plugin.h
similarity index 100%
rename from service/Plugin.h
rename to service/old/Plugin.h
diff --git a/service/SharedInfo.cpp b/service/old/SharedInfo.cpp
similarity index 100%
rename from service/SharedInfo.cpp
rename to service/old/SharedInfo.cpp
diff --git a/service/SharedInfo.h b/service/old/SharedInfo.h
similarity index 100%
rename from service/SharedInfo.h
rename to service/old/SharedInfo.h
diff --git a/service/queries.sparql b/service/old/queries.sparql
similarity index 100%
rename from service/queries.sparql
rename to service/old/queries.sparql
diff --git a/service/org.kde.ActivityManager.xml \
b/service/org.kde.ActivityManager.xml deleted file mode 100644
index c1e0eef..0000000
--- a/service/org.kde.ActivityManager.xml
+++ /dev/null
@@ -1,163 +0,0 @@
-<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" \
                "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
-<node>
-  <interface name="org.kde.ActivityManager">
-
-    <!-- service control methods -->
-    <method name="Start">
-    </method>
-    <method name="Stop">
-    </method>
-
-
-    <!-- workspace activities control -->
-    <method name="CurrentActivity">
-      <arg type="s" direction="out"/>
-    </method>
-    <method name="SetCurrentActivity">
-      <arg type="b" direction="out"/>
-      <arg name="id" type="s" direction="in"/>
-    </method>
-
-    <method name="AddActivity">
-      <arg type="s" direction="out"/>
-      <arg name="name" type="s" direction="in"/>
-    </method>
-    <method name="StartActivity">
-      <arg name="id" type="s" direction="in"/>
-    </method>
-    <method name="StopActivity">
-      <arg name="id" type="s" direction="in"/>
-    </method>
-    <method name="ActivityState">
-      <arg type="i" direction="out"/>
-      <arg name="id" type="s" direction="in"/>
-    </method>
-    <method name="RemoveActivity">
-      <arg name="id" type="s" direction="in"/>
-    </method>
-
-    <method name="ListActivities">
-      <arg type="as" direction="out"/>
-    </method>
-    <method name="ListActivities">
-      <arg type="as" direction="out"/>
-      <arg name="state" type="i" direction="in"/>
-    </method>
-
-    <method name="ActivityName">
-      <arg type="s" direction="out"/>
-      <arg name="id" type="s" direction="in"/>
-    </method>
-    <method name="SetActivityName">
-      <arg name="id" type="s" direction="in"/>
-      <arg name="name" type="s" direction="in"/>
-    </method>
-
-    <method name="ActivityDescription">
-      <arg type="s" direction="out"/>
-      <arg name="id" type="s" direction="in"/>
-    </method>
-    <method name="SetActivityDescription">
-      <arg name="id" type="s" direction="in"/>
-      <arg name="description" type="s" direction="in"/>
-    </method>
-
-    <method name="ActivityIcon">
-      <arg type="s" direction="out"/>
-      <arg name="id" type="s" direction="in"/>
-    </method>
-    <method name="SetActivityIcon">
-      <arg name="id" type="s" direction="in"/>
-      <arg name="icon" type="s" direction="in"/>
-    </method>
-
-    <method name="IsFeatureOperational">
-      <arg type="b" direction="out"/>
-      <arg name="id" type="s" direction="in"/>
-    </method>
-    <method name="SetActivityEncrypted">
-      <arg name="activity" type="s" direction="in"/>
-      <arg name="encrypted" type="b" direction="in"/>
-    </method>
-    <method name="IsActivityEncrypted">
-      <arg type="b" direction="out"/>
-      <arg name="activity" type="s" direction="in"/>
-    </method>
-    <!-- <method name="_MountActivityEncrypted"> -->
-    <!--   <arg name="activity" type="s" direction="in"/> -->
-    <!--   <arg name="encrypted" type="b" direction="in"/> -->
-    <!-- </method> -->
-
-    <signal name="CurrentActivityChanged">
-      <arg name="id" type="s" direction="out"/>
-    </signal>
-
-    <signal name="ActivityAdded">
-      <arg name="id" type="s" direction="out"/>
-    </signal>
-    <signal name="ActivityStarted">
-      <arg name="id" type="s" direction="out"/>
-    </signal>
-    <signal name="ActivityStopped">
-      <arg name="id" type="s" direction="out"/>
-    </signal>
-    <signal name="ActivityRemoved">
-      <arg name="id" type="s" direction="out"/>
-    </signal>
-    <signal name="ActivityChanged">
-      <arg name="id" type="s" direction="out"/>
-    </signal>
-    <signal name="ActivityStateChanged">
-      <arg name="id" type="s" direction="out"/>
-      <arg name="state" type="i" direction="out"/>
-    </signal>
-
-    <!-- Resource related mothods -->
-    <method name="RegisterResourceEvent">
-      <arg name="application" type="s" direction="in"/>
-      <arg name="windowId" type="u" direction="in"/>
-      <arg name="uri" type="s" direction="in"/>
-      <arg name="event" type="u" direction="in"/>
-      <arg name="reason" type="u" direction="in"/>
-    </method>
-    <method name="RegisterResourceMimeType">
-      <arg name="uri" type="s" direction="in"/>
-      <arg name="mimetype" type="s" direction="in"/>
-    </method>
-    <method name="RegisterResourceTitle">
-      <arg name="uri" type="s" direction="in"/>
-      <arg name="title" type="s" direction="in"/>
-    </method>
-    <method name="LinkResourceToActivity">
-      <arg name="uri" type="s" direction="in"/>
-      <arg name="activity" type="s" direction="in"/>
-    </method>
-    <method name="LinkResourceToActivity">
-      <arg name="uri" type="s" direction="in"/>
-    </method>
-    <method name="UnlinkResourceFromActivity">
-      <arg name="uri" type="s" direction="in"/>
-      <arg name="activity" type="s" direction="in"/>
-    </method>
-    <method name="UnlinkResourceFromActivity">
-      <arg name="uri" type="s" direction="in"/>
-    </method>
-    <method name="IsResourceLinkedToActivity">
-      <arg name="uri" type="s" direction="in"/>
-      <arg name="activity" type="s" direction="in"/>
-      <arg type="b" direction="out"/>
-    </method>
-    <method name="IsResourceLinkedToActivity">
-      <arg name="uri" type="s" direction="in"/>
-      <arg type="b" direction="out"/>
-    </method>
-    <method name="ResourcesLinkedToActivity">
-      <arg type="as" direction="out"/>
-      <arg name="activity" type="s" direction="in"/>
-    </method>
-    <method name="ResourcesLinkedToActivity">
-      <arg type="as" direction="out"/>
-    </method>
-
-  </interface>
-</node>
diff --git a/service/ui/Ui.cpp b/service/ui/Ui.cpp
index 9c63c4f..4878bce 100644
--- a/service/ui/Ui.cpp
+++ b/service/ui/Ui.cpp
@@ -20,9 +20,9 @@
 
 #include "Ui.h"
 #include "UiHandler.h"
-#include <SharedInfo.h>
 
 #include <KDebug>
+#include <KConfigGroup>
 
 #include <config-features.h>
 
diff --git a/service/ui/UiHandler.cpp b/service/ui/UiHandler.cpp
index a87eaa2..ea8779e 100644
--- a/service/ui/UiHandler.cpp
+++ b/service/ui/UiHandler.cpp
@@ -21,7 +21,6 @@
 
 class UiHandler::Private {
 public:
-    SharedInfo * sharedInfo;
 };
 
 UiHandler::UiHandler(QObject * parent)
@@ -34,8 +33,3 @@ UiHandler::~UiHandler()
     delete d;
 }
 
-SharedInfo * UiHandler::sharedInfo() const
-{
-    return d->sharedInfo;
-}
-
diff --git a/service/ui/UiHandler.h b/service/ui/UiHandler.h
index ce04555..90e5916 100644
--- a/service/ui/UiHandler.h
+++ b/service/ui/UiHandler.h
@@ -24,8 +24,7 @@
 #include <KPluginFactory>
 #include <KPluginLoader>
 
-#include <Utils.h>
-#include <SharedInfo.h>
+#include <utils/override_macro.h>
 
 #define KAMD_EXPORT_UI_HANDLER(ClassName, AboutData)                   \
     K_PLUGIN_FACTORY(ClassName##Factory, registerPlugin<ClassName>();) \
@@ -45,9 +44,6 @@ public:
             const QStringList & choices, QObject * receiver, const char * slot) = 0;
     virtual void setBusy(bool value) = 0;
 
-protected:
-    SharedInfo * sharedInfo() const;
-
 private:
     class Private;
     Private * const d;
diff --git a/service/jobs/Job.h b/service/utils/d_ptr.h
similarity index 62%
copy from service/jobs/Job.h
copy to service/utils/d_ptr.h
index 6e1cae1..092e978 100644
--- a/service/jobs/Job.h
+++ b/service/utils/d_ptr.h
@@ -17,31 +17,38 @@
  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 
-#ifndef JOBS_JOB_H
-#define JOBS_JOB_H
+#ifndef D_PTR_H
+#define D_PTR_H
 
-#include <KJob>
-#include <QString>
-#include <Utils.h>
+#include <memory>
 
-/**
- * Job
- */
-class Job: public KJob {
-    Q_OBJECT
+namespace kamd {
+namespace utils {
+
+template <typename T>
+class d_ptr {
+private:
+    std::unique_ptr<T> d;
 
 public:
-    Job(QObject * parent = nullptr);
-    virtual ~Job();
+    d_ptr();
 
-    virtual void init();
+    template <typename ...Args>
+    d_ptr(Args && ...);
 
-    static QObject * global();
+    ~d_ptr();
 
-private:
-    class Private;
-    Private * const d;
+    T * operator->() const;
+
+    T * get() const;
 };
 
-#endif // JOBS_JOB_H
+#define D_PTR \
+    class Private;                            \
+    friend class Private;                     \
+    const ::kamd::utils::d_ptr<Private> d;    \
+
+} // namespace utils
+} // namespace kamd
 
+#endif
diff --git a/service/ui/UiHandler.cpp b/service/utils/d_ptr_implementation.h
similarity index 59%
copy from service/ui/UiHandler.cpp
copy to service/utils/d_ptr_implementation.h
index a87eaa2..07759f0 100644
--- a/service/ui/UiHandler.cpp
+++ b/service/utils/d_ptr_implementation.h
@@ -17,25 +17,45 @@
  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 
-#include "UiHandler.h"
+#ifndef D_PTR_IMPLEMENTATION_H
+#define D_PTR_IMPLEMENTATION_H
 
-class UiHandler::Private {
-public:
-    SharedInfo * sharedInfo;
-};
+#include <utility>
 
-UiHandler::UiHandler(QObject * parent)
-    : QObject(parent), d(new Private())
+namespace kamd {
+namespace utils {
+
+template <typename T>
+d_ptr<T>::d_ptr() : d(new T())
 {
 }
 
-UiHandler::~UiHandler()
+template <typename T>
+template <typename ...Args>
+d_ptr<T>::d_ptr(Args && ... args)
+    : d(new T(std::forward<Args>(args)... ))
 {
-    delete d;
 }
 
-SharedInfo * UiHandler::sharedInfo() const
+template <typename T>
+d_ptr<T>::~d_ptr()
 {
-    return d->sharedInfo;
 }
 
+template<typename T>
+T * d_ptr<T>::operator->() const
+{
+    return d.get();
+}
+
+template<typename T>
+T * d_ptr<T>::get() const
+{
+    return d.get();
+}
+
+} // namespace utils
+} // namespace kamd
+
+#endif
+
diff --git a/service/Utils.h b/service/utils/for_each_assoc.h
similarity index 83%
rename from service/Utils.h
rename to service/utils/for_each_assoc.h
index 2410470..cff0efa 100644
--- a/service/Utils.h
+++ b/service/utils/for_each_assoc.h
@@ -17,8 +17,8 @@
  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 
-#ifndef UTILS_H
-#define UTILS_H
+#ifndef UTILS_FOR_EACH_ASSOC_H
+#define UTILS_FOR_EACH_ASSOC_H
 
 #include <iterator>
 #include <config-features.h>
@@ -27,6 +27,9 @@
  *  Associative container's for_each (for hash, map, and similar )  *
  ********************************************************************/
 
+namespace kamd {
+namespace utils {
+
 namespace details {
 
 // Iterator Functions
@@ -72,16 +75,7 @@ Function for_each_assoc(const Container & c, Function f)
         <Container, Function>(c, f, nullptr);
 }
 
-/********************************************************************
- *  Override macro                                                  *
- ********************************************************************/
-
-#if defined(HAVE_CXX11_OVERRIDE)
-    #define _override override
-#elif defined(HAVE_CXX_OVERRIDE_ATTR)
-    #define _override __attribute__((override))
-#else
-    #define _override // nothing
-#endif
+} // namespace utils
+} // namespace kamd
 
-#endif // UTILS_H
+#endif // UTILS_FOR_EACH_ASSOC_H
diff --git a/service/ui/UiHandler.cpp b/service/utils/nullptr.h
similarity index 69%
copy from service/ui/UiHandler.cpp
copy to service/utils/nullptr.h
index a87eaa2..a050c81 100644
--- a/service/ui/UiHandler.cpp
+++ b/service/utils/nullptr.h
@@ -13,29 +13,17 @@
  *
  *   You should have received a copy of the GNU General Public
  *   License along with this program; if not, write to the
- *   Free Software Foundation, Inc.,
+ *   Free Software Foundation,3 Inc.,
  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 
-#include "UiHandler.h"
+#ifndef UTILS_NULLPTR_H
+#define UTILS_NULLPTR_H
 
-class UiHandler::Private {
-public:
-    SharedInfo * sharedInfo;
-};
+#include <config-features.h>
 
-UiHandler::UiHandler(QObject * parent)
-    : QObject(parent), d(new Private())
-{
-}
-
-UiHandler::~UiHandler()
-{
-    delete d;
-}
-
-SharedInfo * UiHandler::sharedInfo() const
-{
-    return d->sharedInfo;
-}
+#if !defined(HAVE_CXX11_NULLPTR) && !defined(nullptr)
+    #define nullptr 0
+#endif
 
+#endif // UTILS_NULLPTR_H
diff --git a/service/ui/UiHandler.cpp b/service/utils/override_macro.h
similarity index 67%
copy from service/ui/UiHandler.cpp
copy to service/utils/override_macro.h
index a87eaa2..8db77bd 100644
--- a/service/ui/UiHandler.cpp
+++ b/service/utils/override_macro.h
@@ -13,29 +13,21 @@
  *
  *   You should have received a copy of the GNU General Public
  *   License along with this program; if not, write to the
- *   Free Software Foundation, Inc.,
+ *   Free Software Foundation,3 Inc.,
  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 
-#include "UiHandler.h"
+#ifndef UTILS_OVERRIDE_MACRO_H
+#define UTILS_OVERRIDE_MACRO_H
 
-class UiHandler::Private {
-public:
-    SharedInfo * sharedInfo;
-};
+#include <config-features.h>
 
-UiHandler::UiHandler(QObject * parent)
-    : QObject(parent), d(new Private())
-{
-}
-
-UiHandler::~UiHandler()
-{
-    delete d;
-}
-
-SharedInfo * UiHandler::sharedInfo() const
-{
-    return d->sharedInfo;
-}
+#if defined(HAVE_CXX11_OVERRIDE)
+    #define _override override
+#elif defined(HAVE_CXX_OVERRIDE_ATTR)
+    #define _override __attribute__((override))
+#else
+    #define _override // nothing
+#endif
 
+#endif // UTILS_OVERRIDE_MACRO_H


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic