summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Swift/QtUI/FreeDesktopNotifier.cpp')
-rw-r--r--Swift/QtUI/FreeDesktopNotifier.cpp52
1 files changed, 52 insertions, 0 deletions
diff --git a/Swift/QtUI/FreeDesktopNotifier.cpp b/Swift/QtUI/FreeDesktopNotifier.cpp
new file mode 100644
index 0000000..2560882
--- /dev/null
+++ b/Swift/QtUI/FreeDesktopNotifier.cpp
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2010 Remko Tronçon
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+
+//#pragma GCC diagnostic ignored "-Wredundant-decls"
+
+#include "Swift/QtUI/FreeDesktopNotifier.h"
+
+#include <QMap>
+#include <QString>
+#include <QStringList>
+#include <QtDBus/QtDBus>
+#include <algorithm>
+
+#include "QtSwiftUtil.h"
+
+namespace Swift {
+
+FreeDesktopNotifier::FreeDesktopNotifier(const String& name) : applicationName(name) {
+}
+
+void FreeDesktopNotifier::doShowMessage(Type type, const String& subject, const String& description, const boost::filesystem::path& picture, boost::function<void()>) {
+ QDBusConnection bus = QDBusConnection::sessionBus();
+ if (!bus.isConnected()) {
+ return;
+ }
+ std::vector<Notifier::Type> defaultTypes = getDefaultTypes();
+ if (std::find(defaultTypes.begin(), defaultTypes.end(), type) == defaultTypes.end()) {
+ return;
+ }
+
+ int timeout = (type == IncomingMessage || type == SystemMessage) ? DEFAULT_MESSAGE_NOTIFICATION_TIMEOUT_SECONDS : DEFAULT_STATUS_NOTIFICATION_TIMEOUT_SECONDS;
+
+ QDBusMessage msg = QDBusMessage::createMethodCall("org.freedesktop.Notifications", "/org/freedesktop/Notifications", "", "Notify");
+
+ QStringList actions;
+ QMap<QString, QVariant> hints;
+ msg << P2QSTRING(applicationName);
+ msg << quint32(0); // ID of previous notification to replace
+ msg << picture.string().c_str(); // Icon to display
+ msg << P2QSTRING(subject); // Summary / Header of the message to display
+ msg << P2QSTRING(description); // Body of the message to display
+ msg << actions; // Actions from which the user may choose
+ msg << hints; // Hints to the server displaying the message
+ msg << qint32(timeout*1000); // Timeout in milliseconds
+
+ bus.call(msg);
+}
+
+}