Skip to content

Commit c7e534f

Browse files
gui: Fix multiple dialogs for same tx in TransactionView
Only one tx details dialog that a user can open per tx id is enough.
1 parent 0c4ff18 commit c7e534f

4 files changed

+28
-8
lines changed

src/qt/transactiondescdialog.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ TransactionDescDialog::TransactionDescDialog(const QModelIndex &idx, QWidget *pa
1515
ui(new Ui::TransactionDescDialog)
1616
{
1717
ui->setupUi(this);
18-
setWindowTitle(tr("Details for %1").arg(idx.data(TransactionTableModel::TxHashRole).toString()));
18+
m_transaction_id = idx.data(TransactionTableModel::TxHashRole).toString();
19+
setWindowTitle(tr("Details for %1").arg(m_transaction_id));
1920
QString desc = idx.data(TransactionTableModel::LongDescriptionRole).toString();
2021
ui->detailText->setHtml(desc);
2122

src/qt/transactiondescdialog.h

+4
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#define BITCOIN_QT_TRANSACTIONDESCDIALOG_H
77

88
#include <QDialog>
9+
#include <QString>
910

1011
namespace Ui {
1112
class TransactionDescDialog;
@@ -24,8 +25,11 @@ class TransactionDescDialog : public QDialog
2425
explicit TransactionDescDialog(const QModelIndex &idx, QWidget *parent = nullptr);
2526
~TransactionDescDialog();
2627

28+
QString getTransactionId() {return m_transaction_id;};
29+
2730
private:
2831
Ui::TransactionDescDialog *ui;
32+
QString m_transaction_id;
2933
};
3034

3135
#endif // BITCOIN_QT_TRANSACTIONDESCDIALOG_H

src/qt/transactionview.cpp

+21-7
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
#include <QPoint>
3636
#include <QScrollBar>
3737
#include <QSettings>
38+
#include <QString>
3839
#include <QTableView>
3940
#include <QTimer>
4041
#include <QUrl>
@@ -528,13 +529,15 @@ void TransactionView::showDetails()
528529
QModelIndexList selection = transactionView->selectionModel()->selectedRows();
529530
if(!selection.isEmpty())
530531
{
531-
TransactionDescDialog *dlg = new TransactionDescDialog(selection.at(0));
532-
dlg->setAttribute(Qt::WA_DeleteOnClose);
533-
m_opened_dialogs.append(dlg);
534-
connect(dlg, &QObject::destroyed, [this, dlg] {
535-
m_opened_dialogs.removeOne(dlg);
536-
});
537-
dlg->show();
532+
if(!detailsAlreadyShown(selection.at(0))) {
533+
TransactionDescDialog *dlg = new TransactionDescDialog(selection.at(0));
534+
dlg->setAttribute(Qt::WA_DeleteOnClose);
535+
m_opened_dialogs.append(dlg);
536+
connect(dlg, &QObject::destroyed, [this, dlg] {
537+
m_opened_dialogs.removeOne(dlg);
538+
});
539+
dlg->show();
540+
}
538541
}
539542
}
540543

@@ -663,3 +666,14 @@ void TransactionView::closeOpenedDialogs()
663666
}
664667
m_opened_dialogs.clear();
665668
}
669+
670+
bool TransactionView::detailsAlreadyShown(const QModelIndex &idx)
671+
{
672+
for (TransactionDescDialog* dlg : m_opened_dialogs) {
673+
if (dlg->getTransactionId() == idx.data(TransactionTableModel::TxHashRole).toString()) {
674+
GUIUtil::bringToFront(dlg);
675+
return true;
676+
}
677+
}
678+
return false;
679+
}

src/qt/transactionview.h

+1
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ private Q_SLOTS:
108108
void updateWatchOnlyColumn(bool fHaveWatchOnly);
109109
void abandonTx();
110110
void bumpFee(bool checked);
111+
bool detailsAlreadyShown(const QModelIndex &idx);
111112

112113
Q_SIGNALS:
113114
void doubleClicked(const QModelIndex&);

0 commit comments

Comments
 (0)