diff --git a/transferdialog.cpp b/transferdialog.cpp index 10f23dd414173e5304d4264112a478d1d40f2497..df9da4060255c7522bf48412e04eea3bb19469a4 100644 --- a/transferdialog.cpp +++ b/transferdialog.cpp @@ -31,15 +31,13 @@ TransferDialog::TransferDialog(QWidget *parent) : this->setWindowFlags(Qt::CustomizeWindowHint); this->setWindowFlags(Qt::FramelessWindowHint); - activeProxy_ = new ActiveCallsProxyModel(CallModel::instance()); - activeProxy_->setDynamicSortFilter(false); - ui->activeCallsView->setModel(activeProxy_); + auto activeProxy = new ActiveCallsProxyModel(CallModel::instance()); + ui->activeCallsView->setModel(activeProxy); ui->activeCallsView->clearSelection(); } TransferDialog::~TransferDialog() { - removeProxyModel(); delete ui; } @@ -55,10 +53,8 @@ TransferDialog::showEvent(QShowEvent *event) void TransferDialog::on_transferButton_clicked() { - removeProxyModel(); - auto callList = CallModel::instance()->getActiveCalls(); - Q_FOREACH(Call* c, callList) { + for (auto c : callList) { if (c->state() == Call::State::CURRENT) { if (not ui->numberBar->text().isEmpty()) { auto number = PhoneDirectoryModel::instance()->getNumber(ui->numberBar->text()); @@ -72,29 +68,18 @@ TransferDialog::on_transferButton_clicked() } } -void TransferDialog::removeProxyModel() -{ - //This prevent a crash happening in Qt5.5 in QSortFilterProxyModel - ui->activeCallsView->setModel(nullptr); - if (activeProxy_) { - delete activeProxy_; - activeProxy_ = nullptr; - } -} - void TransferDialog::on_activeCallsView_doubleClicked(const QModelIndex &index) { - Q_UNUSED(index) - - removeProxyModel(); - auto callList = CallModel::instance()->getActiveCalls(); - Q_FOREACH(Call* c, callList) { + for (auto c : callList) { if (c->state() == Call::State::CURRENT) { - CallModel::instance()->attendedTransfer(c, selectedCall_); + auto selectedCall = CallModel::instance()->getCall(index); + if (c != selectedCall) { + CallModel::instance()->attendedTransfer(c, selectedCall); this->close(); return; + } } } } diff --git a/transferdialog.h b/transferdialog.h index a28fce0daa1330dbea41937bfdd008c9a6d7e419..0448af032a60584057e4f141d767ea37ef3ad082 100644 --- a/transferdialog.h +++ b/transferdialog.h @@ -36,13 +36,8 @@ public: } virtual bool filterAcceptsRow(int source_row, const QModelIndex& source_parent) const { - if (not sourceModel() || source_parent.isValid()) - return false; - auto idx = sourceModel()->index(source_row,0,source_parent); - if (not idx.isValid()) - return false; - return idx.data(static_cast<int>(Call::Role::State)) - .value<Call::State>() != Call::State::CURRENT; + return sourceModel()->index(source_row,0,source_parent) + .data(static_cast<int>(Call::Role::State)).value<Call::State>() != Call::State::CURRENT; } }; @@ -66,8 +61,5 @@ private slots: private: Ui::TransferDialog *ui; Call *selectedCall_; - ActiveCallsProxyModel *activeProxy_; - - void removeProxyModel(); };