diff --git a/gui/src/settingsdialog.cpp b/gui/src/settingsdialog.cpp index 2bae786..a76170e 100644 --- a/gui/src/settingsdialog.cpp +++ b/gui/src/settingsdialog.cpp @@ -90,6 +90,36 @@ SettingsDialog::SettingsDialog(Settings *settings, QWidget *parent) : QDialog(pa connect(disconnect_action_combo_box, SIGNAL(currentIndexChanged(int)), this, SLOT(DisconnectActionSelected())); general_layout->addRow(tr("Action on Disconnect:"), disconnect_action_combo_box); + + audio_device_combo_box = new QComboBox(this); + audio_device_combo_box->addItem(tr("Auto")); + auto current_audio_device = settings->GetAudioOutDevice(); + if(!current_audio_device.isEmpty()) + { + // temporarily add the selected device before async fetching is done + audio_device_combo_box->addItem(current_audio_device, current_audio_device); + audio_device_combo_box->setCurrentIndex(1); + } + connect(audio_device_combo_box, QOverload::of(&QComboBox::activated), this, [this](){ + this->settings->SetAudioOutDevice(audio_device_combo_box->currentData().toString()); + }); + + // do this async because it's slow, assuming availableDevices() is thread-safe + auto audio_devices_future = QtConcurrent::run([]() { + return QAudioDeviceInfo::availableDevices(QAudio::AudioOutput); + }); + auto audio_devices_future_watcher = new QFutureWatcher>(this); + connect(audio_devices_future_watcher, &QFutureWatcher>::finished, this, [this, audio_devices_future_watcher, settings]() { + auto available_devices = audio_devices_future_watcher->result(); + while(audio_device_combo_box->count() > 1) // remove all but "Auto" + audio_device_combo_box->removeItem(1); + for (QAudioDeviceInfo di : available_devices) + audio_device_combo_box->addItem(di.deviceName(), di.deviceName()); + int audio_out_device_index = audio_device_combo_box->findData(settings->GetAudioOutDevice()); + audio_device_combo_box->setCurrentIndex(audio_out_device_index < 0 ? 0 : audio_out_device_index); + }); + audio_devices_future_watcher->setFuture(audio_devices_future); + general_layout->addRow(tr("Audio Output Device:"), audio_device_combo_box); auto about_button = new QPushButton(tr("About Chiaki"), this); general_layout->addRow(about_button); @@ -153,36 +183,6 @@ SettingsDialog::SettingsDialog(Settings *settings, QWidget *parent) : QDialog(pa audio_buffer_size_edit->setPlaceholderText(tr("Default (%1)").arg(settings->GetAudioBufferSizeDefault())); connect(audio_buffer_size_edit, &QLineEdit::textEdited, this, &SettingsDialog::AudioBufferSizeEdited); - audio_device_combo_box = new QComboBox(this); - audio_device_combo_box->addItem(tr("Auto")); - auto current_audio_device = settings->GetAudioOutDevice(); - if(!current_audio_device.isEmpty()) - { - // temporarily add the selected device before async fetching is done - audio_device_combo_box->addItem(current_audio_device, current_audio_device); - audio_device_combo_box->setCurrentIndex(1); - } - connect(audio_device_combo_box, QOverload::of(&QComboBox::activated), this, [this](){ - this->settings->SetAudioOutDevice(audio_device_combo_box->currentData().toString()); - }); - - // do this async because it's slow, assuming availableDevices() is thread-safe - auto audio_devices_future = QtConcurrent::run([]() { - return QAudioDeviceInfo::availableDevices(QAudio::AudioOutput); - }); - auto audio_devices_future_watcher = new QFutureWatcher>(this); - connect(audio_devices_future_watcher, &QFutureWatcher>::finished, this, [this, audio_devices_future_watcher, settings]() { - auto available_devices = audio_devices_future_watcher->result(); - while(audio_device_combo_box->count() > 1) // remove all but "Auto" - audio_device_combo_box->removeItem(1); - for (QAudioDeviceInfo di : available_devices) - audio_device_combo_box->addItem(di.deviceName(), di.deviceName()); - int audio_out_device_index = audio_device_combo_box->findData(settings->GetAudioOutDevice()); - audio_device_combo_box->setCurrentIndex(audio_out_device_index < 0 ? 0 : audio_out_device_index); - }); - audio_devices_future_watcher->setFuture(audio_devices_future); - general_layout->addRow(tr("Audio Output Device:"), audio_device_combo_box); - // Decode Settings auto decode_settings = new QGroupBox(tr("Decode Settings"));