mirror of
https://github.com/stenzek/duckstation.git
synced 2025-07-19 00:20:12 +00:00
Qt: Avoid wildcard disconnect
See https://bugreports.qt.io/browse/QTBUG-134610
This commit is contained in:
parent
4b62ccf2ff
commit
6ae334b30c
@ -168,7 +168,7 @@ void AudioSettingsWidget::updateDeviceNames()
|
|||||||
std::vector<AudioStream::DeviceInfo> devices =
|
std::vector<AudioStream::DeviceInfo> devices =
|
||||||
AudioStream::GetOutputDevices(backend, driver_name.c_str(), SPU::SAMPLE_RATE);
|
AudioStream::GetOutputDevices(backend, driver_name.c_str(), SPU::SAMPLE_RATE);
|
||||||
|
|
||||||
m_ui.outputDevice->disconnect();
|
SettingWidgetBinder::DisconnectWidget(m_ui.outputDevice);
|
||||||
m_ui.outputDevice->clear();
|
m_ui.outputDevice->clear();
|
||||||
m_output_device_latency = 0;
|
m_output_device_latency = 0;
|
||||||
|
|
||||||
|
@ -870,7 +870,7 @@ void GraphicsSettingsWidget::populateGPUAdaptersAndResolutions(RenderAPI render_
|
|||||||
SettingsInterface* const sif = m_dialog->getSettingsInterface();
|
SettingsInterface* const sif = m_dialog->getSettingsInterface();
|
||||||
|
|
||||||
{
|
{
|
||||||
m_ui.adapter->disconnect();
|
SettingWidgetBinder::DisconnectWidget(m_ui.adapter);
|
||||||
m_ui.adapter->clear();
|
m_ui.adapter->clear();
|
||||||
m_ui.adapter->addItem(tr("Default"), QVariant(QString()));
|
m_ui.adapter->addItem(tr("Default"), QVariant(QString()));
|
||||||
|
|
||||||
@ -906,7 +906,7 @@ void GraphicsSettingsWidget::populateGPUAdaptersAndResolutions(RenderAPI render_
|
|||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
m_ui.fullscreenMode->disconnect();
|
SettingWidgetBinder::DisconnectWidget(m_ui.fullscreenMode);
|
||||||
m_ui.fullscreenMode->clear();
|
m_ui.fullscreenMode->clear();
|
||||||
|
|
||||||
m_ui.fullscreenMode->addItem(tr("Borderless Fullscreen"), QVariant(QString()));
|
m_ui.fullscreenMode->addItem(tr("Borderless Fullscreen"), QVariant(QString()));
|
||||||
@ -944,7 +944,7 @@ void GraphicsSettingsWidget::populateGPUAdaptersAndResolutions(RenderAPI render_
|
|||||||
|
|
||||||
if (!m_dialog->hasGameTrait(GameDatabase::Trait::DisableUpscaling))
|
if (!m_dialog->hasGameTrait(GameDatabase::Trait::DisableUpscaling))
|
||||||
{
|
{
|
||||||
m_ui.resolutionScale->disconnect();
|
SettingWidgetBinder::DisconnectWidget(m_ui.resolutionScale);
|
||||||
m_ui.resolutionScale->clear();
|
m_ui.resolutionScale->clear();
|
||||||
|
|
||||||
const int max_scale =
|
const int max_scale =
|
||||||
@ -957,7 +957,7 @@ void GraphicsSettingsWidget::populateGPUAdaptersAndResolutions(RenderAPI render_
|
|||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
m_ui.msaaMode->disconnect();
|
SettingWidgetBinder::DisconnectWidget(m_ui.msaaMode);
|
||||||
m_ui.msaaMode->clear();
|
m_ui.msaaMode->clear();
|
||||||
|
|
||||||
if (m_dialog->isPerGameSettings())
|
if (m_dialog->isPerGameSettings())
|
||||||
@ -1115,7 +1115,7 @@ void GraphicsSettingsWidget::onMediaCaptureBackendChanged()
|
|||||||
.value_or(Settings::DEFAULT_MEDIA_CAPTURE_BACKEND);
|
.value_or(Settings::DEFAULT_MEDIA_CAPTURE_BACKEND);
|
||||||
|
|
||||||
{
|
{
|
||||||
m_ui.captureContainer->disconnect();
|
SettingWidgetBinder::DisconnectWidget(m_ui.captureContainer);
|
||||||
m_ui.captureContainer->clear();
|
m_ui.captureContainer->clear();
|
||||||
|
|
||||||
for (const auto& [name, display_name] : MediaCapture::GetContainerList(backend))
|
for (const auto& [name, display_name] : MediaCapture::GetContainerList(backend))
|
||||||
@ -1146,7 +1146,7 @@ void GraphicsSettingsWidget::onMediaCaptureContainerChanged()
|
|||||||
const std::string container = m_dialog->getEffectiveStringValue("MediaCapture", "Container", "mp4");
|
const std::string container = m_dialog->getEffectiveStringValue("MediaCapture", "Container", "mp4");
|
||||||
|
|
||||||
{
|
{
|
||||||
m_ui.videoCaptureCodec->disconnect();
|
SettingWidgetBinder::DisconnectWidget(m_ui.videoCaptureCodec);
|
||||||
m_ui.videoCaptureCodec->clear();
|
m_ui.videoCaptureCodec->clear();
|
||||||
m_ui.videoCaptureCodec->addItem(tr("Default"), QVariant(QString()));
|
m_ui.videoCaptureCodec->addItem(tr("Default"), QVariant(QString()));
|
||||||
|
|
||||||
@ -1160,7 +1160,7 @@ void GraphicsSettingsWidget::onMediaCaptureContainerChanged()
|
|||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
m_ui.audioCaptureCodec->disconnect();
|
SettingWidgetBinder::DisconnectWidget(m_ui.audioCaptureCodec);
|
||||||
m_ui.audioCaptureCodec->clear();
|
m_ui.audioCaptureCodec->clear();
|
||||||
m_ui.audioCaptureCodec->addItem(tr("Default"), QVariant(QString()));
|
m_ui.audioCaptureCodec->addItem(tr("Default"), QVariant(QString()));
|
||||||
|
|
||||||
|
@ -201,7 +201,7 @@ void SettingsWindow::reloadPages()
|
|||||||
if (isPerGameSettings())
|
if (isPerGameSettings())
|
||||||
{
|
{
|
||||||
m_game_summary->reloadGameSettings();
|
m_game_summary->reloadGameSettings();
|
||||||
m_ui.safeMode->disconnect();
|
SettingWidgetBinder::DisconnectWidget(m_ui.safeMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_widget_help_text_map.clear();
|
m_widget_help_text_map.clear();
|
||||||
|
@ -70,6 +70,8 @@ struct SettingAccessor
|
|||||||
|
|
||||||
template<typename F>
|
template<typename F>
|
||||||
static void connectValueChanged(T* widget, F func);
|
static void connectValueChanged(T* widget, F func);
|
||||||
|
|
||||||
|
static void disconnect(T* widget);
|
||||||
};
|
};
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
@ -121,6 +123,8 @@ struct SettingAccessor<QLineEdit>
|
|||||||
{
|
{
|
||||||
widget->connect(widget, &QLineEdit::textChanged, func);
|
widget->connect(widget, &QLineEdit::textChanged, func);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void disconnect(QLineEdit* widget) { QObject::disconnect(widget, &QLineEdit::textChanged, nullptr, nullptr); }
|
||||||
};
|
};
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
@ -210,6 +214,12 @@ struct SettingAccessor<QComboBox>
|
|||||||
{
|
{
|
||||||
widget->connect(widget, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), func);
|
widget->connect(widget, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), func);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void disconnect(QComboBox* widget)
|
||||||
|
{
|
||||||
|
QObject::disconnect(widget, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), nullptr,
|
||||||
|
nullptr);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
@ -280,6 +290,11 @@ struct SettingAccessor<QCheckBox>
|
|||||||
{
|
{
|
||||||
widget->connect(widget, &QCheckBox::checkStateChanged, func);
|
widget->connect(widget, &QCheckBox::checkStateChanged, func);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void disconnect(QCheckBox* widget)
|
||||||
|
{
|
||||||
|
QObject::disconnect(widget, &QCheckBox::checkStateChanged, nullptr, nullptr);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
@ -389,6 +404,13 @@ struct SettingAccessor<QSlider>
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void disconnect(QSlider* widget)
|
||||||
|
{
|
||||||
|
QObject::disconnect(widget, &QSlider::valueChanged, nullptr, nullptr);
|
||||||
|
if (isNullable(widget))
|
||||||
|
QObject::disconnect(widget, &QSlider::customContextMenuRequested, nullptr, nullptr);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
@ -521,6 +543,13 @@ struct SettingAccessor<QSpinBox>
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void disconnect(QSpinBox* widget)
|
||||||
|
{
|
||||||
|
QObject::disconnect(widget, QOverload<int>::of(&QSpinBox::valueChanged), nullptr, nullptr);
|
||||||
|
if (isNullable(widget))
|
||||||
|
QObject::disconnect(widget, &QSpinBox::customContextMenuRequested, nullptr, nullptr);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
@ -654,6 +683,13 @@ struct SettingAccessor<QDoubleSpinBox>
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void disconnect(QDoubleSpinBox* widget)
|
||||||
|
{
|
||||||
|
QObject::disconnect(widget, QOverload<double>::of(&QDoubleSpinBox::valueChanged), nullptr, nullptr);
|
||||||
|
if (isNullable(widget))
|
||||||
|
QObject::disconnect(widget, &QDoubleSpinBox::customContextMenuRequested, nullptr, nullptr);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
@ -702,6 +738,8 @@ struct SettingAccessor<QAction>
|
|||||||
{
|
{
|
||||||
widget->connect(widget, &QAction::toggled, func);
|
widget->connect(widget, &QAction::toggled, func);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void disconnect(QAction* widget) { QObject::disconnect(widget, &QAction::toggled, nullptr, nullptr); }
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Binds a widget's value to a setting, updating it when the value changes.
|
/// Binds a widget's value to a setting, updating it when the value changes.
|
||||||
@ -1492,4 +1530,11 @@ static inline void SetAvailability(WidgetType* widget, bool available)
|
|||||||
widget->setEnabled(false);
|
widget->setEnabled(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename WidgetType>
|
||||||
|
static inline void DisconnectWidget(WidgetType* widget)
|
||||||
|
{
|
||||||
|
using Accessor = SettingAccessor<WidgetType>;
|
||||||
|
Accessor::disconnect(widget);
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace SettingWidgetBinder
|
} // namespace SettingWidgetBinder
|
||||||
|
@ -518,7 +518,7 @@ void SetupWizardDialog::doMultipleDeviceAutomaticBinding(u32 port, QLabel* updat
|
|||||||
|
|
||||||
void SetupWizardDialog::setupGraphicsPage(bool initial)
|
void SetupWizardDialog::setupGraphicsPage(bool initial)
|
||||||
{
|
{
|
||||||
m_ui.renderer->disconnect();
|
SettingWidgetBinder::DisconnectWidget(m_ui.renderer);
|
||||||
m_ui.renderer->clear();
|
m_ui.renderer->clear();
|
||||||
|
|
||||||
for (u32 i = 0; i < static_cast<u32>(GPURenderer::Count); i++)
|
for (u32 i = 0; i < static_cast<u32>(GPURenderer::Count); i++)
|
||||||
@ -529,14 +529,14 @@ void SetupWizardDialog::setupGraphicsPage(bool initial)
|
|||||||
SettingWidgetBinder::BindWidgetToEnumSetting(nullptr, m_ui.renderer, "GPU", "Renderer", &Settings::ParseRendererName,
|
SettingWidgetBinder::BindWidgetToEnumSetting(nullptr, m_ui.renderer, "GPU", "Renderer", &Settings::ParseRendererName,
|
||||||
&Settings::GetRendererName, Settings::DEFAULT_GPU_RENDERER);
|
&Settings::GetRendererName, Settings::DEFAULT_GPU_RENDERER);
|
||||||
|
|
||||||
m_ui.resolutionScale->disconnect();
|
SettingWidgetBinder::DisconnectWidget(m_ui.resolutionScale);
|
||||||
m_ui.resolutionScale->clear();
|
m_ui.resolutionScale->clear();
|
||||||
GraphicsSettingsWidget::populateUpscalingModes(m_ui.resolutionScale, 16);
|
GraphicsSettingsWidget::populateUpscalingModes(m_ui.resolutionScale, 16);
|
||||||
SettingWidgetBinder::BindWidgetToIntSetting(nullptr, m_ui.resolutionScale, "GPU", "ResolutionScale", 1);
|
SettingWidgetBinder::BindWidgetToIntSetting(nullptr, m_ui.resolutionScale, "GPU", "ResolutionScale", 1);
|
||||||
|
|
||||||
m_ui.textureFiltering->disconnect();
|
SettingWidgetBinder::DisconnectWidget(m_ui.textureFiltering);
|
||||||
m_ui.textureFiltering->clear();
|
m_ui.textureFiltering->clear();
|
||||||
m_ui.spriteTextureFiltering->disconnect();
|
SettingWidgetBinder::DisconnectWidget(m_ui.spriteTextureFiltering);
|
||||||
m_ui.spriteTextureFiltering->clear();
|
m_ui.spriteTextureFiltering->clear();
|
||||||
|
|
||||||
for (u32 i = 0; i < static_cast<u32>(GPUTextureFilter::Count); i++)
|
for (u32 i = 0; i < static_cast<u32>(GPUTextureFilter::Count); i++)
|
||||||
@ -554,7 +554,7 @@ void SetupWizardDialog::setupGraphicsPage(bool initial)
|
|||||||
&Settings::ParseTextureFilterName, &Settings::GetTextureFilterName,
|
&Settings::ParseTextureFilterName, &Settings::GetTextureFilterName,
|
||||||
Settings::DEFAULT_GPU_TEXTURE_FILTER);
|
Settings::DEFAULT_GPU_TEXTURE_FILTER);
|
||||||
|
|
||||||
m_ui.gpuDitheringMode->disconnect();
|
SettingWidgetBinder::DisconnectWidget(m_ui.gpuDitheringMode);
|
||||||
m_ui.gpuDitheringMode->clear();
|
m_ui.gpuDitheringMode->clear();
|
||||||
|
|
||||||
for (u32 i = 0; i < static_cast<u32>(GPUDitheringMode::MaxCount); i++)
|
for (u32 i = 0; i < static_cast<u32>(GPUDitheringMode::MaxCount); i++)
|
||||||
@ -567,7 +567,7 @@ void SetupWizardDialog::setupGraphicsPage(bool initial)
|
|||||||
&Settings::ParseGPUDitheringModeName, &Settings::GetGPUDitheringModeName,
|
&Settings::ParseGPUDitheringModeName, &Settings::GetGPUDitheringModeName,
|
||||||
Settings::DEFAULT_GPU_DITHERING_MODE);
|
Settings::DEFAULT_GPU_DITHERING_MODE);
|
||||||
|
|
||||||
m_ui.displayAspectRatio->disconnect();
|
SettingWidgetBinder::DisconnectWidget(m_ui.displayAspectRatio);
|
||||||
m_ui.displayAspectRatio->clear();
|
m_ui.displayAspectRatio->clear();
|
||||||
|
|
||||||
for (u32 i = 0; i < static_cast<u32>(DisplayAspectRatio::Count); i++)
|
for (u32 i = 0; i < static_cast<u32>(DisplayAspectRatio::Count); i++)
|
||||||
@ -587,7 +587,7 @@ void SetupWizardDialog::setupGraphicsPage(bool initial)
|
|||||||
&SetupWizardDialog::onGraphicsAspectRatioChanged);
|
&SetupWizardDialog::onGraphicsAspectRatioChanged);
|
||||||
onGraphicsAspectRatioChanged();
|
onGraphicsAspectRatioChanged();
|
||||||
|
|
||||||
m_ui.displayCropMode->disconnect();
|
SettingWidgetBinder::DisconnectWidget(m_ui.displayCropMode);
|
||||||
m_ui.displayCropMode->clear();
|
m_ui.displayCropMode->clear();
|
||||||
|
|
||||||
for (u32 i = 0; i < static_cast<u32>(DisplayCropMode::MaxCount); i++)
|
for (u32 i = 0; i < static_cast<u32>(DisplayCropMode::MaxCount); i++)
|
||||||
@ -600,7 +600,7 @@ void SetupWizardDialog::setupGraphicsPage(bool initial)
|
|||||||
&Settings::ParseDisplayCropMode, &Settings::GetDisplayCropModeName,
|
&Settings::ParseDisplayCropMode, &Settings::GetDisplayCropModeName,
|
||||||
Settings::DEFAULT_DISPLAY_CROP_MODE);
|
Settings::DEFAULT_DISPLAY_CROP_MODE);
|
||||||
|
|
||||||
m_ui.displayScaling->disconnect();
|
SettingWidgetBinder::DisconnectWidget(m_ui.displayScaling);
|
||||||
m_ui.displayScaling->clear();
|
m_ui.displayScaling->clear();
|
||||||
|
|
||||||
for (u32 i = 0; i < static_cast<u32>(DisplayScalingMode::Count); i++)
|
for (u32 i = 0; i < static_cast<u32>(DisplayScalingMode::Count); i++)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user