From 86ccc3554df9e8cfc38d6b746b31096f7effa73d Mon Sep 17 00:00:00 2001
From: Fatih Uzunoglu <fuzun54@outlook.com>
Date: Thu, 22 Jul 2021 19:39:44 +0300
Subject: [PATCH] qml: refer to file path for player toolbar control accession

---
 modules/gui/qt/Makefile.am                    |   1 +
 .../dialogs/toolbar/qml/EditorDNDDelegate.qml |   2 +-
 modules/gui/qt/player/qml/ButtonsLayout.qml   |   2 +-
 modules/gui/qt/player/qml/ControlButtons.qml  | 161 ++++--------------
 .../gui/qt/player/qml/PlayerButtonsLayout.qml |   6 +-
 .../qml/controlbarcontrols/Fallback.qml       |  50 ++++++
 .../qml/controlbarcontrols/LangButton.qml     |   4 +-
 .../qml/controlbarcontrols/MenuButton.qml     |   4 +-
 .../PlaybackSpeedButton.qml                   |   4 +-
 .../qml/controlbarcontrols/VolumeWidget.qml   |   2 +
 modules/gui/qt/vlc.qrc                        |   1 +
 11 files changed, 100 insertions(+), 137 deletions(-)
 create mode 100644 modules/gui/qt/player/qml/controlbarcontrols/Fallback.qml

diff --git a/modules/gui/qt/Makefile.am b/modules/gui/qt/Makefile.am
index 7f554e32b450..838792cf0382 100644
--- a/modules/gui/qt/Makefile.am
+++ b/modules/gui/qt/Makefile.am
@@ -786,6 +786,7 @@ libqt_plugin_la_QML = \
 	gui/qt/player/qml/controlbarcontrols/StopButton.qml \
 	gui/qt/player/qml/controlbarcontrols/TeletextWidget.qml \
 	gui/qt/player/qml/controlbarcontrols/VolumeWidget.qml \
+	gui/qt/player/qml/controlbarcontrols/Fallback.qml \
 	gui/qt/playlist/qml/PlaylistDelegate.qml \
 	gui/qt/playlist/qml/PlaylistListView.qml \
 	gui/qt/playlist/qml/PlaylistOverlayMenu.qml \
diff --git a/modules/gui/qt/dialogs/toolbar/qml/EditorDNDDelegate.qml b/modules/gui/qt/dialogs/toolbar/qml/EditorDNDDelegate.qml
index 8b72e48db97b..1aaa4e83d879 100644
--- a/modules/gui/qt/dialogs/toolbar/qml/EditorDNDDelegate.qml
+++ b/modules/gui/qt/dialogs/toolbar/qml/EditorDNDDelegate.qml
@@ -116,7 +116,7 @@ MouseArea {
                 horizontalCenter: parent.horizontalCenter
                 verticalCenter: parent.verticalCenter
             }
