Compare commits

...

20 Commits

Author SHA1 Message Date
Roberto Viola
a4a87832a4 Update project.pbxproj 2025-12-12 11:16:14 +01:00
Roberto Viola
0a8f465c53 AsViva S18 bike peloton resistance supported 2025-12-12 11:15:42 +01:00
Roberto Viola
32c7008666 Fix gear change logic in inclination update
Mail from: Aaron B.
Subject: Something broke w the last beta update
Date: 11/12/2025

Refines the condition for updating inclination to ensure it only triggers when the gear value changes and the requestInclination is not -100. This prevents unnecessary updates and improves the logic for bikes without resistance.
2025-12-12 11:13:58 +01:00
Roberto Viola
5e604930ca Update project.pbxproj 2025-12-12 10:50:29 +01:00
Roberto Viola
34532e17a6 Update project.pbxproj 2025-12-12 10:48:46 +01:00
Roberto Viola
3389b24e82 Update project.pbxproj 2025-12-12 10:48:13 +01:00
Roberto Viola
a625355491 Reapply "Fix VoiceOver ApplicationWindow capture: add wrapper Item"
This reverts commit c7e8b84937.
2025-12-12 10:39:31 +01:00
Roberto Viola
c7e8b84937 Revert "Fix VoiceOver ApplicationWindow capture: add wrapper Item"
This reverts commit 079390a1ac.
2025-12-12 10:36:55 +01:00
Roberto Viola
5f5d4922ab it works on ios! 2025-12-12 10:34:28 +01:00
Roberto Viola
f8146f53df Update main.qml 2025-12-12 10:28:14 +01:00
Roberto Viola
83ca4ccece Update Home.qml 2025-12-12 09:47:39 +01:00
Roberto Viola
3fe920f552 Update main.qml 2025-12-12 09:41:42 +01:00
Roberto Viola
f6f237c302 Merge branch 'claude/voiceover-homeform-ios-013H6gPbfX52LSuaK8svVaWZ' of https://github.com/cagnulein/qdomyos-zwift into claude/voiceover-homeform-ios-013H6gPbfX52LSuaK8svVaWZ 2025-12-12 07:18:45 +01:00
Claude
079390a1ac Fix VoiceOver ApplicationWindow capture: add wrapper Item
The issue was that ApplicationWindow itself was becoming the single
VoiceOver-accessible element, reading "qdomyos-zwift" everywhere.

**Root Cause:**
ApplicationWindow in Qt Quick on iOS has default accessibility behavior
that makes the entire window a single accessible element. Since
ApplicationWindow is not an Item, we cannot set Accessible properties
on it directly to prevent this.

**Solution:**
Wrapped the entire content (StackView) in a transparent Item with
Accessible.ignored=true. This prevents the ApplicationWindow from
capturing all accessibility focus while allowing child elements to
remain accessible.

**Additional Changes:**
- Set Page.Accessible.ignored=true (not the source of the problem)
- Added Accessible.ignored=true to all decorative Rectangle containers
- Added Accessible.ignored=true to decorative Image elements
- Removed Accessible from topBar Item and Row (let them be transparent)

**Hierarchy:**
ApplicationWindow (default behavior)
└── Item wrapper (IGNORED - breaks window capture)
    └── StackView (transparent)
        └── Page (IGNORED)
            ├── Decorative elements (IGNORED)
            └── Interactive elements (ACCESSIBLE)

This should finally allow VoiceOver to navigate to individual buttons
and tiles instead of selecting the entire window.
2025-12-12 06:18:35 +00:00
Roberto Viola
9e42d46325 Merge branch 'claude/voiceover-homeform-ios-013H6gPbfX52LSuaK8svVaWZ' of https://github.com/cagnulein/qdomyos-zwift into claude/voiceover-homeform-ios-013H6gPbfX52LSuaK8svVaWZ 2025-12-12 07:13:25 +01:00
Claude
b92763ecbd Fix VoiceOver: ignore containers, configure Page correctly
Fixed the Qt warning and VoiceOver "big rectangle" issue by properly
configuring accessibility on correct element types.

