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