diff --git a/src/airplaywindow.cpp b/src/airplaywindow.cpp index 4646c0b..1c9de58 100644 --- a/src/airplaywindow.cpp +++ b/src/airplaywindow.cpp @@ -56,11 +56,14 @@ #include #include "diagnosedialog.h" +#ifdef WIN32 #include "platform/windows/check_deps.h" +#endif #include "toolboxwidget.h" AirPlaySettings::AirPlaySettings() - : fps(SettingsManager::sharedInstance()->airplayFps()) + : fps(SettingsManager::sharedInstance()->airplayFps()), + noHold(SettingsManager::sharedInstance()->airplayNoHold()) { } @@ -72,7 +75,8 @@ QStringList AirPlaySettings::toArgs() const args << "-fps" << QString::number(fps); // Allow new connections to take over - args << "-nohold"; + if (noHold) + args << "-nohold"; return args; } @@ -110,8 +114,13 @@ void AirPlaySettingsDialog::setupUI() fpsLayout->addWidget(fpsFootnote); videoLayout->addRow("Max FPS:", fpsLayout); - mainLayout->addWidget(videoGroup); + m_noHoldCheckbox = new QCheckBox("Allow New Connections to Take Over"); + m_noHoldCheckbox->setChecked( + SettingsManager::sharedInstance()->airplayNoHold()); + videoLayout->addRow(m_noHoldCheckbox); + + mainLayout->addWidget(videoGroup); // Buttons QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); @@ -124,6 +133,7 @@ AirPlaySettings AirPlaySettingsDialog::getSettings() const { AirPlaySettings settings; settings.fps = m_fpsComboBox->currentText().toInt(); + settings.noHold = m_noHoldCheckbox->isChecked(); return settings; } @@ -305,7 +315,8 @@ void AirPlayWindow::showSettingsDialog() // Save settings SettingsManager::sharedInstance()->setAirplayFps(newSettings.fps); - + SettingsManager::sharedInstance()->setAirplayNoHold(newSettings.noHold); + QMessageBox::information(this, "Settings Saved", "AirPlay will be restarted to apply the new " "settings."); diff --git a/src/airplaywindow.h b/src/airplaywindow.h index c7e5ffc..1e6e5c0 100644 --- a/src/airplaywindow.h +++ b/src/airplaywindow.h @@ -73,6 +73,7 @@ class AirPlaySettings public: explicit AirPlaySettings(); int fps; + bool noHold; QStringList toArgs() const; }; @@ -88,6 +89,7 @@ private: void setupUI(); QComboBox *m_fpsComboBox; + QCheckBox *m_noHoldCheckbox; AirPlaySettings m_settings; }; diff --git a/src/settingsmanager.cpp b/src/settingsmanager.cpp index 8666dd6..466b758 100644 --- a/src/settingsmanager.cpp +++ b/src/settingsmanager.cpp @@ -235,6 +235,12 @@ void SettingsManager::resetToDefaults() setConnectionTimeout(30); setShowKeychainDialog(true); setDefaultJailbrokenRootPassword("alpine"); + setIconSizeBaseMultiplier(1.0); + setAirplayFps(60); + setAirplayNoHold(true); +#ifdef __linux__ + setShowV4L2(false); +#endif } void SettingsManager::saveFavoritePlace(const QString &path, @@ -403,6 +409,16 @@ void SettingsManager::setAirplayFps(int fps) m_settings->sync(); } +bool SettingsManager::airplayNoHold() const +{ + return m_settings->value("airplayNoHold", true).toBool(); +} +void SettingsManager::setAirplayNoHold(bool noHold) +{ + m_settings->setValue("airplayNoHold", noHold); + m_settings->sync(); +} + #ifdef __linux__ bool SettingsManager::showV4L2() const { diff --git a/src/settingsmanager.h b/src/settingsmanager.h index 4bc0239..06e5460 100644 --- a/src/settingsmanager.h +++ b/src/settingsmanager.h @@ -108,6 +108,10 @@ public: int airplayFps() const; void setAirplayFps(int fps); + + bool airplayNoHold() const; + void setAirplayNoHold(bool noHold); + #ifdef __linux__ bool showV4L2() const; void setShowV4L2(bool show); diff --git a/src/settingswidget.cpp b/src/settingswidget.cpp index f72add1..e7e0a59 100644 --- a/src/settingswidget.cpp +++ b/src/settingswidget.cpp @@ -165,16 +165,20 @@ void SettingsWidget::setupUI() auto *fpsLayout = new QHBoxLayout(); auto *fpsLabel = new QLabel("Fps:"); - m_airplayFpsSpinBox = new QSpinBox(); - m_airplayFpsSpinBox->setRange(1, 255); - m_airplayFpsSpinBox->setToolTip( + m_fpsComboBox = new QComboBox(); + m_fpsComboBox->addItems({"24", "30", "60", "120"}); + m_fpsComboBox->setToolTip( "Set the fps for AirPlay. Go with 30 fps if have an older device."); fpsLayout->addWidget(fpsLabel); - fpsLayout->addWidget(m_airplayFpsSpinBox); + fpsLayout->addWidget(m_fpsComboBox); fpsLayout->addStretch(); airplayLayout->addLayout(fpsLayout); + m_noHoldCheckbox = new QCheckBox("Allow New Connections to Take Over"); + airplayLayout->addWidget(m_noHoldCheckbox); + + #ifdef __linux__ m_showV4L2CheckBox = new QCheckBox("Show V4L2 Button on AirPlay Widget"); airplayLayout->addWidget(m_showV4L2CheckBox); @@ -279,7 +283,8 @@ void SettingsWidget::loadSettings() m_applyButton->setEnabled(false); m_iconSizeBaseMultiplier->setValue(sm->iconSizeBaseMultiplier()); - m_airplayFpsSpinBox->setValue(sm->airplayFps()); + m_fpsComboBox->setCurrentText(QString::number(sm->airplayFps())); + m_noHoldCheckbox->setChecked(sm->airplayNoHold()); #ifdef __linux__ m_showV4L2CheckBox->setChecked(sm->showV4L2()); #endif @@ -334,6 +339,14 @@ void SettingsWidget::connectSignals() connect(m_defaultJailbrokenRootPassword, &QLineEdit::textChanged, this, &SettingsWidget::onSettingChanged); + connect(m_fpsComboBox, QOverload::of(&QComboBox::currentIndexChanged), this, + &SettingsWidget::onSettingChanged); + connect(m_noHoldCheckbox, &QCheckBox::toggled, this, + &SettingsWidget::onSettingChanged); +#ifdef __linux__ + connect(m_showV4L2CheckBox, &QCheckBox::toggled, this, + &SettingsWidget::onSettingChanged); +#endif } void SettingsWidget::onBrowseButtonClicked() @@ -420,7 +433,8 @@ void SettingsWidget::saveSettings() sm->setIconSizeBaseMultiplier(m_iconSizeBaseMultiplier->value()); - sm->setAirplayFps(m_airplayFpsSpinBox->value()); + sm->setAirplayFps(m_fpsComboBox->currentText().toInt()); + sm->setAirplayNoHold(m_noHoldCheckbox->isChecked()); #ifdef __linux__ sm->setShowV4L2(m_showV4L2CheckBox->isChecked()); #endif diff --git a/src/settingswidget.h b/src/settingswidget.h index bb4a1fc..36705cc 100644 --- a/src/settingswidget.h +++ b/src/settingswidget.h @@ -69,7 +69,8 @@ private: QDoubleSpinBox *m_iconSizeBaseMultiplier; // Airplay - QSpinBox *m_airplayFpsSpinBox; + QComboBox *m_fpsComboBox; + QCheckBox *m_noHoldCheckbox; #ifdef __linux__ QCheckBox *m_showV4L2CheckBox;