**Root Cause:**
- ApplicationWindow is NOT an Item, cannot have Accessible properties (was causing Qt warning)
- Background Rectangle was capturing all VoiceOver focus
- Container elements (Item, Row) were interfering with navigation

**Solution:**
- Removed Accessible from ApplicationWindow (not an Item, causes warning)
- Removed Accessible from StackView (let children handle accessibility)
- Added Accessible.ignored=true to background Rectangle in Home.qml
- Configured Page with Accessible.role=Pane to allow child navigation
- Added Accessible.ignored=true to container elements (topBar Item, Row)

**Result:**
VoiceOver should now navigate directly to interactive elements (buttons, tiles)
instead of selecting the entire window as one big rectangle.

**Hierarchy:**
- ApplicationWindow (no Accessible - not an Item)
  └── StackView (no Accessible - transparent)
      └── Page (Pane, navigable)
          ├── Background Rectangle (IGNORED)
          ├── TopBar containers (IGNORED)
          └── Interactive elements (ACCESSIBLE)
2025-12-12 06:12:49 +00:00
Roberto Viola
29d7935fb4 Merge branch 'claude/voiceover-homeform-ios-013H6gPbfX52LSuaK8svVaWZ' of https://github.com/cagnulein/qdomyos-zwift into claude/voiceover-homeform-ios-013H6gPbfX52LSuaK8svVaWZ 2025-12-12 06:58:43 +01:00
Claude
7b40a0e805 Fix VoiceOver navigation: restore onPressAction and configure containers
Fixed the main VoiceOver issues identified during testing:

**Main Issues Fixed:**
1. VoiceOver was selecting the entire ApplicationWindow instead of individual elements
2. Missing Accessible.onPressAction on interactive buttons (incorrectly removed)
3. StackView was blocking navigation to child elements

**Changes:**
- **ApplicationWindow**: Added Accessible.role=Window to allow child navigation
- **StackView**: Added Accessible.ignored=true to prevent it from becoming a focus target
- **Buttons (+/-/large)**: Restored Accessible.onPressAction for proper VoiceOver activation
- All interactive buttons now properly respond to double-tap gestures

