[vlc-devel] [PATCH 1/2] qt: enable windowed playlist
Abel Tesfaye
abeltesfaye45 at gmail.com
Wed Jul 3 08:48:02 CEST 2019
Both patches are resends.
On Wed, 3 Jul 2019 at 09:47, Abel Tesfaye <abeltesfaye45 at gmail.com> wrote:
> From: Abel Tesfaye <Abeltesfaye45 at gmail.com>
>
> fixes #22173
> ---
> modules/gui/qt/main_interface.cpp | 14 +++++++
> modules/gui/qt/main_interface.hpp | 9 +++++
> modules/gui/qt/qml/BannerSources.qml | 16 +++++---
> modules/gui/qt/qml/MainInterface.qml | 15 ++++++++
> .../gui/qt/qml/mediacenter/MCMainDisplay.qml | 38 ++++++++-----------
> modules/gui/qt/qml/menus/ViewMenu.qml | 11 ++++++
> modules/gui/qt/qml/player/ControlBar.qml | 2 +
> modules/gui/qt/qml/player/ModalControlBar.qml | 3 --
> modules/gui/qt/qml/player/Player.qml | 30 +++++++--------
> 9 files changed, 91 insertions(+), 47 deletions(-)
>
> diff --git a/modules/gui/qt/main_interface.cpp
> b/modules/gui/qt/main_interface.cpp
> index 029a9f9d0b..b6c9219d53 100644
> --- a/modules/gui/qt/main_interface.cpp
> +++ b/modules/gui/qt/main_interface.cpp
> @@ -537,6 +537,20 @@ void MainInterface::setVideoOnTop( bool on_top )
> }
> }
>
> +void MainInterface::setPlaylistDocked( bool docked )
> +{
> + b_playlistDocked = docked;
> +
> + emit playlistDockedChanged(docked);
> +}
> +
> +void MainInterface::setPlaylistVisible( bool visible )
> +{
> + playlistVisible = visible;
> +
> + emit playlistVisibleChanged(visible);
> +}
> +
> void MainInterface::setInterfaceAlwaysOnTop( bool on_top )
> {
> b_interfaceOnTop = on_top;
> diff --git a/modules/gui/qt/main_interface.hpp
> b/modules/gui/qt/main_interface.hpp
> index 3ceb91b40f..61a11ec4bf 100644
> --- a/modules/gui/qt/main_interface.hpp
> +++ b/modules/gui/qt/main_interface.hpp
> @@ -63,6 +63,8 @@ class MainInterface : public QVLCMW
> {
> Q_OBJECT
>
> + Q_PROPERTY(bool playlistDocked READ isPlaylistDocked WRITE
> setPlaylistDocked NOTIFY playlistDockedChanged)
> + Q_PROPERTY(bool playlistVisible READ isPlaylistVisible WRITE
> setPlaylistVisible NOTIFY playlistVisibleChanged)
> Q_PROPERTY(bool interfaceAlwaysOnTop READ isInterfaceAlwaysOnTop
> WRITE setInterfaceAlwaysOnTop NOTIFY interfaceAlwaysOnTopChanged)
> Q_PROPERTY(bool interfaceFullScreen READ isInterfaceFullScreen WRITE
> setInterfaceFullScreen NOTIFY interfaceFullScreenChanged)
> Q_PROPERTY(bool hasEmbededVideo READ hasEmbededVideo NOTIFY
> hasEmbededVideoChanged)
> @@ -111,6 +113,8 @@ public:
> RAISE_AUDIOVIDEO,
> };
> bool isInterfaceFullScreen() { return b_interfaceFullScreen; }
> + bool isPlaylistDocked() { return b_playlistDocked; }
> + bool isPlaylistVisible() { return playlistVisible; }
> bool isInterfaceAlwaysOnTop() { return b_interfaceOnTop; }
> bool hasEmbededVideo() { return m_hasEmbededVideo; }
> QList<QQmlError> qmlErrors() const;
> @@ -171,6 +175,7 @@ protected:
> bool b_videoFullScreen; ///< --fullscreen
> bool b_hideAfterCreation;
> bool b_minimalView; ///< Minimal video
> + bool b_playlistDocked;
> bool b_interfaceFullScreen;
> bool b_interfaceOnTop; ///keep UI on top
> bool b_pauseOnMinimize;
> @@ -196,6 +201,8 @@ public slots:
> void showUpdateSystrayMenu();
> void hideUpdateSystrayMenu();
> void toggleInterfaceFullScreen();
> + void setPlaylistDocked( bool );
> + void setPlaylistVisible( bool );
> void setInterfaceAlwaysOnTop( bool );
>
> void emitBoss();
> @@ -242,6 +249,8 @@ signals:
> void askPopupMenu( bool show );
> void kc_pressed(); /* easter eggs */
>
> + void playlistDockedChanged(bool);
> + void playlistVisibleChanged(bool);
> void interfaceAlwaysOnTopChanged(bool);
> void interfaceFullScreenChanged(bool);
> void hasEmbededVideoChanged(bool);
> diff --git a/modules/gui/qt/qml/BannerSources.qml
> b/modules/gui/qt/qml/BannerSources.qml
> index 67d99dae57..e6acb42c93 100644
> --- a/modules/gui/qt/qml/BannerSources.qml
> +++ b/modules/gui/qt/qml/BannerSources.qml
> @@ -352,7 +352,7 @@ Utils.NavigableFocusScope {
> size: VLCStyle.icon_normal
> text: VLCIcons.playlist
>
> - onClicked: root.toogleMenu()
> + onClicked: rootWindow.playlistVisible =
> !rootWindow.playlistVisible
>
> KeyNavigation.right: menu_selector
> KeyNavigation.up: buttonView
> @@ -364,14 +364,17 @@ Utils.NavigableFocusScope {
> size: VLCStyle.icon_normal
> text: VLCIcons.menu
>
> + KeyNavigation.left: playlist_btn
> + KeyNavigation.right: playlist
> +
> onClicked: mainMenu.openBelow(this)
>
> - Menus.MainDropdownMenu {
> - id: mainMenu
> - onClosed: menu_selector.forceActiveFocus()
> + Menus.MainDropdownMenu {
> + id: mainMenu
> + onClosed: {
> + if (mainMenu.activeFocus)
> + menu_selector.forceActiveFocus()
> }
> -
> - KeyNavigation.up: buttonView
> }
> }
> }
> @@ -413,3 +416,4 @@ Utils.NavigableFocusScope {
> defaultKeyAction(event, 0)
> }
> }
> +}
> diff --git a/modules/gui/qt/qml/MainInterface.qml
> b/modules/gui/qt/qml/MainInterface.qml
> index 0d23bc068b..e898d9a5d3 100644
> --- a/modules/gui/qt/qml/MainInterface.qml
> +++ b/modules/gui/qt/qml/MainInterface.qml
> @@ -27,11 +27,26 @@ import "qrc:///style/"
> import "qrc:///player/" as Player
> import "qrc:///about/" as AB
> import "qrc:///dialogs/" as DG
> +import "qrc:///playlist/" as PL
> +import QtQuick.Window 2.11
>
> Rectangle {
> id: root
> color: "transparent"
>
> + Window {
> + id: playlistWindow
> + visible: !rootWindow.playlistDocked && rootWindow.playlistVisible
> + title: qsTr("Playlist")
> + color: VLCStyle.colors.bg
> + onClosing: rootWindow.playlistVisible = false
> + PL.PlaylistListView {
> + id: playlistView
> + focus: true
> + anchors.fill: parent
> + }
> + }
> +
> PlaylistControllerModel {
> id: mainPlaylistController
> playlistPtr: mainctx.playlist
> diff --git a/modules/gui/qt/qml/mediacenter/MCMainDisplay.qml
> b/modules/gui/qt/qml/mediacenter/MCMainDisplay.qml
> index a7cfaa2252..25b78d4cde 100644
> --- a/modules/gui/qt/qml/mediacenter/MCMainDisplay.qml
> +++ b/modules/gui/qt/qml/mediacenter/MCMainDisplay.qml
> @@ -88,7 +88,7 @@ Utils.NavigableFocusScope {
> focus: true
> id: medialibId
> anchors.fill: parent
> - onActionRight: playlist.show()
> + onActionRight: rootWindow.playlistVisible = true
>
> ColumnLayout {
> id: column
> @@ -135,8 +135,6 @@ Utils.NavigableFocusScope {
> onActionRight: root.actionRight(index)
> onActionUp: root.actionUp(index)
> onActionCancel: root.actionCancel(index)
> -
> - onToogleMenu: playlist.toggleState()
> }
>
> Utils.StackViewExt {
> @@ -169,7 +167,11 @@ Utils.NavigableFocusScope {
> focus: false
> expandHorizontally: true
>
> - state: "hidden"
> + state: (rootWindow.playlistDocked &&
> rootWindow.playlistVisible) ? "visible" : "hidden"
> + onVisibleChanged: {
> + if (playlist.visible)
> + playlist.forceActiveFocus()
> + }
> component: Rectangle {
> color:
> VLCStyle.colors.setColorAlpha(VLCStyle.colors.banner, 0.9)
> width: root.width/3
> @@ -186,28 +188,18 @@ Utils.NavigableFocusScope {
> id: playlistView
> focus: true
> anchors.fill: parent
> - onActionLeft: playlist.quit()
> - onActionCancel: playlist.quit()
> - onActionUp: {
> - playlist.state = "hidden"
> - sourcesBanner.forceActiveFocus()
> - }
> + onActionLeft:
> playlist.closeAndFocus(stackView.currentItem)
> + onActionCancel:
> playlist.closeAndFocus(stackView.currentItem)
> + onActionUp:
> playlist.closeAndFocus(sourcesBanner)
> }
> }
> }
> - function toggleState() {
> - if (state === "hidden")
> - show()
> - else
> - quit()
> - }
> - function quit() {
> - state = "hidden"
> - stackView.currentItem.forceActiveFocus()
> - }
> - function show() {
> - state = "visible"
> - playlist.forceActiveFocus()
> + function closeAndFocus(item){
> + if (!item)
> + return
> +
> + rootWindow.playlistVisible = false
> + item.forceActiveFocus()
> }
> }
> }
> diff --git a/modules/gui/qt/qml/menus/ViewMenu.qml
> b/modules/gui/qt/qml/menus/ViewMenu.qml
> index 7a58605092..f8fd0abf2b 100644
> --- a/modules/gui/qt/qml/menus/ViewMenu.qml
> +++ b/modules/gui/qt/qml/menus/ViewMenu.qml
> @@ -22,6 +22,17 @@ import "qrc:///style/"
> import "qrc:///utils/" as Utils
>
> Utils.MenuExt {
> + id: viewMenu
> + Action {
> + text: qsTr("Play&list")
> + onTriggered: rootWindow.playlistVisible =
> !rootWindow.playlistVisible
> + }
> + Action {
> + text: qsTr("Docked Playlist")
> + checkable: true
> + checked: rootWindow.playlistDocked
> + onTriggered: rootWindow.playlistDocked =
> !rootWindow.playlistDocked
> + }
> Action {
> text: qsTr("&Always on Top")
> checkable: true
> diff --git a/modules/gui/qt/qml/player/ControlBar.qml
> b/modules/gui/qt/qml/player/ControlBar.qml
> index 76399d488d..6d17375e13 100644
> --- a/modules/gui/qt/qml/player/ControlBar.qml
> +++ b/modules/gui/qt/qml/player/ControlBar.qml
> @@ -26,6 +26,7 @@ import org.videolan.vlc 0.1
> import "qrc:///style/"
> import "qrc:///utils/" as Utils
> import "qrc:///menus/" as Menus
> +import "qrc:///playlist/" as PL
>
>
> Utils.NavigableFocusScope {
> @@ -121,6 +122,7 @@ Utils.NavigableFocusScope {
> if (buttonindex > 0)
> buttonloader.item.KeyNavigation.left
> = buttonrow.children[buttonindex-1].item
>
> +
> }
> }
> }
> diff --git a/modules/gui/qt/qml/player/ModalControlBar.qml
> b/modules/gui/qt/qml/player/ModalControlBar.qml
> index d534c8cdd0..a8e0d5ebeb 100644
> --- a/modules/gui/qt/qml/player/ModalControlBar.qml
> +++ b/modules/gui/qt/qml/player/ModalControlBar.qml
> @@ -26,8 +26,6 @@ import "qrc:///utils/" as Utils
>
> Utils.NavigableFocusScope {
> id: root
> - signal showPlaylist();
> -
> property bool showPlaylistButton: false
>
> property bool forceNoAutoHide: false
> @@ -41,7 +39,6 @@ Utils.NavigableFocusScope {
> showPlaylistButton: root.showPlaylistButton
>
> onShowTrackBar: root.state = "tracks"
> - onShowPlaylist: root.showPlaylist()
>
> onActionUp: root.actionUp(index)
> onActionDown: root.actionDown(index)
> diff --git a/modules/gui/qt/qml/player/Player.qml
> b/modules/gui/qt/qml/player/Player.qml
> index 403b8650ed..7beb818947 100644
> --- a/modules/gui/qt/qml/player/Player.qml
> +++ b/modules/gui/qt/qml/player/Player.qml
> @@ -125,7 +125,11 @@ Utils.NavigableFocusScope {
> }
> focus: false
> expandHorizontally: true
> -
> + state: (rootWindow.playlistDocked && rootWindow.playlistVisible)
> ? "visible" : "hidden"
> + onVisibleChanged: {
> + if (playlistpopup.visible)
> + playlistpopup.forceActiveFocus()
> + }
> component: Rectangle {
> color: VLCStyle.colors.setColorAlpha(VLCStyle.colors.banner,
> 0.8)
> width: root.width/4
> @@ -135,18 +139,22 @@ Utils.NavigableFocusScope {
> id: playlistView
> focus: true
> anchors.fill: parent
> - onActionLeft: playlistpopup.quit()
> - onActionCancel: playlistpopup.quit()
> + onActionLeft: playlistpopup.closeAndFocus(controlBarView)
> + onActionCancel:
> playlistpopup.closeAndFocus(controlBarView)
> }
> }
> - function quit() {
> - state = "hidden"
> - controlBarView.focus = true
> - }
> onStateChanged: {
> if (state === "hidden")
> toolbarAutoHide.restart()
> }
> +
> + function closeAndFocus(item){
> + if (!item)
> + return
> +
> + rootWindow.playlistVisible = false
> + item.forceActiveFocus()
> + }
> }
>
>
> @@ -193,14 +201,6 @@ Utils.NavigableFocusScope {
> onActionLeft: root.actionLeft(index)
> onActionRight: root.actionRight(index)
> onActionCancel: root.actionCancel(index)
> - onShowPlaylist: {
> - if (playlistpopup.state === "visible") {
> - playlistpopup.state = "hidden"
> - } else {
> - playlistpopup.state = "visible"
> - playlistpopup.focus = true
> - }
> - }
>
> //unhandled keys are forwarded to the vout window
> Keys.forwardTo: videoSurface
> --
> 2.21.0
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/vlc-devel/attachments/20190703/64c0dcf5/attachment.html>
More information about the vlc-devel
mailing list