aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Berthold Stoeger <bstoeger@mail.tuwien.ac.at>2017-11-04 15:09:07 +0100
committerGravatar Dirk Hohndel <dirk@hohndel.org>2017-11-04 09:27:24 -0700
commit617c6d3564e562df580824280654d9edaf238084 (patch)
tree4698ded015b6179a92f9ac7dcf06a52ea5990ca5
parenta64b70db4a36f11dbd22b4bc6a35f616061e0241 (diff)
downloadsubsurface-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.cpp13
-rw-r--r--desktop-widgets/btdeviceselectiondialog.h2
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);