-            sourceComponent: controlButtons.button(model.id).component
+            source: controlButtons.button(model.id).source
             onLoaded: {
                 buttonloader.item.paintOnly = true
                 buttonloader.item.enabled = false
diff --git a/modules/gui/qt/player/qml/ButtonsLayout.qml b/modules/gui/qt/player/qml/ButtonsLayout.qml
index 7752ec8bdce3..1df730b3e5d4 100644
--- a/modules/gui/qt/player/qml/ButtonsLayout.qml
+++ b/modules/gui/qt/player/qml/ButtonsLayout.qml
@@ -97,7 +97,7 @@ FocusScope {
             delegate: Loader {
                 id: buttonloader
 
-                sourceComponent: controlmodelbuttons.button(model.id).component
+                source: controlmodelbuttons.button(model.id).source
 
                 focus: (index === 0)
 
diff --git a/modules/gui/qt/player/qml/ControlButtons.qml b/modules/gui/qt/player/qml/ControlButtons.qml
index 9be48c7c3d78..f707fc759e26 100644
--- a/modules/gui/qt/player/qml/ControlButtons.qml
+++ b/modules/gui/qt/player/qml/ControlButtons.qml
@@ -27,44 +27,42 @@ import "qrc:///style/"
 QtObject {
     id: controlButtons
 
-    property var  parentWindow: undefined
-
-    signal requestLockUnlockAutoHide(bool lock, var source)
+    readonly property string controlPath : "qrc:///player/controlbarcontrols/"
 
     readonly property var buttonList: [
-        { id: ControlListModel.PLAY_BUTTON, component: playBtnDelegate, label: VLCIcons.play, text: i18n.qtr("Play") },
-        { id: ControlListModel.STOP_BUTTON, component: stopBtnDelegate, label: VLCIcons.stop, text: i18n.qtr("Stop") },
-        { id: ControlListModel.OPEN_BUTTON, component: openmediaBtnDelegate, label: VLCIcons.eject, text: i18n.qtr("Open") },
-        { id: ControlListModel.PREVIOUS_BUTTON, component: prevBtnDelegate, label: VLCIcons.previous, text: i18n.qtr("Previous") },
-        { id: ControlListModel.NEXT_BUTTON, component: nextBtnDelegate, label: VLCIcons.next, text: i18n.qtr("Next") },
-        { id: ControlListModel.SLOWER_BUTTON, component: slowerBtnDelegate, label: VLCIcons.slower, text: i18n.qtr("Slower") },
-        { id: ControlListModel.FASTER_BUTTON, component: fasterBtnDelegate, label: VLCIcons.faster, text: i18n.qtr("Faster") },
-        { id: ControlListModel.FULLSCREEN_BUTTON, component: fullScreenBtnDelegate, label: VLCIcons.fullscreen, text: i18n.qtr("Fullscreen") },
-        { id: ControlListModel.EXTENDED_BUTTON, component: extdSettingsBtnDelegate, label: VLCIcons.extended, text: i18n.qtr("Extended panel") },
-        { id: ControlListModel.PLAYLIST_BUTTON, component: playlistBtnDelegate, label: VLCIcons.playlist, text: i18n.qtr("Playlist") },
-        { id: ControlListModel.SNAPSHOT_BUTTON, component: snapshotBtnDelegate, label: VLCIcons.snapshot, text: i18n.qtr("Snapshot") },
-        { id: ControlListModel.RECORD_BUTTON, component: recordBtnDelegate, label: VLCIcons.record, text: i18n.qtr("Record") },
-        { id: ControlListModel.ATOB_BUTTON, component: toggleABloopstateDelegate, label: VLCIcons.atob, text: i18n.qtr("A-B Loop") },
-        { id: ControlListModel.FRAME_BUTTON, component: framebyframeDelegate, label: VLCIcons.frame_by_frame, text: i18n.qtr("Frame By Frame") },
-        { id: ControlListModel.SKIP_BACK_BUTTON, component: stepBackBtnDelegate, label: VLCIcons.skip_back, text: i18n.qtr("Step backward") },
-        { id: ControlListModel.SKIP_FW_BUTTON, component: stepFwdBtnDelegate, label: VLCIcons.skip_for, text: i18n.qtr("Step forward") },
-        { id: ControlListModel.QUIT_BUTTON, component: quitBtnDelegate, label: VLCIcons.clear, text: i18n.qtr("Quit") },
-        { id: ControlListModel.RANDOM_BUTTON, component: randomBtnDelegate, label: VLCIcons.shuffle_on, text: i18n.qtr("Random") },
-        { id: ControlListModel.LOOP_BUTTON, component: repeatBtnDelegate, label: VLCIcons.repeat_all, text: i18n.qtr("Loop") },
-        { id: ControlListModel.INFO_BUTTON, component: mediainfoBtnDelegate, label: VLCIcons.info, text: i18n.qtr("Information") },
-        { id: ControlListModel.LANG_BUTTON, component: langBtnDelegate, label: VLCIcons.audiosub, text: i18n.qtr("Open subtitles") },
-        { id: ControlListModel.MENU_BUTTON, component: menuBtnDelegate, label: VLCIcons.menu, text: i18n.qtr("Menu Button") },
-        { id: ControlListModel.BACK_BUTTON, component: backBtnDelegate, label: VLCIcons.exit, text: i18n.qtr("Back Button") },
-        { id: ControlListModel.CHAPTER_PREVIOUS_BUTTON, component: chapterPreviousBtnDelegate, label: VLCIcons.dvd_prev, text: i18n.qtr("Previous chapter") },
-        { id: ControlListModel.CHAPTER_NEXT_BUTTON, component: chapterNextBtnDelegate, label: VLCIcons.dvd_next, text: i18n.qtr("Next chapter") },
-        { id: ControlListModel.VOLUME, component: volumeBtnDelegate, label: VLCIcons.volume_high, text: i18n.qtr("Volume Widget") },
-        { id: ControlListModel.TELETEXT_BUTTONS, component: teletextdelegate, label: VLCIcons.tvtelx, text: i18n.qtr("Teletext") },
-        { id: ControlListModel.ASPECT_RATIO_COMBOBOX, component: aspectRatioDelegate, label: VLCIcons.aspect_ratio, text: i18n.qtr("Aspect Ratio") },
-        { id: ControlListModel.WIDGET_SPACER, component: spacerDelegate, label: VLCIcons.space, text: i18n.qtr("Spacer") },
-        { id: ControlListModel.WIDGET_SPACER_EXTEND, component: extendiblespacerDelegate, label: VLCIcons.space, text: i18n.qtr("Expanding Spacer") },
-        { id: ControlListModel.PLAYER_SWITCH_BUTTON, component: playerSwitchBtnDelegate, label: VLCIcons.fullscreen, text: i18n.qtr("Switch Player") },
-        { id: ControlListModel.ARTWORK_INFO, component: artworkInfoDelegate, label: VLCIcons.info, text: i18n.qtr("Artwork Info") },
-        { id: ControlListModel.PLAYBACK_SPEED_BUTTON, component: playbackSpeedButtonDelegate, label: "1x", text: i18n.qtr("Playback Speed") }
+        { id: ControlListModel.PLAY_BUTTON, file: "PlayButton.qml", label: VLCIcons.play, text: i18n.qtr("Play") },
+        { id: ControlListModel.STOP_BUTTON, file: "StopButton.qml", label: VLCIcons.stop, text: i18n.qtr("Stop") },
+        { id: ControlListModel.OPEN_BUTTON, file: "OpenButton.qml", label: VLCIcons.eject, text: i18n.qtr("Open") },
+        { id: ControlListModel.PREVIOUS_BUTTON, file: "PreviousButton.qml", label: VLCIcons.previous, text: i18n.qtr("Previous") },
+        { id: ControlListModel.NEXT_BUTTON, file: "NextButton.qml", label: VLCIcons.next, text: i18n.qtr("Next") },
+        { id: ControlListModel.SLOWER_BUTTON, file: "SlowerButton.qml", label: VLCIcons.slower, text: i18n.qtr("Slower") },
+        { id: ControlListModel.FASTER_BUTTON, file: "FasterButton.qml", label: VLCIcons.faster, text: i18n.qtr("Faster") },
+        { id: ControlListModel.FULLSCREEN_BUTTON, file: "FullscreenButton.qml", label: VLCIcons.fullscreen, text: i18n.qtr("Fullscreen") },
+        { id: ControlListModel.EXTENDED_BUTTON, file: "ExtendedSettingsButton.qml", label: VLCIcons.extended, text: i18n.qtr("Extended panel") },
+        { id: ControlListModel.PLAYLIST_BUTTON, file: "PlaylistButton.qml", label: VLCIcons.playlist, text: i18n.qtr("Playlist") },
+        { id: ControlListModel.SNAPSHOT_BUTTON, file: "SnapshotButton.qml", label: VLCIcons.snapshot, text: i18n.qtr("Snapshot") },
+        { id: ControlListModel.RECORD_BUTTON, file: "RecordButton.qml", label: VLCIcons.record, text: i18n.qtr("Record") },
+        { id: ControlListModel.ATOB_BUTTON, file: "AtoBButton.qml", label: VLCIcons.atob, text: i18n.qtr("A-B Loop") },
+        { id: ControlListModel.FRAME_BUTTON, file: "FrameButton.qml", label: VLCIcons.frame_by_frame, text: i18n.qtr("Frame By Frame") },
+        { id: ControlListModel.SKIP_BACK_BUTTON, file: "SkipBackButton.qml", label: VLCIcons.skip_back, text: i18n.qtr("Step backward") },
+        { id: ControlListModel.SKIP_FW_BUTTON, file: "SkipForwardButton.qml", label: VLCIcons.skip_for, text: i18n.qtr("Step forward") },
+        { id: ControlListModel.QUIT_BUTTON, file: "QuitButton.qml", label: VLCIcons.clear, text: i18n.qtr("Quit") },
+        { id: ControlListModel.RANDOM_BUTTON, file: "RandomButton.qml", label: VLCIcons.shuffle_on, text: i18n.qtr("Random") },
+        { id: ControlListModel.LOOP_BUTTON, file: "LoopButton.qml", label: VLCIcons.repeat_all, text: i18n.qtr("Loop") },
+        { id: ControlListModel.INFO_BUTTON, file: "InfoButton.qml", label: VLCIcons.info, text: i18n.qtr("Information") },
+        { id: ControlListModel.LANG_BUTTON, file: "LangButton.qml", label: VLCIcons.audiosub, text: i18n.qtr("Open subtitles") },
+        { id: ControlListModel.MENU_BUTTON, file: "MenuButton.qml", label: VLCIcons.menu, text: i18n.qtr("Menu Button") },
+        { id: ControlListModel.BACK_BUTTON, file: "BackButton.qml", label: VLCIcons.exit, text: i18n.qtr("Back Button") },
+        { id: ControlListModel.CHAPTER_PREVIOUS_BUTTON, file: "ChapterPreviousButton.qml", label: VLCIcons.dvd_prev, text: i18n.qtr("Previous chapter") },
+        { id: ControlListModel.CHAPTER_NEXT_BUTTON, file: "ChapterNextButton.qml", label: VLCIcons.dvd_next, text: i18n.qtr("Next chapter") },
+        { id: ControlListModel.VOLUME, file: "VolumeWidget.qml", label: VLCIcons.volume_high, text: i18n.qtr("Volume Widget") },
+        { id: ControlListModel.TELETEXT_BUTTONS, file: "TeletextWidget.qml", label: VLCIcons.tvtelx, text: i18n.qtr("Teletext") },
+        { id: ControlListModel.ASPECT_RATIO_COMBOBOX, file: "AspectRatioWidget.qml", label: VLCIcons.aspect_ratio, text: i18n.qtr("Aspect Ratio") },
+        { id: ControlListModel.WIDGET_SPACER, file: "SpacerWidget.qml", label: VLCIcons.space, text: i18n.qtr("Spacer") },
+        { id: ControlListModel.WIDGET_SPACER_EXTEND, file: "ExpandingSpacerWidget.qml", label: VLCIcons.space, text: i18n.qtr("Expanding Spacer") },
+        { id: ControlListModel.PLAYER_SWITCH_BUTTON, file: "PlayerSwitchButton.qml", label: VLCIcons.fullscreen, text: i18n.qtr("Switch Player") },
+        { id: ControlListModel.ARTWORK_INFO, file: "ArtworkInfoWidget.qml", label: VLCIcons.info, text: i18n.qtr("Artwork Info") },
+        { id: ControlListModel.PLAYBACK_SPEED_BUTTON, file: "PlaybackSpeedButton.qml", label: "1x", text: i18n.qtr("Playback Speed") }
     ]
 
     function button(id) {
@@ -72,96 +70,11 @@ QtObject {
 
         if (button === undefined) {
             console.log("button delegate id " + id +  " doesn't exist")
-            return { component: fallbackDelegate }
+            return { source: controlPath + "Fallback.qml" }
         }
         
-        return button
-    }
-
-    readonly property Component fallbackDelegate : Widgets.AnimatedBackground {
-        implicitWidth: fbLabel.width + VLCStyle.focus_border * 2
-        implicitHeight: fbLabel.height + VLCStyle.focus_border * 2
-
-        activeBorderColor: colors.bgFocus
-
-        property bool paintOnly: false
-        property VLCColors colors: VLCStyle.colors
+        button.source = controlPath + button.file
 
-        Widgets.MenuLabel {
-            id: fbLabel
-
-            anchors.centerIn: parent
-
-            text: i18n.qtr("WIDGET\nNOT\nFOUND")
-            horizontalAlignment: Text.AlignHCenter
-
-            color: colors.text
-        }
+        return button
     }
-
-    readonly property Component backBtnDelegate : Controls.BackButton { }
-
-    readonly property Component randomBtnDelegate : Controls.RandomButton { }
-
-    readonly property Component prevBtnDelegate : Controls.PreviousButton { }
-
-    readonly property Component playBtnDelegate : Controls.PlayButton { }
-
-    readonly property Component nextBtnDelegate : Controls.NextButton { }
-
-    readonly property Component chapterPreviousBtnDelegate : Controls.ChapterPreviousButton { }
-
-    readonly property Component chapterNextBtnDelegate : Controls.ChapterNextButton { }
-
-    readonly property Component repeatBtnDelegate : Controls.LoopButton { }
-
-    readonly property Component langBtnDelegate : Controls.LangButton { }
-
-    readonly property Component playlistBtnDelegate : Controls.PlaylistButton { }
-
-    readonly property Component menuBtnDelegate : Controls.MenuButton { }
-
-    readonly property Component spacerDelegate : Controls.SpacerWidget { }
-
-    readonly property Component extendiblespacerDelegate : Controls.ExpandingSpacerWidget { }
-
-    readonly property Component fullScreenBtnDelegate : Controls.FullscreenButton { }
-
-    readonly property Component recordBtnDelegate : Controls.RecordButton { }
-
-    readonly property Component toggleABloopstateDelegate : Controls.AtoBButton { }
-
-    readonly property Component snapshotBtnDelegate : Controls.SnapshotButton { }
-
-    readonly property Component stopBtnDelegate : Controls.StopButton { }
-
-    readonly property Component mediainfoBtnDelegate : Controls.InfoButton { }
-
-    readonly property Component framebyframeDelegate : Controls.FrameButton { }
-
-    readonly property Component fasterBtnDelegate : Controls.FasterButton { }
-
-    readonly property Component slowerBtnDelegate : Controls.SlowerButton { }
-
-    readonly property Component openmediaBtnDelegate : Controls.OpenButton { }
-
-    readonly property Component extdSettingsBtnDelegate : Controls.ExtendedSettingsButton { }
-
-    readonly property Component stepFwdBtnDelegate : Controls.SkipForwardButton { }
-
-    readonly property Component stepBackBtnDelegate : Controls.SkipBackButton { }
-
-    readonly property Component quitBtnDelegate : Controls.QuitButton { }
-
-    readonly property Component aspectRatioDelegate : Controls.AspectRatioWidget { }
-
-    readonly property Component teletextdelegate : Controls.TeletextWidget { }
-
-    readonly property Component volumeBtnDelegate : Controls.VolumeWidget { parentWindow: controlButtons.parentWindow }
-
-    readonly property Component playerSwitchBtnDelegate : Controls.PlayerSwitchButton { }
-
-    readonly property Component artworkInfoDelegate : Controls.ArtworkInfoWidget { }
-
-    readonly property Component playbackSpeedButtonDelegate : Controls.PlaybackSpeedButton { }
 }
diff --git a/modules/gui/qt/player/qml/PlayerButtonsLayout.qml b/modules/gui/qt/player/qml/PlayerButtonsLayout.qml
index e37d5b122a39..b308c52e0161 100644
--- a/modules/gui/qt/player/qml/PlayerButtonsLayout.qml
+++ b/modules/gui/qt/player/qml/PlayerButtonsLayout.qml
@@ -28,7 +28,7 @@ FocusScope {
 
     implicitHeight: VLCStyle.maxControlbarControlHeight
 
-    property alias parentWindow: controlmodelbuttons.parentWindow
+    property var parentWindow: g_root
 
     property var colors: undefined
 
@@ -53,10 +53,6 @@ FocusScope {
 
     ControlButtons {
         id: controlmodelbuttons
-
-        parentWindow: g_root
-
-        onRequestLockUnlockAutoHide: playerButtonsLayout.requestLockUnlockAutoHide(lock, source)
     }
 
     Loader {
diff --git a/modules/gui/qt/player/qml/controlbarcontrols/Fallback.qml b/modules/gui/qt/player/qml/controlbarcontrols/Fallback.qml
new file mode 100644
index 000000000000..46eebf87357c
--- /dev/null
+++ b/modules/gui/qt/player/qml/controlbarcontrols/Fallback.qml
@@ -0,0 +1,50 @@
+/*****************************************************************************
+ * Copyright (C) 2021 VLC authors and VideoLAN
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * ( at your option ) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+import QtQuick 2.11
+import QtQuick.Layouts 1.3
+import QtQuick.Controls 2.4
+import QtGraphicalEffects 1.0
+
+import org.videolan.vlc 0.1
+
+import "qrc:///widgets/" as Widgets
+import "qrc:///style/"
+import "qrc:///util/Helpers.js" as Helpers
+
+
+Widgets.AnimatedBackground {
+    implicitWidth: fbLabel.width + VLCStyle.focus_border * 2
+    implicitHeight: fbLabel.height + VLCStyle.focus_border * 2
+
+    activeBorderColor: colors.bgFocus
+
+    property bool paintOnly: false
+    property VLCColors colors: VLCStyle.colors
+
+    Widgets.MenuLabel {
+        id: fbLabel
+
+        anchors.centerIn: parent
+
+        text: i18n.qtr("WIDGET\nNOT\nFOUND")
+        horizontalAlignment: Text.AlignHCenter
+
+        color: colors.text
+    }
+}
diff --git a/modules/gui/qt/player/qml/controlbarcontrols/LangButton.qml b/modules/gui/qt/player/qml/controlbarcontrols/LangButton.qml
index 37bc0e9ea4bc..34ffde0dd398 100644
--- a/modules/gui/qt/player/qml/controlbarcontrols/LangButton.qml
+++ b/modules/gui/qt/player/qml/controlbarcontrols/LangButton.qml
@@ -47,13 +47,13 @@ Widgets.IconControlButton {
             z: 1
 
             onOpened: {
-                controlButtons.requestLockUnlockAutoHide(true, controlButtons)
+                playerButtonsLayout.requestLockUnlockAutoHide(true, playerButtonsLayout)
                 if (!!rootPlayer)
                     rootPlayer.menu = langMenu
             }
 
             onClosed: {
-                controlButtons.requestLockUnlockAutoHide(false, controlButtons)
+                playerButtonsLayout.requestLockUnlockAutoHide(false, playerButtonsLayout)
                 langBtn.forceActiveFocus()
                 if (!!rootPlayer)
                     rootPlayer.menu = undefined
diff --git a/modules/gui/qt/player/qml/controlbarcontrols/MenuButton.qml b/modules/gui/qt/player/qml/controlbarcontrols/MenuButton.qml
index ebbe88c26ad9..21222f2632ee 100644
--- a/modules/gui/qt/player/qml/controlbarcontrols/MenuButton.qml
+++ b/modules/gui/qt/player/qml/controlbarcontrols/MenuButton.qml
@@ -36,7 +36,7 @@ Widgets.IconControlButton {
 
         ctx: mainctx
 
-        onAboutToShow: controlButtons.requestLockUnlockAutoHide(true, contextMenu)
-        onAboutToHide: controlButtons.requestLockUnlockAutoHide(false, contextMenu)
+        onAboutToShow: playerButtonsLayout.requestLockUnlockAutoHide(true, contextMenu)
+        onAboutToHide: playerButtonsLayout.requestLockUnlockAutoHide(false, contextMenu)
     }
 }
diff --git a/modules/gui/qt/player/qml/controlbarcontrols/PlaybackSpeedButton.qml b/modules/gui/qt/player/qml/controlbarcontrols/PlaybackSpeedButton.qml
index d62d2dea8d8a..ee64315ccb92 100644
--- a/modules/gui/qt/player/qml/controlbarcontrols/PlaybackSpeedButton.qml
+++ b/modules/gui/qt/player/qml/controlbarcontrols/PlaybackSpeedButton.qml
@@ -63,13 +63,13 @@ Widgets.IconControlButton {
             })
 
             // player related --
-            controlButtons.requestLockUnlockAutoHide(true, controlButtons)
+            playerButtonsLayout.requestLockUnlockAutoHide(true, playerButtonsLayout)
             if (!!rootPlayer)
                 rootPlayer.menu = playbackSpeedPopup
         }
 
         onClosed: {
-            controlButtons.requestLockUnlockAutoHide(false, controlButtons)
+            playerButtonsLayout.requestLockUnlockAutoHide(false, playerButtonsLayout)
             playbackSpeedButton.forceActiveFocus()
             if (!!rootPlayer)
                 rootPlayer.menu = undefined
diff --git a/modules/gui/qt/player/qml/controlbarcontrols/VolumeWidget.qml b/modules/gui/qt/player/qml/controlbarcontrols/VolumeWidget.qml
index 37f1fee871ed..c4026956d553 100644
--- a/modules/gui/qt/player/qml/controlbarcontrols/VolumeWidget.qml
+++ b/modules/gui/qt/player/qml/controlbarcontrols/VolumeWidget.qml
@@ -175,6 +175,8 @@ FocusScope{
                 xPos: (handle.x + handle.width / 2)
 
                 colors: widgetfscope.colors
+
+                parentWindow: (typeof playerButtonsLayout === "undefined") ? g_root : playerButtonsLayout.parentWindow
             }
 
             background: Rectangle {
diff --git a/modules/gui/qt/vlc.qrc b/modules/gui/qt/vlc.qrc
index e69e931d531b..89396e885f87 100644
--- a/modules/gui/qt/vlc.qrc
+++ b/modules/gui/qt/vlc.qrc
@@ -378,6 +378,7 @@
         <file alias="StopButton.qml">player/qml/controlbarcontrols/StopButton.qml</file>
         <file alias="TeletextWidget.qml">player/qml/controlbarcontrols/TeletextWidget.qml</file>
         <file alias="VolumeWidget.qml">player/qml/controlbarcontrols/VolumeWidget.qml</file>
+        <file alias="Fallback.qml">player/qml/controlbarcontrols/Fallback.qml</file>
     </qresource>
     <qresource prefix="/about">
         <file alias="About.qml">dialogs/help/qml/About.qml</file>
-- 
GitLab