From 4f7eb6c96e637042db4c228324382e71068852e3 Mon Sep 17 00:00:00 2001 From: Hartmnt Date: Tue, 2 Jan 2024 18:30:26 +0000 Subject: [PATCH] FIX(a11y): Add semantic description to sliders in Settings --- src/mumble/Accessibility.cpp | 5 ++++ src/mumble/AudioConfigDialog.cpp | 42 +++++++++++++++++++++++++++++--- src/mumble/Log.cpp | 5 ++++ 3 files changed, 49 insertions(+), 3 deletions(-) diff --git a/src/mumble/Accessibility.cpp b/src/mumble/Accessibility.cpp index 4e0d9cea3bb..c192a9e8eac 100644 --- a/src/mumble/Accessibility.cpp +++ b/src/mumble/Accessibility.cpp @@ -19,6 +19,8 @@ #include +#include + namespace Mumble { namespace Accessibility { @@ -150,6 +152,9 @@ namespace Accessibility { // We set the value for the slider, any potential focus proxy, // and the QAccessibleInterface. Orca will still read the // raw slider value. + + qDebug() << value; + QVariant newValue = QVariant(value); slider->setFocus(); diff --git a/src/mumble/AudioConfigDialog.cpp b/src/mumble/AudioConfigDialog.cpp index 9b8869d1b6a..94b2ec3e59d 100644 --- a/src/mumble/AudioConfigDialog.cpp +++ b/src/mumble/AudioConfigDialog.cpp @@ -5,6 +5,7 @@ #include "AudioConfigDialog.h" +#include "Accessibility.h" #include "AudioInput.h" #include "AudioOutput.h" #include "AudioOutputSample.h" @@ -287,8 +288,11 @@ void AudioInputDialog::save() const { } void AudioInputDialog::on_qsFrames_valueChanged(int v) { - qlFrames->setText(tr("%1 ms").arg((v == 1) ? 10 : (v - 1) * 20)); + int val = (v == 1) ? 10 : (v - 1) * 20; + qlFrames->setText(tr("%1 ms").arg(val)); updateBitrate(); + + Mumble::Accessibility::setSliderSemanticValue(qsFrames, QString("%1 %2").arg(val).arg(tr("milliseconds"))); } void AudioInputDialog::on_qsDoublePush_valueChanged(int v) { @@ -299,21 +303,29 @@ void AudioInputDialog::on_qsDoublePush_valueChanged(int v) { } void AudioInputDialog::on_qsPTTHold_valueChanged(int v) { - if (v == 0) + if (v == 0) { qlPTTHold->setText(tr("Off")); - else + Mumble::Accessibility::setSliderSemanticValue(qsPTTHold, tr("Off")); + } else { qlPTTHold->setText(tr("%1 ms").arg(v)); + Mumble::Accessibility::setSliderSemanticValue(qsPTTHold, QString("%1 %2").arg(v).arg(tr("milliseconds"))); + } } void AudioInputDialog::on_qsTransmitHold_valueChanged(int v) { float val = static_cast< float >(v * 10); val = val / 1000.0f; qlTransmitHold->setText(tr("%1 s").arg(val, 0, 'f', 2)); + Mumble::Accessibility::setSliderSemanticValue(qsTransmitHold, + QString("%1 %2").arg(val, 0, 'f', 2).arg(tr("seconds"))); } void AudioInputDialog::on_qsQuality_valueChanged(int v) { qlQuality->setText(tr("%1 kb/s").arg(static_cast< float >(v) / 1000.0f, 0, 'f', 1)); updateBitrate(); + + Mumble::Accessibility::setSliderSemanticValue( + qsQuality, QString("%1 %2").arg(static_cast< float >(v) / 1000.0f, 0, 'f', 1).arg(tr("kilobit per second"))); } void AudioInputDialog::on_qsSpeexNoiseSupStrength_valueChanged(int v) { @@ -322,8 +334,11 @@ void AudioInputDialog::on_qsSpeexNoiseSupStrength_valueChanged(int v) { if (v < 15) { qlSpeexNoiseSupStrength->setText(tr("Off")); pal.setColor(qlSpeexNoiseSupStrength->foregroundRole(), Qt::red); + Mumble::Accessibility::setSliderSemanticValue(qsSpeexNoiseSupStrength, tr("Off")); } else { qlSpeexNoiseSupStrength->setText(tr("-%1 dB").arg(v)); + Mumble::Accessibility::setSliderSemanticValue(qsSpeexNoiseSupStrength, + QString("-%1 %2").arg(v).arg(tr("decibel"))); } qlSpeexNoiseSupStrength->setPalette(pal); } @@ -332,6 +347,8 @@ void AudioInputDialog::on_qsAmp_valueChanged(int v) { v = 18000 - v + 2000; float d = 20000.0f / static_cast< float >(v); qlAmp->setText(QString::fromLatin1("%1").arg(d, 0, 'f', 2)); + + Mumble::Accessibility::setSliderSemanticValue(qsAmp, QString("%1").arg(d, 0, 'f', 2)); } void AudioInputDialog::updateBitrate() { @@ -574,6 +591,11 @@ void AudioInputDialog::on_Tick_timeout() { abSpeech->iBelow = qsTransmitMin->value(); abSpeech->iAbove = qsTransmitMax->value(); + Mumble::Accessibility::setSliderSemanticValue(qsTransmitMin, Mumble::Accessibility::SliderAccesibilityMode::PERCENT, + "%"); + Mumble::Accessibility::setSliderSemanticValue(qsTransmitMax, Mumble::Accessibility::SliderAccesibilityMode::PERCENT, + "%"); + if (qrbAmplitude->isChecked()) { abSpeech->iValue = iroundf((32767.f / 96.0f) * (96.0f + ai->dPeakCleanMic) + 0.5f); } else { @@ -813,6 +835,7 @@ void AudioOutputDialog::on_qcbSystem_currentIndexChanged(int) { void AudioOutputDialog::on_qsJitter_valueChanged(int v) { qlJitter->setText(tr("%1 ms").arg(v * 10)); + Mumble::Accessibility::setSliderSemanticValue(qsJitter, QString("%1 %2").arg(v * 10).arg(tr("milliseconds"))); } void AudioOutputDialog::on_qsVolume_valueChanged(int v) { @@ -824,22 +847,30 @@ void AudioOutputDialog::on_qsVolume_valueChanged(int v) { qlVolume->setPalette(pal); qlVolume->setText(tr("%1 %").arg(v)); + Mumble::Accessibility::setSliderSemanticValue(qsVolume, Mumble::Accessibility::SliderAccesibilityMode::PERCENT, + "%"); } void AudioOutputDialog::on_qsOtherVolume_valueChanged(int v) { qlOtherVolume->setText(tr("%1 %").arg(v)); + Mumble::Accessibility::setSliderSemanticValue(qsOtherVolume, Mumble::Accessibility::SliderAccesibilityMode::PERCENT, + "%"); } void AudioOutputDialog::on_qsPacketDelay_valueChanged(int v) { qlPacketDelay->setText(tr("%1 ms").arg(v)); + Mumble::Accessibility::setSliderSemanticValue(qsPacketDelay, QString("%1 %2").arg(v).arg(tr("milliseconds"))); } void AudioOutputDialog::on_qsPacketLoss_valueChanged(int v) { qlPacketLoss->setText(tr("%1 %").arg(v)); + Mumble::Accessibility::setSliderSemanticValue(qsPacketLoss, Mumble::Accessibility::SliderAccesibilityMode::PERCENT, + "%"); } void AudioOutputDialog::on_qsDelay_valueChanged(int v) { qlDelay->setText(tr("%1 ms").arg(v * 10)); + Mumble::Accessibility::setSliderSemanticValue(qsDelay, QString("%1 %2").arg(v * 10).arg(tr("milliseconds"))); } void AudioOutputDialog::on_qcbLoopback_currentIndexChanged(int v) { @@ -864,6 +895,7 @@ void AudioOutputDialog::on_qsMinDistance_valueChanged(int value) { void AudioOutputDialog::on_qsbMinimumDistance_valueChanged(double value) { QSignalBlocker blocker(qsMinDistance); qsMinDistance->setValue(value * 10); + Mumble::Accessibility::setSliderSemanticValue(qsMinDistance, QString("%1 %2").arg(value * 10).arg(tr("meters"))); // Ensure that max distance is always a least 1m larger than min distance qsMaxDistance->setValue(std::max(qsMaxDistance->value(), static_cast< int >(value * 10) + 10)); @@ -879,6 +911,7 @@ void AudioOutputDialog::on_qsMaxDistance_valueChanged(int value) { void AudioOutputDialog::on_qsbMaximumDistance_valueChanged(double value) { QSignalBlocker blocker(qsMaxDistance); qsMaxDistance->setValue(value * 10); + Mumble::Accessibility::setSliderSemanticValue(qsMaxDistance, QString("%1 %2").arg(value * 10).arg(tr("meters"))); // Ensure that min distance is always a least 1m less than max distance qsMinDistance->setValue(std::min(qsMinDistance->value(), static_cast< int >(value * 10) - 10)); @@ -887,6 +920,8 @@ void AudioOutputDialog::on_qsbMaximumDistance_valueChanged(double value) { void AudioOutputDialog::on_qsMinimumVolume_valueChanged(int value) { QSignalBlocker blocker(qsbMinimumVolume); qsbMinimumVolume->setValue(value); + Mumble::Accessibility::setSliderSemanticValue(qsMinimumVolume, + Mumble::Accessibility::SliderAccesibilityMode::PERCENT, "%"); } void AudioOutputDialog::on_qsbMinimumVolume_valueChanged(int value) { @@ -897,6 +932,7 @@ void AudioOutputDialog::on_qsbMinimumVolume_valueChanged(int value) { void AudioOutputDialog::on_qsBloom_valueChanged(int value) { QSignalBlocker blocker(qsbBloom); qsbBloom->setValue(value); + Mumble::Accessibility::setSliderSemanticValue(qsBloom, Mumble::Accessibility::SliderAccesibilityMode::PERCENT, "%"); } void AudioOutputDialog::on_qsbBloom_valueChanged(int value) { diff --git a/src/mumble/Log.cpp b/src/mumble/Log.cpp index 226df1b58ec..5d7736ec83e 100644 --- a/src/mumble/Log.cpp +++ b/src/mumble/Log.cpp @@ -5,6 +5,7 @@ #include "Log.h" +#include "Accessibility.h" #include "AudioOutput.h" #include "AudioOutputSample.h" #include "AudioOutputToken.h" @@ -370,14 +371,18 @@ void LogConfig::browseForAudioFile() { void LogConfig::on_qsNotificationVolume_valueChanged(int value) { qsbNotificationVolume->setValue(value); + Mumble::Accessibility::setSliderSemanticValue(qsNotificationVolume, QString("%1 %2").arg(value).arg(tr("decibel"))); } void LogConfig::on_qsCueVolume_valueChanged(int value) { qsbCueVolume->setValue(value); + Mumble::Accessibility::setSliderSemanticValue(qsCueVolume, QString("%1 %2").arg(value).arg(tr("decibel"))); } void LogConfig::on_qsTTSVolume_valueChanged(int value) { qsbTTSVolume->setValue(value); + Mumble::Accessibility::setSliderSemanticValue(qsTTSVolume, Mumble::Accessibility::SliderAccesibilityMode::PERCENT, + "%"); } void LogConfig::on_qsbNotificationVolume_valueChanged(int value) {