Skip to content

Commit b26d2e8

Browse files
gui: Fix multiple dialogs for same tx in TransactionView
Limit to one the transaction details dialogs that a user can open.
1 parent e319569 commit b26d2e8

4 files changed

+27
-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
@@ -24,8 +24,12 @@ class TransactionDescDialog : public QDialog
2424
explicit TransactionDescDialog(const QModelIndex &idx, QWidget *parent = nullptr);
2525
~TransactionDescDialog();
2626

27+
QString getTransactionId() {return m_transaction_id;};
28+
2729
private:
2830
Ui::TransactionDescDialog *ui;
31+
QString m_transaction_id;
32+
2933
};
3034

3135
#endif // BITCOIN_QT_TRANSACTIONDESCDIALOG_H

src/qt/transactionview.cpp

+20-7
Original file line numberDiff line numberDiff line change
@@ -528,13 +528,15 @@ void TransactionView::showDetails()
528528
QModelIndexList selection = transactionView->selectionModel()->selectedRows();
529529
if(!selection.isEmpty())
530530
{
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();
531+
if(!detailsAlreadyShown(selection.at(0))) {
532+
TransactionDescDialog *dlg = new TransactionDescDialog(selection.at(0));
533+
dlg->setAttribute(Qt::WA_DeleteOnClose);
534+
m_opened_dialogs.append(dlg);
535+
connect(dlg, &QObject::destroyed, [this, dlg] {
536+
m_opened_dialogs.removeOne(dlg);
537+
});
538+
dlg->show();
539+
}
538540
}
539541
}
540542

@@ -663,3 +665,14 @@ void TransactionView::closeOpenedDialogs()
663665
}
664666
m_opened_dialogs.clear();
665667
}
668+
669+
bool TransactionView::detailsAlreadyShown(const QModelIndex &idx)
670+
{
671+
for (TransactionDescDialog* dlg : m_opened_dialogs) {
672+
if (dlg->getTransactionId() == idx.data(TransactionTableModel::TxHashRole).toString()) {
673+
dlg->activateWindow();
674+
return true;
675+
}
676+
}
677+
return false;
678+
}

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)