From 0098641425e437629cea0426890868e919d61c04 Mon Sep 17 00:00:00 2001 From: Tri Vo Khac Date: Wed, 11 Nov 2026 20:12:06 +0700 Subject: [PATCH] fix(ui): keep Space for playback after mouse clicks Controls take focus only via Tab, so a click leaves Space for playback. --- src/qml/Footer.qml | 15 ++++++++------- src/qml/Header.qml | 17 +++++++++-------- src/qml/Playlist.qml | 6 +++--- src/qml/SeekBar.qml | 2 +- src/qml/VolumeSlider.qml | 2 +- 5 files changed, 22 insertions(+), 20 deletions(-) diff --git a/src/qml/Footer.qml b/src/qml/Footer.qml index a5d2aa2..1a7eff1 100644 --- a/src/qml/Footer.qml +++ b/src/qml/Footer.qml @@ -13,7 +13,8 @@ import org.kde.kirigami as Kirigami Item { id: root - // Space activates the focused control before the window's playback action. + // Space activates the focused control before the window's playback action. The + // controls take focus only from Tab, so a click leaves Space for playback. Keys.onShortcutOverride: event => { if (event.key === Qt.Key_Space && event.modifiers === Qt.NoModifier) { event.accepted = true @@ -137,7 +138,7 @@ Item { actions: root.actions mpv: root.mpv inFooter: true - focusPolicy: Qt.StrongFocus + focusPolicy: Qt.TabFocus visible: root.showMenuButton icon.width: root.buttonSize icon.height: root.buttonSize @@ -149,7 +150,7 @@ Item { display: AbstractButton.IconOnly icon.width: root.buttonSize icon.height: root.buttonSize - focusPolicy: Qt.StrongFocus + focusPolicy: Qt.TabFocus ToolTip.text: root.mpv.paused ? KI18n.i18nc("@info:tooltip", "Start playback") : KI18n.i18nc("@info:tooltip", "Pause playback") ToolTip.visible: hovered @@ -162,7 +163,7 @@ Item { icon.width: root.buttonSize icon.height: root.buttonSize display: AbstractButton.IconOnly - focusPolicy: Qt.StrongFocus + focusPolicy: Qt.TabFocus ToolTip.text: KI18n.i18nc("@info:tooltip", "Play previous file") ToolTip.visible: hovered @@ -175,7 +176,7 @@ Item { icon.width: root.buttonSize icon.height: root.buttonSize display: AbstractButton.IconOnly - focusPolicy: Qt.StrongFocus + focusPolicy: Qt.TabFocus ToolTip.text: KI18n.i18nc("@info:tooltip", "Play next file") ToolTip.visible: hovered @@ -195,7 +196,7 @@ Item { icon.width: root.buttonSize icon.height: root.buttonSize display: AbstractButton.IconOnly - focusPolicy: Qt.StrongFocus + focusPolicy: Qt.TabFocus ToolTip.text: root.actions.mute.text ToolTip.visible: hovered @@ -225,7 +226,7 @@ Item { icon.width: root.buttonSize icon.height: root.buttonSize display: AbstractButton.IconOnly - focusPolicy: Qt.StrongFocus + focusPolicy: Qt.TabFocus visible: !QtPotatoSettings.playlistToggleWithMouse ToolTip.text: text diff --git a/src/qml/Header.qml b/src/qml/Header.qml index 9e32d70..121c807 100644 --- a/src/qml/Header.qml +++ b/src/qml/Header.qml @@ -12,7 +12,8 @@ import org.kde.kirigami as Kirigami ToolBar { id: root - // Space activates the focused control before the window's playback action. + // Space activates the focused control before the window's playback action. The + // controls take focus only from Tab, so a click leaves Space for playback. Keys.onShortcutOverride: event => { if (event.key === Qt.Key_Space && event.modifiers === Qt.NoModifier) { event.accepted = true @@ -40,14 +41,14 @@ ToolBar { actions: root.actions mpv: root.mpv visible: !root.menuBarShown - focusPolicy: Qt.StrongFocus + focusPolicy: Qt.TabFocus icon.width: root.buttonSize icon.height: root.buttonSize } ToolButton { action: root.actions.openFile - focusPolicy: Qt.StrongFocus + focusPolicy: Qt.TabFocus icon.width: root.buttonSize icon.height: root.buttonSize display: root.isSmallSize ? AbstractButton.IconOnly : AbstractButton.TextBesideIcon @@ -59,7 +60,7 @@ ToolBar { ToolButton { action: root.actions.openUrl - focusPolicy: Qt.StrongFocus + focusPolicy: Qt.TabFocus icon.width: root.buttonSize icon.height: root.buttonSize display: root.isSmallSize ? AbstractButton.IconOnly : AbstractButton.TextBesideIcon @@ -77,7 +78,7 @@ ToolBar { icon.name: "add-subtitle" icon.width: root.buttonSize icon.height: root.buttonSize - focusPolicy: Qt.StrongFocus + focusPolicy: Qt.TabFocus enabled: root.mpv.fileLoaded opacity: enabled ? 1.0 : 0.6 display: root.isSmallSize ? AbstractButton.IconOnly : AbstractButton.TextBesideIcon @@ -111,7 +112,7 @@ ToolBar { icon.name: "audio-volume-high" icon.width: root.buttonSize icon.height: root.buttonSize - focusPolicy: Qt.StrongFocus + focusPolicy: Qt.TabFocus enabled: root.mpv.audioTracks.length > 0 opacity: enabled ? 1.0 : 0.6 display: root.isSmallSize ? AbstractButton.IconOnly : AbstractButton.TextBesideIcon @@ -162,7 +163,7 @@ ToolBar { ToolButton { action: root.actions.cancelTranslation display: AbstractButton.IconOnly - focusPolicy: Qt.StrongFocus + focusPolicy: Qt.TabFocus ToolTip.text: text ToolTip.visible: hovered @@ -176,7 +177,7 @@ ToolBar { ToolButton { action: root.actions.configure - focusPolicy: Qt.StrongFocus + focusPolicy: Qt.TabFocus icon.width: root.buttonSize icon.height: root.buttonSize display: root.isSmallSize ? AbstractButton.IconOnly : AbstractButton.TextBesideIcon diff --git a/src/qml/Playlist.qml b/src/qml/Playlist.qml index 6dc24a6..c3536a7 100644 --- a/src/qml/Playlist.qml +++ b/src/qml/Playlist.qml @@ -63,7 +63,7 @@ Page { icon.name: "list-add" icon.width: root.buttonSize icon.height: root.buttonSize - focusPolicy: Qt.StrongFocus + focusPolicy: Qt.TabFocus onClicked: root.addFilesRequested() } @@ -73,7 +73,7 @@ Page { icon.width: root.buttonSize icon.height: root.buttonSize display: AbstractButton.IconOnly - focusPolicy: Qt.StrongFocus + focusPolicy: Qt.TabFocus enabled: root.playlist.playingIndex >= 0 onClicked: playlistView.positionViewAtIndex(root.playlist.playingIndex, ListView.Center) @@ -88,7 +88,7 @@ Page { icon.width: root.buttonSize icon.height: root.buttonSize display: AbstractButton.IconOnly - focusPolicy: Qt.StrongFocus + focusPolicy: Qt.TabFocus enabled: root.playlist.count > 0 onClicked: root.playlist.clear() diff --git a/src/qml/SeekBar.qml b/src/qml/SeekBar.qml index ed6fd13..c4bbf55 100644 --- a/src/qml/SeekBar.qml +++ b/src/qml/SeekBar.qml @@ -54,7 +54,7 @@ Slider { from: 0 to: Math.max(root.mpv.duration, 0) enabled: root.mpv.fileLoaded && root.mpv.duration > 0 - focusPolicy: Qt.StrongFocus + focusPolicy: Qt.TabFocus // Preserve the Slider's own arrow-key behavior when playback shortcuts exist. Keys.onShortcutOverride: event => { diff --git a/src/qml/VolumeSlider.qml b/src/qml/VolumeSlider.qml index a130ae7..2b8a25a 100644 --- a/src/qml/VolumeSlider.qml +++ b/src/qml/VolumeSlider.qml @@ -20,7 +20,7 @@ Slider { implicitWidth: Kirigami.Units.gridUnit * 5 wheelEnabled: true stepSize: QtPotatoSettings.volumeStep - focusPolicy: Qt.StrongFocus + focusPolicy: Qt.TabFocus // Let the Slider consume navigation keys before window playback shortcuts. Keys.onShortcutOverride: event => { -- 2.54.0