mirror of
https://github.com/stenzek/duckstation.git
synced 2025-07-18 16:10:07 +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 =
|
||||
AudioStream::GetOutputDevices(backend, driver_name.c_str(), SPU::SAMPLE_RATE);
|
||||
|
||||
m_ui.outputDevice->disconnect();
|
||||
SettingWidgetBinder::DisconnectWidget(m_ui.outputDevice);
|
||||
m_ui.outputDevice->clear();
|
||||
m_output_device_latency = 0;
|
||||
|
||||
|
@ -870,7 +870,7 @@ void GraphicsSettingsWidget::populateGPUAdaptersAndResolutions(RenderAPI render_
|
||||
SettingsInterface* const sif = m_dialog->getSettingsInterface();
|
||||
|
||||
{
|
||||
m_ui.adapter->disconnect();
|
||||
SettingWidgetBinder::DisconnectWidget(m_ui.adapter);
|
||||
m_ui.adapter->clear();
|
||||
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->addItem(tr("Borderless Fullscreen"), QVariant(QString()));
|
||||
@ -944,7 +944,7 @@ void GraphicsSettingsWidget::populateGPUAdaptersAndResolutions(RenderAPI render_
|
||||
|
||||
if (!m_dialog->hasGameTrait(GameDatabase::Trait::DisableUpscaling))
|
||||
{
|
||||
m_ui.resolutionScale->disconnect();
|
||||
SettingWidgetBinder::DisconnectWidget(m_ui.resolutionScale);
|
||||
m_ui.resolutionScale->clear();
|
||||
|
||||
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();
|
||||
|
||||
if (m_dialog->isPerGameSettings())
|
||||
@ -1115,7 +1115,7 @@ void GraphicsSettingsWidget::onMediaCaptureBackendChanged()
|
||||
.value_or(Settings::DEFAULT_MEDIA_CAPTURE_BACKEND);
|
||||
|
||||
{
|
||||
m_ui.captureContainer->disconnect();
|
||||
SettingWidgetBinder::DisconnectWidget(m_ui.captureContainer);
|
||||
m_ui.captureContainer->clear();
|
||||
|
||||
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");
|
||||
|
||||
{
|
||||
m_ui.videoCaptureCodec->disconnect();
|
||||
SettingWidgetBinder::DisconnectWidget(m_ui.videoCaptureCodec);
|
||||
m_ui.videoCaptureCodec->clear();
|
||||
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->addItem(tr("Default"), QVariant(QString()));
|
||||
|
||||
|
@ -201,7 +201,7 @@ void SettingsWindow::reloadPages()
|
||||
if (isPerGameSettings())
|
||||
{
|
||||
m_game_summary->reloadGameSettings();
|
||||
m_ui.safeMode->disconnect();
|
||||
SettingWidgetBinder::DisconnectWidget(m_ui.safeMode);
|
||||
}
|
||||
|
||||
m_widget_help_text_map.clear();
|
||||
|
@ -70,6 +70,8 @@ struct SettingAccessor
|
||||
|
||||
template<typename F>
|
||||
static void connectValueChanged(T* widget, F func);
|
||||
|
||||
static void disconnect(T* widget);
|
||||
};
|
||||
|
||||
template<>
|
||||
@ -121,6 +123,8 @@ struct SettingAccessor<QLineEdit>
|
||||
{
|
||||
widget->connect(widget, &QLineEdit::textChanged, func);
|
||||
}
|
||||
|
||||
static void disconnect(QLineEdit* widget) { QObject::disconnect(widget, &QLineEdit::textChanged, nullptr, nullptr); }
|
||||
};
|
||||
|
||||
template<>
|
||||
@ -210,6 +214,12 @@ struct SettingAccessor<QComboBox>
|
||||
{
|
||||
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<>
|
||||
@ -280,6 +290,11 @@ struct SettingAccessor<QCheckBox>
|
||||
{
|
||||
widget->connect(widget, &QCheckBox::checkStateChanged, func);
|
||||
}
|
||||
|
||||
static void disconnect(QCheckBox* widget)
|
||||
{
|
||||
QObject::disconnect(widget, &QCheckBox::checkStateChanged, nullptr, nullptr);
|
||||
}
|
||||
};
|
||||
|
||||
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<>
|
||||
@ -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<>
|
||||
@ -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<>
|
||||
@ -702,6 +738,8 @@ struct SettingAccessor<QAction>
|
||||
{
|
||||
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.
|
||||
@ -1492,4 +1530,11 @@ static inline void SetAvailability(WidgetType* widget, bool available)
|
||||
widget->setEnabled(false);
|
||||
}
|
||||
|
||||
template<typename WidgetType>
|
||||
static inline void DisconnectWidget(WidgetType* widget)
|
||||
{
|
||||
using Accessor = SettingAccessor<WidgetType>;
|
||||
Accessor::disconnect(widget);
|
||||
}
|
||||
|
||||
} // namespace SettingWidgetBinder
|
||||
|
@ -518,7 +518,7 @@ void SetupWizardDialog::doMultipleDeviceAutomaticBinding(u32 port, QLabel* updat
|
||||
|
||||
void SetupWizardDialog::setupGraphicsPage(bool initial)
|
||||
{
|
||||
m_ui.renderer->disconnect();
|
||||
SettingWidgetBinder::DisconnectWidget(m_ui.renderer);
|
||||
m_ui.renderer->clear();
|
||||
|
||||
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,
|
||||
&Settings::GetRendererName, Settings::DEFAULT_GPU_RENDERER);
|
||||
|
||||
m_ui.resolutionScale->disconnect();
|
||||
SettingWidgetBinder::DisconnectWidget(m_ui.resolutionScale);
|
||||
m_ui.resolutionScale->clear();
|
||||
GraphicsSettingsWidget::populateUpscalingModes(m_ui.resolutionScale, 16);
|
||||
SettingWidgetBinder::BindWidgetToIntSetting(nullptr, m_ui.resolutionScale, "GPU", "ResolutionScale", 1);
|
||||
|
||||
m_ui.textureFiltering->disconnect();
|
||||
SettingWidgetBinder::DisconnectWidget(m_ui.textureFiltering);
|
||||
m_ui.textureFiltering->clear();
|
||||
m_ui.spriteTextureFiltering->disconnect();
|
||||
SettingWidgetBinder::DisconnectWidget(m_ui.spriteTextureFiltering);
|
||||
m_ui.spriteTextureFiltering->clear();
|
||||
|
||||
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::DEFAULT_GPU_TEXTURE_FILTER);
|
||||
|
||||
m_ui.gpuDitheringMode->disconnect();
|
||||
SettingWidgetBinder::DisconnectWidget(m_ui.gpuDitheringMode);
|
||||
m_ui.gpuDitheringMode->clear();
|
||||
|
||||
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::DEFAULT_GPU_DITHERING_MODE);
|
||||
|
||||
m_ui.displayAspectRatio->disconnect();
|
||||
SettingWidgetBinder::DisconnectWidget(m_ui.displayAspectRatio);
|
||||
m_ui.displayAspectRatio->clear();
|
||||
|
||||
for (u32 i = 0; i < static_cast<u32>(DisplayAspectRatio::Count); i++)
|
||||
@ -587,7 +587,7 @@ void SetupWizardDialog::setupGraphicsPage(bool initial)
|
||||
&SetupWizardDialog::onGraphicsAspectRatioChanged);
|
||||
onGraphicsAspectRatioChanged();
|
||||
|
||||
m_ui.displayCropMode->disconnect();
|
||||
SettingWidgetBinder::DisconnectWidget(m_ui.displayCropMode);
|
||||
m_ui.displayCropMode->clear();
|
||||
|
||||
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::DEFAULT_DISPLAY_CROP_MODE);
|
||||
|
||||
m_ui.displayScaling->disconnect();
|
||||
SettingWidgetBinder::DisconnectWidget(m_ui.displayScaling);
|
||||
m_ui.displayScaling->clear();
|
||||
|
||||
for (u32 i = 0; i < static_cast<u32>(DisplayScalingMode::Count); i++)
|
||||
|
Loading…
x
Reference in New Issue
Block a user