diff options
author | Wladimir J. van der Laan <laanwj@gmail.com> | 2014-05-07 08:15:22 +0200 |
---|---|---|
committer | Wladimir J. van der Laan <laanwj@gmail.com> | 2014-05-07 08:42:12 +0200 |
commit | 9d558e1c18a29bbccec802829f9b8b65fb4101a1 (patch) | |
tree | ede911626339470fb7b15a6cebe4ef4735a88051 | |
parent | 13d3adb651cc78e24e12dd2a8f55631b25681abf (diff) |
ui: Check for !pixmap() before trying to export QR code
Adds null pointer checks as well as prevents the Save/Copy context
menu from appearing at all if no image is shown.
Fixes issue #4140
-rw-r--r-- | src/qt/receiverequestdialog.cpp | 25 | ||||
-rw-r--r-- | src/qt/receiverequestdialog.h | 7 |
2 files changed, 26 insertions, 6 deletions
diff --git a/src/qt/receiverequestdialog.cpp b/src/qt/receiverequestdialog.cpp index b5e45341d9..062638f2bc 100644 --- a/src/qt/receiverequestdialog.cpp +++ b/src/qt/receiverequestdialog.cpp @@ -16,6 +16,7 @@ #include <QMimeData> #include <QMouseEvent> #include <QPixmap> +#include <QMenu> #if QT_VERSION < 0x050000 #include <QUrl> #endif @@ -29,26 +30,27 @@ #endif QRImageWidget::QRImageWidget(QWidget *parent): - QLabel(parent) + QLabel(parent), contextMenu(0) { - setContextMenuPolicy(Qt::ActionsContextMenu); - + contextMenu = new QMenu(); QAction *saveImageAction = new QAction(tr("&Save Image..."), this); connect(saveImageAction, SIGNAL(triggered()), this, SLOT(saveImage())); - addAction(saveImageAction); + contextMenu->addAction(saveImageAction); QAction *copyImageAction = new QAction(tr("&Copy Image"), this); connect(copyImageAction, SIGNAL(triggered()), this, SLOT(copyImage())); - addAction(copyImageAction); + contextMenu->addAction(copyImageAction); } QImage QRImageWidget::exportImage() { + if(!pixmap()) + return QImage(); return pixmap()->toImage().scaled(EXPORT_IMAGE_SIZE, EXPORT_IMAGE_SIZE); } void QRImageWidget::mousePressEvent(QMouseEvent *event) { - if(event->button() == Qt::LeftButton) + if(event->button() == Qt::LeftButton && pixmap()) { event->accept(); QMimeData *mimeData = new QMimeData; @@ -64,6 +66,8 @@ void QRImageWidget::mousePressEvent(QMouseEvent *event) void QRImageWidget::saveImage() { + if(!pixmap()) + return; QString fn = GUIUtil::getSaveFileName(this, tr("Save QR Code"), QString(), tr("PNG Image (*.png)"), NULL); if (!fn.isEmpty()) { @@ -73,9 +77,18 @@ void QRImageWidget::saveImage() void QRImageWidget::copyImage() { + if(!pixmap()) + return; QApplication::clipboard()->setImage(exportImage()); } +void QRImageWidget::contextMenuEvent(QContextMenuEvent *event) +{ + if(!pixmap()) + return; + contextMenu->exec(event->globalPos()); +} + ReceiveRequestDialog::ReceiveRequestDialog(QWidget *parent) : QDialog(parent), ui(new Ui::ReceiveRequestDialog), diff --git a/src/qt/receiverequestdialog.h b/src/qt/receiverequestdialog.h index 295a73031d..5614ac635a 100644 --- a/src/qt/receiverequestdialog.h +++ b/src/qt/receiverequestdialog.h @@ -15,6 +15,9 @@ namespace Ui { class ReceiveRequestDialog; } class OptionsModel; +QT_BEGIN_NAMESPACE +class QMenu; +QT_END_NAMESPACE /* Label widget for QR code. This image can be dragged, dropped, copied and saved * to disk. @@ -33,6 +36,10 @@ public slots: protected: virtual void mousePressEvent(QMouseEvent *event); + virtual void contextMenuEvent(QContextMenuEvent *event); + +private: + QMenu *contextMenu; }; class ReceiveRequestDialog : public QDialog |