diff options
author | Berthold Stoeger <bstoeger@mail.tuwien.ac.at> | 2017-11-04 15:09:07 +0100 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2017-11-04 09:27:24 -0700 |
commit | 617c6d3564e562df580824280654d9edaf238084 (patch) | |
tree | 4698ded015b6179a92f9ac7dcf06a52ea5990ca5 | |
parent | a64b70db4a36f11dbd22b4bc6a35f616061e0241 (diff) | |
download | subsurface-617c6d3564e562df580824280654d9edaf238084.tar.gz |
Replace itemClicked() by currentItemChanged() in Bt device selection
This fixes two problems:
1) Using the keybord or clicking below the list and moving the mouse
up while holding the mouse button did not properly update the status
message and the save button. For example, one could save with a non-
paired device selected.
2) The code assumed that a device is selected if the save button is
active, but the save button was not disabled on scan. Thus, one could
provoke a crash by selecting an item, scanning and then pressing save.
This problem is fixed indirectly, because the save button is now always
disabled if the selection is cleared.
Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
-rw-r--r-- | desktop-widgets/btdeviceselectiondialog.cpp | 13 | ||||
-rw-r--r-- | desktop-widgets/btdeviceselectiondialog.h | 2 |
2 files changed, 10 insertions, 5 deletions
diff --git a/desktop-widgets/btdeviceselectiondialog.cpp b/desktop-widgets/btdeviceselectiondialog.cpp index cf70daa3f..74ce44cb1 100644 --- a/desktop-widgets/btdeviceselectiondialog.cpp +++ b/desktop-widgets/btdeviceselectiondialog.cpp @@ -46,8 +46,8 @@ BtDeviceSelectionDialog::BtDeviceSelectionDialog(QWidget *parent) : ui->save->setEnabled(false); // Add event for item selection - connect(ui->discoveredDevicesList, SIGNAL(itemClicked(QListWidgetItem*)), - this, SLOT(itemClicked(QListWidgetItem*))); + connect(ui->discoveredDevicesList, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), + this, SLOT(currentItemChanged(QListWidgetItem*,QListWidgetItem*))); #if defined(Q_OS_WIN) ULONG ulRetCode = SUCCESS; @@ -172,7 +172,6 @@ void BtDeviceSelectionDialog::on_clear_clicked() { ui->dialogStatus->setText(tr("Remote devices list was cleared.")); ui->discoveredDevicesList->clear(); - ui->save->setEnabled(false); if (remoteDeviceDiscoveryAgent->isActive()) { // Stop the SDP agent if the clear button is pressed and enable the Scan button @@ -263,8 +262,14 @@ void BtDeviceSelectionDialog::addRemoteDevice(const QBluetoothDeviceInfo &remote ui->discoveredDevicesList->addItem(item); } -void BtDeviceSelectionDialog::itemClicked(QListWidgetItem *item) +void BtDeviceSelectionDialog::currentItemChanged(QListWidgetItem *item, QListWidgetItem *) { + // If the list is cleared, we get a signal with a null item pointer + if (!item) { + ui->save->setEnabled(false); + return; + } + // By default we assume that the devices are paired QBluetoothDeviceInfo remoteDeviceInfo = item->data(Qt::UserRole).value<QBluetoothDeviceInfo>(); QString statusMessage = tr("The device %1 can be used for connection. You can press the Save button.") diff --git a/desktop-widgets/btdeviceselectiondialog.h b/desktop-widgets/btdeviceselectiondialog.h index f3cfa3413..448404843 100644 --- a/desktop-widgets/btdeviceselectiondialog.h +++ b/desktop-widgets/btdeviceselectiondialog.h @@ -68,7 +68,7 @@ private slots: void remoteDeviceScanFinished(); void hostModeStateChanged(QBluetoothLocalDevice::HostMode mode); void addRemoteDevice(const QBluetoothDeviceInfo &remoteDeviceInfo); - void itemClicked(QListWidgetItem *item); + void currentItemChanged(QListWidgetItem *item,QListWidgetItem *previous); void displayPairingMenu(const QPoint &pos); void pairingFinished(const QBluetoothAddress &address,QBluetoothLocalDevice::Pairing pairing); void error(QBluetoothLocalDevice::Error error); |