Project

General

Profile

0002-Improved-support-for-org.freedesktop.Notifications.patch

admin, 05/21/2008 02:46 PM

View differences:

src/client/client.pri
2 2
QT_MOD = core network gui
3 3

  
4 4
SRCS += buffer.cpp buffersettings.cpp clientbacklogmanager.cpp treemodel.cpp networkmodel.cpp buffermodel.cpp \
5
        client.cpp clientsettings.cpp clientsyncer.cpp mappedselectionmodel.cpp selectionmodelsynchronizer.cpp
5
        client.cpp clientsettings.cpp clientsyncer.cpp mappedselectionmodel.cpp selectionmodelsynchronizer.cpp \
6
		desktopnotifications.cpp
6 7
HDRS += buffer.h buffersettings.h clientbacklogmanager.h treemodel.h networkmodel.h buffermodel.h \
7
        client.h clientsettings.h clientsyncer.h quasselui.h mappedselectionmodel.h selectionmodelsynchronizer.h
8
        client.h clientsettings.h clientsyncer.h quasselui.h mappedselectionmodel.h selectionmodelsynchronizer.h \
9
		desktopnotifications.h
8 10

  
9 11
sputdev {
10 12
  SRCS += messagemodel.cpp
src/client/desktopnotifications.cpp
1
/*
2
 * This file was generated by dbusxml2cpp version 0.6
3
 * Command line was: dbusxml2cpp -p desktopnotifications org.freedesktop.Notifications.xml
4
 *
5
 * dbusxml2cpp is Copyright (C) 2006 Trolltech ASA. All rights reserved.
6
 *
7
 * This is an auto-generated file.
8
 * This file may have been hand-edited. Look for HAND-EDIT comments
9
 * before re-generating it.
10
 */
11

  
12
#include "desktopnotifications.h"
13

  
14
/*
15
 * Implementation of interface class OrgFreedesktopNotificationsInterface
16
 */
17

  
18
OrgFreedesktopNotificationsInterface::OrgFreedesktopNotificationsInterface(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent)
19
    : QDBusAbstractInterface(service, path, staticInterfaceName(), connection, parent)
20
{
21
}
22

  
23
OrgFreedesktopNotificationsInterface::~OrgFreedesktopNotificationsInterface()
24
{
25
}
26

  
src/client/desktopnotifications.h
1
/*
2
 * This file was generated by dbusxml2cpp version 0.6
3
 * Command line was: dbusxml2cpp -p desktopnotifications org.freedesktop.Notifications.xml
4
 *
5
 * dbusxml2cpp is Copyright (C) 2006 Trolltech ASA. All rights reserved.
6
 *
7
 * This is an auto-generated file.
8
 * Do not edit! All changes made to it will be lost.
9
 */
10

  
11
#ifndef DESKTOPNOTIFICATIONS_H_1211193208
12
#define DESKTOPNOTIFICATIONS_H_1211193208
13

  
14
#include <QtCore/QObject>
15
#include <QtCore/QByteArray>
16
#include <QtCore/QList>
17
#include <QtCore/QMap>
18
#include <QtCore/QString>
19
#include <QtCore/QStringList>
20
#include <QtCore/QVariant>
21
#include <QtDBus/QtDBus>
22

  
23
/*
24
 * Proxy class for interface org.freedesktop.Notifications
25
 */
26
class OrgFreedesktopNotificationsInterface: public QDBusAbstractInterface
27
{
28
    Q_OBJECT
29
public:
30
    static inline const char *staticInterfaceName()
31
    { return "org.freedesktop.Notifications"; }
32

  
33
public:
34
    OrgFreedesktopNotificationsInterface(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent = 0);
35

  
36
    ~OrgFreedesktopNotificationsInterface();
37

  
38
public Q_SLOTS: // METHODS
39
    inline QDBusReply<void> CloseNotification(uint id)
40
    {
41
        QList<QVariant> argumentList;
42
        argumentList << qVariantFromValue(id);
43
        return callWithArgumentList(QDBus::Block, QLatin1String("CloseNotification"), argumentList);
44
    }
45

  
46
    inline QDBusReply<QStringList> GetCapabilities()
47
    {
48
        QList<QVariant> argumentList;
49
        return callWithArgumentList(QDBus::Block, QLatin1String("GetCapabilities"), argumentList);
50
    }
51

  
52
    inline QDBusReply<QString> GetServerInformation(QString &vendor, QString &version)
53
    {
54
        QList<QVariant> argumentList;
55
        QDBusMessage reply = callWithArgumentList(QDBus::Block, QLatin1String("GetServerInformation"), argumentList);
56
        if (reply.type() == QDBusMessage::ReplyMessage && reply.arguments().count() == 3) {
57
            vendor = qdbus_cast<QString>(reply.arguments().at(1));
58
            version = qdbus_cast<QString>(reply.arguments().at(2));
59
        }
60
        return reply;
61
    }
62

  
63
    inline QDBusReply<uint> Notify(const QString &app_name, uint replaces_id, const QString &app_icon, const QString &summary, const QString &body, const QStringList &actions, const QVariantMap &hints, int expire_timeout)
64
    {
65
        QList<QVariant> argumentList;
66
        argumentList << qVariantFromValue(app_name) << qVariantFromValue(replaces_id) << qVariantFromValue(app_icon) << qVariantFromValue(summary) << qVariantFromValue(body) << qVariantFromValue(actions) << qVariantFromValue(hints) << qVariantFromValue(expire_timeout);
67
        return callWithArgumentList(QDBus::Block, QLatin1String("Notify"), argumentList);
68
    }
69

  
70
Q_SIGNALS: // SIGNALS
71
    void ActionInvoked(uint id, const QString &action);
72
    void NotificationClosed(uint id, uint reason);
73
};
74

  
75
namespace org {
76
  namespace freedesktop {
77
    typedef ::OrgFreedesktopNotificationsInterface Notifications;
78
  }
79
}
80
#endif
src/client/org.freedesktop.Notifications.xml
1
<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
2
<node>
3
  <interface name="org.freedesktop.Notifications">
4
    <signal name="NotificationClosed">
5
      <arg name="id" type="u" direction="out"/>
6
      <arg name="reason" type="u" direction="out"/>
7
    </signal>
8
    <signal name="ActionInvoked">
9
      <arg name="id" type="u" direction="out"/>
10
      <arg name="action" type="s" direction="out"/>
11
    </signal>
12
    <method name="GetCapabilities">
13
      <arg type="as" direction="out"/>
14
    </method>
15
    <method name="GetServerInformation">
16
      <arg name="name" type="s" direction="out"/>
17
      <arg name="vendor" type="s" direction="out"/>
18
      <arg name="version" type="s" direction="out"/>
19
    </method>
20
    <method name="Notify">
21
      <arg type="u" direction="out"/>
22
      <arg name="app_name" type="s" direction="in"/>
23
      <arg name="replaces_id" type="u" direction="in"/>
24
      <arg name="app_icon" type="s" direction="in"/>
25
      <arg name="summary" type="s" direction="in"/>
26
      <arg name="body" type="s" direction="in"/>
27
      <arg name="actions" type="as" direction="in"/>
28
      <arg name="hints" type="a{sv}" direction="in"/>
29
      <annotation name="com.trolltech.QtDBus.QtTypeName.In6" value="QVariantMap"/>
30
      <arg name="expire_timeout" type="i" direction="in"/>
31
    </method>
32
    <method name="CloseNotification">
33
      <arg name="id" type="u" direction="in"/>
34
    </method>
35
  </interface>
36
</node>
src/qtui/mainwin.cpp
60 60
#include "global.h"
61 61
#include "qtuistyle.h"
62 62

  
63
#include <Qt/QtDBus>
63
#include "desktopnotifications.h"
64 64

  
65 65

  
66 66
MainWin::MainWin(QtUi *_gui, QWidget *parent)
......
75 75
    trayIconActive(false),
76 76
    timer(new QTimer(this)),
77 77
    settingsDlg(new SettingsDlg(this)),
78
    debugConsole(new DebugConsole(this))
78
    debugConsole(new DebugConsole(this)),
79
	desktopNotifications(new org::freedesktop::Notifications(
80
		"org.freedesktop.Notifications",
81
		"/org/freedesktop/Notifications",
82
		QDBusConnection::sessionBus(), this)),
83
	notificationId(0)
79 84
{
80 85
  ui.setupUi(this);
81 86
  setWindowTitle("Quassel IRC");
......
93 98
  if(style != "") {
94 99
    QApplication::setStyle(style);
95 100
  }
101

  
102
  connect(desktopNotifications, SIGNAL(NotificationClosed(uint, uint)), this, SLOT(desktopNotificationClosed(uint, uint)));
103
  connect(desktopNotifications, SIGNAL(ActionInvoked(uint, const QString&)), this, SLOT(desktopNotificationInvoked(uint, const QString&)));
96 104
}
97 105

  
98 106
void MainWin::init() {
......
599 607
{
600 608
	QStringList actions;
601 609
	QMap<QString, QVariant> hints;
602
	QDBusMessage msg = QDBusMessage::createMethodCall("org.freedesktop.Notifications", "/org/freedesktop/Notifications", "", "Notify");
603 610

  
604 611
	hints["x"] = 100; // Standard hint: x location for the popup to show up
605 612
	hints["y"] = 100; // Standard hint: y location for the popup to show up
606 613

  
607
	msg << "Quassel"; // Application name
608
	msg << quint32(0); // ID of previous notification to replace
609
	msg << ""; // Icon to display
610
	msg << "Quassel: " + title; // Summary / Header of the message to display
611
	msg << message; // Body of the message to display
612
	msg << actions; // Actions from which the user may choose
613
	msg << hints; // Hints to the server displaying the message
614
	msg << qint32(10000); // Timeout in milliseconds
614
	actions << "click" << "Click Me!";
615

  
616
	QDBusReply<uint> reply = desktopNotifications->Notify(
617
		"Quassel", // Application name
618
		notificationId, // ID of previous notification to replace
619
		"", // Icon to display
620
		title, // Summary / Header of the message to display
621
		QString("%1: %2:\n%2").arg(QTime::currentTime().toString()).arg(title).arg(message), // Body of the message to display
622
		actions, // Actions from which the user may choose
623
		hints, // Hints to the server displaying the message
624
		5000 // Timeout in milliseconds
625
	);
626

  
627
	if (!reply.isValid())
628
	{
629
		/* ERROR */
630
		qDebug() << "Error on sending notification...";
631
		return;
632
	}
633

  
634
	notificationId = reply.value();
635

  
636
	qDebug() << "ID: " << notificationId << " Time: " << QTime::currentTime().toString();
637
}
638

  
639

  
640
void MainWin::desktopNotificationClosed(uint id, uint reason)
641
{
642
	qDebug() << "OID: " << notificationId << " ID: " << id << " Reason: " << reason << " Time: " << QTime::currentTime().toString();
643
	notificationId = 0;
644
}
645

  
615 646

  
616
	(void)QDBusConnection::sessionBus().call(msg); // Would return a message containing the id of this notification
647
void MainWin::desktopNotificationInvoked(uint id, const QString & action)
648
{
649
	qDebug() << "OID: " << notificationId << " ID: " << id << " Action: " << action << " Time: " << QTime::currentTime().toString();
617 650
}
618 651

  
619 652

  
src/qtui/mainwin.h
40 40
class NickListWidget;
41 41
class DebugConsole;
42 42

  
43
#include "desktopnotifications.h"
43 44

  
44 45
//!\brief The main window of Quassel's QtUi.
45 46
class MainWin : public QMainWindow {
......
97 98
    void loadLayout();
98 99
    void saveLayout();
99 100

  
101
	void desktopNotificationClosed(uint id, uint reason);
102
	void desktopNotificationInvoked(uint id, const QString & action);
103

  
100 104
  signals:
101 105
    void connectToCore(const QVariantMap &connInfo);
102 106
    void disconnectFromCore();
......
146 150
    QAction *actionEditNetworks;
147 151
    QList<QAction *> networkActions;
148 152

  
153
	org::freedesktop::Notifications *desktopNotifications;
154
	quint32 notificationId;
155

  
149 156
    friend class QtUi;
150 157
};
151 158

  
152
-