Skip to content

Commit

Permalink
(k)ubuntu 10.04+ notification support (based on @zwierzak his code)
Browse files Browse the repository at this point in the history
  • Loading branch information
laanwj committed Sep 3, 2011
1 parent 69e8763 commit cf9195c
Show file tree
Hide file tree
Showing 6 changed files with 337 additions and 29 deletions.
21 changes: 17 additions & 4 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@ Features

- Compatibility with Linux (both GNOME and KDE), MacOSX and Windows

- Splash screen
- Notification on incoming / outgoing transactions (compatible with FreeDesktop and other desktop notification schemes)

- Tabbed interface
- General interface improvements: Splash screen, tabbed interface

- Overview page with current balance, unconfirmed balance, and such

Expand All @@ -32,7 +32,7 @@ Features

- Address books and transaction table can be sorted by any column

- Accepts "bitcoin:" URLs from browsers through drag and drop
- Accepts "bitcoin:" URLs from browsers and other sources through drag and drop

Build instructions
===================
Expand Down Expand Up @@ -79,8 +79,11 @@ Windows build instructions:
.. [#] PGP signature: http://download.visucore.com/bitcoin/qtgui_deps_1.zip.sig (signed with RSA key ID `610945D0`_)
.. _`610945D0`: http://pgp.mit.edu:11371/pks/lookup?op=get&search=0x610945D0

Build configuration options
============================

UPNnP port forwarding
=====================
---------------------

To use UPnP for port forwarding behind a NAT router (recommended, as more connections overall allow for a faster and more stable bitcoin experience), pass the following argument to qmake:

Expand All @@ -103,6 +106,16 @@ Set USE_UPNP to a different value to control this:
| USE_UPNP=1 | UPnP support turned on by default at runtime. |
+------------+--------------------------------------------------------------+

Notification support for recent (k)ubuntu versions
---------------------------------------------------

To see desktop notifications on (k)ubuntu versions starting from 10.04, enable usage of the
FreeDesktop notification interface through DBUS using the following qmake option:

::

qmake "USE_DBUS=1"

Berkely DB version warning
==========================

Expand Down
12 changes: 10 additions & 2 deletions bitcoin-qt.pro
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,12 @@ count(USE_UPNP, 1) {
LIBS += -lminiupnpc
}

count(USE_DBUS, 1) {
message(Building with DBUS (Freedesktop notifications) support)
DEFINES += QT_DBUS
QT += dbus
}

# for extra security against potential buffer overflows
QMAKE_CXXFLAGS += -fstack-protector
QMAKE_LFLAGS += -fstack-protector
Expand Down Expand Up @@ -100,7 +106,8 @@ HEADERS += src/qt/bitcoingui.h \
src/qt/bitcoinunits.h \
src/qt/qvaluecombobox.h \
src/qt/askpassphrasedialog.h \
src/protocol.h
src/protocol.h \
src/qt/notificator.h

SOURCES += src/qt/bitcoin.cpp src/qt/bitcoingui.cpp \
src/qt/transactiontablemodel.cpp \
Expand Down Expand Up @@ -147,7 +154,8 @@ SOURCES += src/qt/bitcoin.cpp src/qt/bitcoingui.cpp \
src/qt/bitcoinunits.cpp \
src/qt/qvaluecombobox.cpp \
src/qt/askpassphrasedialog.cpp \
src/protocol.cpp
src/protocol.cpp \
src/qt/notificator.cpp

RESOURCES += \
src/qt/bitcoin.qrc
Expand Down
44 changes: 21 additions & 23 deletions src/qt/bitcoingui.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
#include "bitcoinunits.h"
#include "guiconstants.h"
#include "askpassphrasedialog.h"
#include "notificator.h"

#include <QApplication>
#include <QMainWindow>
Expand Down Expand Up @@ -51,7 +52,8 @@ BitcoinGUI::BitcoinGUI(QWidget *parent):
walletModel(0),
encryptWalletAction(0),
changePassphraseAction(0),
trayIcon(0)
trayIcon(0),
notificator(0)
{
resize(850, 550);
setWindowTitle(tr("Bitcoin Wallet"));
Expand Down Expand Up @@ -287,6 +289,8 @@ void BitcoinGUI::createTrayIcon()
connect(trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)),
this, SLOT(trayIconActivated(QSystemTrayIcon::ActivationReason)));
trayIcon->show();

notificator = new Notificator(tr("bitcoin-qt"), trayIcon);
}

void BitcoinGUI::trayIconActivated(QSystemTrayIcon::ActivationReason reason)
Expand Down Expand Up @@ -394,18 +398,7 @@ void BitcoinGUI::setNumBlocks(int count)
void BitcoinGUI::error(const QString &title, const QString &message)
{
// Report errors from network/worker thread
if(trayIcon->supportsMessages())
{
// Show as "balloon" message if possible
trayIcon->showMessage(title, message, QSystemTrayIcon::Critical);
}
else
{
// Fall back to old fashioned popup dialog if not
QMessageBox::critical(this, title,
message,
QMessageBox::Ok, QMessageBox::Ok);
}
notificator->notify(Notificator::Critical, title, message);
}

void BitcoinGUI::changeEvent(QEvent *e)
Expand Down Expand Up @@ -453,8 +446,6 @@ void BitcoinGUI::askFee(qint64 nFeeRequired, bool *payFee)

void BitcoinGUI::incomingTransaction(const QModelIndex & parent, int start, int end)
{
if(start == end)
return;
TransactionTableModel *ttm = walletModel->getTransactionTableModel();
qint64 amount = ttm->index(start, TransactionTableModel::Amount, parent)
.data(Qt::EditRole).toULongLong();
Expand All @@ -468,14 +459,21 @@ void BitcoinGUI::incomingTransaction(const QModelIndex & parent, int start, int
.data().toString();
QString address = ttm->index(start, TransactionTableModel::ToAddress, parent)
.data().toString();

trayIcon->showMessage((amount)<0 ? tr("Sent transaction") :
tr("Incoming transaction"),
tr("Date: ") + date + "\n" +
tr("Amount: ") + BitcoinUnits::formatWithUnit(walletModel->getOptionsModel()->getDisplayUnit(), amount, true) + "\n" +
tr("Type: ") + type + "\n" +
tr("Address: ") + address + "\n",
QSystemTrayIcon::Information);
QIcon icon = qvariant_cast<QIcon>(ttm->index(start,
TransactionTableModel::ToAddress, parent)
.data(Qt::DecorationRole));

notificator->notify(Notificator::Information,
(amount)<0 ? tr("Sent transaction") :
tr("Incoming transaction"),
tr("Date: %1\n"
"Amount: %2\n"
"Type: %3\n"
"Address: %4\n")
.arg(date)
.arg(BitcoinUnits::formatWithUnit(walletModel->getOptionsModel()->getDisplayUnit(), amount, true))
.arg(type)
.arg(address), icon);
}
}

Expand Down
2 changes: 2 additions & 0 deletions src/qt/bitcoingui.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ class TransactionView;
class OverviewPage;
class AddressBookPage;
class SendCoinsDialog;
class Notificator;

QT_BEGIN_NAMESPACE
class QLabel;
Expand Down Expand Up @@ -77,6 +78,7 @@ class BitcoinGUI : public QMainWindow
QAction *changePassphraseAction;

QSystemTrayIcon *trayIcon;
Notificator *notificator;
TransactionView *transactionView;

QMovie *syncIconMovie;
Expand Down
Loading

0 comments on commit cf9195c

Please sign in to comment.