[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