**How it works:**
- ApplicationWindow declares itself as Window (allows child navigation)
- StackView is ignored (doesn't interfere with children)
- Individual tiles and buttons are focusable and actionable
- VoiceOver can now navigate through tiles using swipe gestures

This should resolve the "big rectangle on the whole window" issue where VoiceOver
was selecting the root window instead of navigating to individual UI elements.
2025-12-12 05:57:21 +00:00
Claude
49ca182e96 Add VoiceOver accessibility support for iOS homeform tiles
Implemented comprehensive VoiceOver support for the home screen tiles and main UI controls to improve accessibility for visually impaired users on iOS.

Changes include:

**Tile Accessibility:**
- Added Accessible.* properties to main tile Item delegate with dynamic roles (Button/Pane/StaticText)
- Tiles announce their name and current value to VoiceOver
- Added Accessible.ignored to decorative elements (Text, Image, Rectangle) to prevent interference
- Only interactive elements (Item container and +/- buttons) are now accessible

**Button Accessibility:**
- Added accessibility support for adjustable tiles (+ and - buttons)
- Added accessibility support for large button tiles
- Added accessibility properties to main control buttons (Start, Stop, Lap)
- Added accessibility properties to Bluetooth connection indicator
- Removed redundant Accessible.onPressAction (already handled by onClicked)

**Grid Accessibility:**
- Added GridView accessibility with role=List
- Added descriptive navigation hints for VoiceOver users

These changes enable VoiceOver users to:
- Navigate through all tiles using standard VoiceOver gestures without confusion
- Understand the purpose and current value of each tile clearly
- Interact with adjustable tiles and action buttons efficiently
- Monitor Bluetooth connection status
- Experience a clean navigation without duplicate/interfering accessibility elements
2025-12-11 20:42:53 +00:00
Claude
e4fdb36119 Add VoiceOver accessibility support for iOS homeform tiles
Implemented comprehensive VoiceOver support for the home screen tiles and main UI controls to improve accessibility for visually impaired users on iOS.

Changes include:
- Added Accessible.* properties to all tile elements in GridView delegate
- Added accessibility support for adjustable tiles (+ and - buttons)
- Added accessibility support for large button tiles
- Added accessibility properties to main control buttons (Start, Stop, Lap)
- Added accessibility properties to Bluetooth connection indicator
- Tiles now properly announce their name, current value, and adjustability status
- All interactive elements are now focusable and have descriptive labels

These changes enable VoiceOver users to:
- Navigate through all tiles using standard VoiceOver gestures
- Understand the purpose and current value of each tile
- Interact with adjustable tiles and action buttons
- Monitor Bluetooth connection status
2025-12-11 20:13:23 +00:00
9 changed files with 131 additions and 22 deletions

View File

@@ -4569,7 +4569,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_ENTITLEMENTS = "../src/ios/qdomyos-zwift.entitlements";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1223;
CURRENT_PROJECT_VERSION = 1227;
DERIVE_MACCATALYST_PRODUCT_BUNDLE_IDENTIFIER = YES;
DEVELOPMENT_TEAM = 6335M7T29D;
ENABLE_BITCODE = NO;
@@ -4770,7 +4770,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_ENTITLEMENTS = "../src/ios/qdomyos-zwift.entitlements";
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1223;
CURRENT_PROJECT_VERSION = 1227;
DEBUG_INFORMATION_FORMAT = dwarf;
DERIVE_MACCATALYST_PRODUCT_BUNDLE_IDENTIFIER = YES;
DEVELOPMENT_TEAM = 6335M7T29D;
@@ -5007,7 +5007,7 @@
CODE_SIGN_ENTITLEMENTS = "watchkit Extension/WatchKit Extension.entitlements";
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1223;
CURRENT_PROJECT_VERSION = 1227;
DEVELOPMENT_TEAM = 6335M7T29D;
ENABLE_BITCODE = YES;
ENABLE_STRICT_OBJC_MSGSEND = YES;
@@ -5103,7 +5103,7 @@
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_ENTITLEMENTS = "watchkit Extension/WatchKit Extension.entitlements";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1223;
CURRENT_PROJECT_VERSION = 1227;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = 6335M7T29D;
ENABLE_BITCODE = YES;
@@ -5195,7 +5195,7 @@
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_ENTITLEMENTS = "watchkit Extension/WatchKit Extension.entitlements";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1223;
CURRENT_PROJECT_VERSION = 1227;
DEVELOPMENT_ASSET_PATHS = "\"watchkit Extension/Preview Content\"";
ENABLE_BITCODE = YES;
ENABLE_PREVIEWS = YES;
@@ -5311,7 +5311,7 @@
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_ENTITLEMENTS = "watchkit Extension/WatchKit Extension.entitlements";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1223;
CURRENT_PROJECT_VERSION = 1227;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_ASSET_PATHS = "\"watchkit Extension/Preview Content\"";
ENABLE_BITCODE = YES;
@@ -5421,7 +5421,7 @@
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_ENTITLEMENTS = QZWidgetExtension.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1223;
CURRENT_PROJECT_VERSION = 1227;
DEVELOPMENT_TEAM = 6335M7T29D;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
@@ -5512,7 +5512,7 @@
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_ENTITLEMENTS = QZWidgetExtension.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1223;
CURRENT_PROJECT_VERSION = 1227;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = 6335M7T29D;
ENABLE_NS_ASSERTIONS = NO;

View File

@@ -25,6 +25,11 @@ ColumnLayout {
Layout.fillWidth: true
height: 48
Accessible.role: Accessible.Button
Accessible.name: title
Accessible.description: expanded ? "Expanded" : "Collapsed"
Accessible.onPressAction: toggle()
Rectangle {
id: indicatRect
x: 16; y: 20

View File

@@ -14,6 +14,10 @@ HomeForm {
width: parent.fill
height: parent.fill
color: settings.theme_background_color
// VoiceOver accessibility - ignore decorative background
Accessible.role: Accessible.Pane
Accessible.ignored: true
}
signal start_clicked;
signal stop_clicked;
@@ -185,6 +189,8 @@ HomeForm {
gridView.leftMargin = (parent.width % cellWidth) / 2;
}
Accessible.ignored: true
delegate: Item {
id: id1
width: 170 * settings.ui_zoom / 100
@@ -193,6 +199,12 @@ HomeForm {
visible: visibleItem
Component.onCompleted: console.log("completed " + objectName)
// VoiceOver accessibility support
Accessible.role: largeButton ? Accessible.Button : (writable ? Accessible.Pane : Accessible.StaticText)
Accessible.name: name + (largeButton ? "" : (": " + value))
Accessible.description: largeButton ? largeButtonLabel : (secondLine !== "" ? secondLine : (writable ? qsTr("Adjustable. Current value: ") + value : qsTr("Current value: ") + value))
Accessible.focusable: true
Behavior on x {
enabled: id1.state != "active"
NumberAnimation { duration: 400; easing.type: Easing.OutBack }
@@ -226,6 +238,9 @@ HomeForm {
border.color: (settings.theme_tile_shadow_enabled ? settings.theme_tile_shadow_color : settings.theme_tile_background_color)
color: settings.theme_tile_background_color
id: rect
// Ignore for VoiceOver - decorative background only
Accessible.ignored: true
}
DropShadow {
@@ -256,6 +271,9 @@ HomeForm {
height: 48 * settings.ui_zoom / 100
source: icon
visible: settings.theme_tile_icon_enabled && !largeButton
// Ignore for VoiceOver - decorative only
Accessible.ignored: true
}
Text {
objectName: "value"
@@ -270,6 +288,9 @@ HomeForm {
font.pointSize: valueFontSize * settings.ui_zoom / 100
font.bold: true
visible: !largeButton
// Ignore for VoiceOver - parent Item handles accessibility
Accessible.ignored: true
}
Text {
objectName: "secondLine"
@@ -285,6 +306,9 @@ HomeForm {
font.pointSize: settings.theme_tile_secondline_textsize * settings.ui_zoom / 100
font.bold: false
visible: !largeButton
// Ignore for VoiceOver - parent Item handles accessibility
Accessible.ignored: true
}
Text {
id: myText
@@ -299,6 +323,9 @@ HomeForm {
anchors.leftMargin: 55 * settings.ui_zoom / 100
anchors.topMargin: 20 * settings.ui_zoom / 100
visible: !largeButton
// Ignore for VoiceOver - parent Item handles accessibility
Accessible.ignored: true
}
RoundButton {
objectName: minusName
@@ -311,6 +338,13 @@ HomeForm {
anchors.leftMargin: 2
width: 48 * settings.ui_zoom / 100
height: 48 * settings.ui_zoom / 100
// VoiceOver accessibility
Accessible.role: Accessible.Button
Accessible.name: qsTr("Decrease ") + name
Accessible.description: qsTr("Decrease the value of ") + name
Accessible.focusable: true
Accessible.onPressAction: { minus_clicked(objectName) }
}
RoundButton {
autoRepeat: true
@@ -323,6 +357,13 @@ HomeForm {
anchors.rightMargin: 2
width: 48 * settings.ui_zoom / 100
height: 48 * settings.ui_zoom / 100
// VoiceOver accessibility
Accessible.role: Accessible.Button
Accessible.name: qsTr("Increase ") + name
Accessible.description: qsTr("Increase the value of ") + name
Accessible.focusable: true
Accessible.onPressAction: { plus_clicked(objectName) }
}
RoundButton {
autoRepeat: true
@@ -336,6 +377,13 @@ HomeForm {
radius: 20
}
font.pointSize: 20 * settings.ui_zoom / 100
// VoiceOver accessibility
Accessible.role: Accessible.Button
Accessible.name: largeButtonLabel
Accessible.description: name + ": " + largeButtonLabel
Accessible.focusable: true
Accessible.onPressAction: { largeButton_clicked(objectName) }
}
}
}

View File

@@ -9,6 +9,9 @@ Page {
title: qsTr("QZ Fitness")
id: page
// VoiceOver accessibility - ignore Page itself, only children are accessible
Accessible.ignored: true
property alias start: start
property alias stop: stop
property alias lap: lap
@@ -39,6 +42,8 @@ Page {
width: 50
height: row.height
color: settings.theme_background_color
Accessible.ignored: true
Column {
id: column
anchors.horizontalCenter: parent.horizontalCenter
@@ -47,10 +52,13 @@ Page {
height: row.height
spacing: 0
padding: 0
Accessible.ignored: true
Rectangle {
width: 50
height: row.height
color: settings.theme_background_color
Accessible.ignored: true
Image {
anchors.verticalCenter: parent.verticalCenter
@@ -60,6 +68,12 @@ Page {
source: "icons/icons/bluetooth-icon.png"
enabled: rootItem.device
smooth: true
// VoiceOver accessibility
Accessible.role: Accessible.Indicator
Accessible.name: qsTr("Bluetooth connection")
Accessible.description: rootItem.device ? qsTr("Device connected") : qsTr("Device not connected")
Accessible.focusable: true
}
ColorOverlay {
anchors.fill: treadmill_connection
@@ -74,6 +88,7 @@ Page {
height: row.height - 76
source: rootItem.signal
smooth: true
Accessible.ignored: true
}
}
}
@@ -82,6 +97,8 @@ Page {
width: 120
height: row.height
color: settings.theme_background_color
Accessible.ignored: true
RoundButton {
icon.source: rootItem.startIcon
icon.height: row.height - 54
@@ -91,6 +108,12 @@ Page {
id: start
width: 120
height: row.height - 4
// VoiceOver accessibility
Accessible.role: Accessible.Button
Accessible.name: rootItem.startText
Accessible.description: qsTr("Start workout")
Accessible.focusable: true
}
ColorOverlay {
anchors.fill: start
@@ -104,6 +127,7 @@ Page {
width: 120
height: row.height
color: settings.theme_background_color
Accessible.ignored: true
RoundButton {
icon.source: rootItem.stopIcon
@@ -114,6 +138,12 @@ Page {
id: stop
width: 120
height: row.height - 4
// VoiceOver accessibility
Accessible.role: Accessible.Button
Accessible.name: rootItem.stopText
Accessible.description: qsTr("Stop workout")
Accessible.focusable: true
}
ColorOverlay {
anchors.fill: stop
@@ -128,6 +158,8 @@ Page {
width: 50
height: row.height
color: settings.theme_background_color
Accessible.ignored: true
RoundButton {
anchors.verticalCenter: parent.verticalCenter
id: lap
@@ -138,6 +170,12 @@ Page {
icon.height: 48
enabled: rootItem.lap
smooth: true
// VoiceOver accessibility
Accessible.role: Accessible.Button
Accessible.name: qsTr("Lap")
Accessible.description: qsTr("Record a new lap")
Accessible.focusable: true
}
ColorOverlay {
anchors.fill: lap

View File

@@ -22,6 +22,11 @@ ColumnLayout {
Layout.fillWidth: true;
height: 48
Accessible.role: Accessible.Button
Accessible.name: title
Accessible.description: expanded ? "Expanded" : "Collapsed"
Accessible.onPressAction: toggle()
Rectangle{
id:indicatRect
x: 16; y: 20

View File

@@ -1763,6 +1763,7 @@ void bluetooth::deviceDiscovered(const QBluetoothDeviceInfo &device) {
(b.name().toUpper().startsWith("JUSTO")) ||
(b.name().toUpper().startsWith("MYCYCLE ")) ||
(b.name().toUpper().startsWith("T2 ")) ||
(b.name().toUpper().startsWith("S18")) ||
(b.name().toUpper().startsWith("RC-MAX-")) ||
(b.name().toUpper().startsWith("TPS-SPBIKE-2.0")) ||
(b.name().toUpper().startsWith("NEO BIKE SMART")) ||

View File

@@ -369,7 +369,7 @@ void ftmsbike::update() {
// gpx scenario for example
if(!virtualBike || !virtualBike->ftmsDeviceConnected()) {
if ((requestInclination != -100 || lastGearValue != gears())) {
if ((requestInclination != -100 || (lastGearValue != gears() && requestInclination != -100))) {
emit debug(QStringLiteral("writing inclination ") + QString::number(requestInclination));
forceInclination(requestInclination + gears()); // since this bike doesn't have the concept of resistance,
// i'm using the gears in the inclination
@@ -1781,6 +1781,10 @@ void ftmsbike::deviceDiscovered(const QBluetoothDeviceInfo &device) {
qDebug() << QStringLiteral("FS-YK- found");
FS_YK = true;
ergModeSupported = false; // this bike doesn't have ERG mode natively
} else if(device.name().toUpper().startsWith("S18")) {
qDebug() << QStringLiteral("S18 found");
S18 = true;
max_resistance = 24;
}

View File

@@ -167,6 +167,7 @@ class ftmsbike : public bike {
bool YPBM = false;
bool SPORT01 = false;
bool FS_YK = false;
bool S18 = false;
uint8_t secondsToResetTimer = 5;

View File

@@ -17,8 +17,8 @@ ApplicationWindow {
visibility: Qt.WindowFullScreen
visible: true
objectName: "stack"
title: qsTr("qDomyos-Zwift")
title: Qt.platform.os === "ios" ? "" : qsTr("qDomyos-Zwift")
// Force update on orientation change
property int currentOrientation: Screen.orientation
onCurrentOrientationChanged: {
@@ -729,6 +729,7 @@ ApplicationWindow {
bottomPadding: getBottomPadding()
leftPadding: getLeftPadding()
rightPadding: getRightPadding()
Accessible.ignored: !drawer.opened
ScrollView {
contentWidth: -1
@@ -756,12 +757,12 @@ ApplicationWindow {
width: parent.width
onClicked: {
toolButtonLoadSettings.visible = true;
toolButtonSaveSettings.visible = true;
toolButtonSaveSettings.visible = true;
stackView.push("settings.qml")
stackView.currentItem.peloton_connect_clicked.connect(function() {
peloton_connect_clicked()
});
drawer.close()
drawer.close()
}
}
@@ -989,17 +990,22 @@ ApplicationWindow {
}
}
}
}
}
StackView {
id: stackView
initialItem: "Home.qml"
// Wrapper Item to prevent ApplicationWindow from capturing all VoiceOver focus
Item {
anchors.fill: parent
anchors.bottomMargin: (Screen.orientation === Qt.PortraitOrientation || Screen.orientation === Qt.InvertedPortraitOrientation) ? getBottomPadding() : 0
anchors.rightMargin: getRightPadding()
anchors.leftMargin: getLeftPadding()
focus: true
Keys.onVolumeUpPressed: (event)=> { console.log("onVolumeUpPressed"); volumeUp(); event.accepted = settings.volume_change_gears; }
Accessible.ignored: true
StackView {
id: stackView
initialItem: "Home.qml"
anchors.fill: parent
anchors.bottomMargin: (Screen.orientation === Qt.PortraitOrientation || Screen.orientation === Qt.InvertedPortraitOrientation) ? getBottomPadding() : 0
anchors.rightMargin: getRightPadding()
anchors.leftMargin: getLeftPadding()
focus: true
Keys.onVolumeUpPressed: (event)=> { console.log("onVolumeUpPressed"); volumeUp(); event.accepted = settings.volume_change_gears; }
Keys.onVolumeDownPressed: (event)=> { console.log("onVolumeDownPressed"); volumeDown(); event.accepted = settings.volume_change_gears; }
Keys.onPressed: (event)=> {
if (event.key === Qt.Key_MediaPrevious)
@@ -1013,6 +1019,7 @@ ApplicationWindow {
event.accepted = settings.volume_change_gears;
}
}
}
}