From af10ead71f24220479ad5be2f153cfa60b787367 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Cl=C3=A9ment=20Stenac?= <zorglub@videolan.org>
Date: Sun, 4 Dec 2005 21:14:12 +0000
Subject: [PATCH] Implement playtree.sort() (basic implementation)

Fix a bug in delete
---
 modules/gui/skins2/commands/cmd_playtree.cpp | 11 ++++++++++-
 modules/gui/skins2/controls/ctrl_tree.cpp    |  1 +
 modules/gui/skins2/src/skin_main.cpp         |  3 +--
 modules/gui/skins2/vars/playtree.cpp         |  3 ++-
 4 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/modules/gui/skins2/commands/cmd_playtree.cpp b/modules/gui/skins2/commands/cmd_playtree.cpp
index e74c12df2725..b565bffa8727 100644
--- a/modules/gui/skins2/commands/cmd_playtree.cpp
+++ b/modules/gui/skins2/commands/cmd_playtree.cpp
@@ -32,5 +32,14 @@ void CmdPlaytreeDel::execute()
 
 void CmdPlaytreeSort::execute()
 {
-    // TODO
+    // TODO: Choose sort method
+    playlist_t *p_playlist = getIntf()->p_sys->p_playlist;
+    vlc_mutex_lock( &p_playlist->object_lock );
+    playlist_view_t* p_view = playlist_ViewFind( p_playlist, p_playlist->status.i_view );
+    playlist_RecursiveNodeSort( p_playlist, p_view->p_root , SORT_TITLE, ORDER_NORMAL );
+    vlc_mutex_unlock( &p_playlist->object_lock );
+
+    // Ask for rebuild
+    Playtree &rVar = VlcProc::instance( getIntf() )->getPlaytreeVar();
+    rVar.onChange();
 }
diff --git a/modules/gui/skins2/controls/ctrl_tree.cpp b/modules/gui/skins2/controls/ctrl_tree.cpp
index 35fbcb9d5687..7023ef8bc572 100644
--- a/modules/gui/skins2/controls/ctrl_tree.cpp
+++ b/modules/gui/skins2/controls/ctrl_tree.cpp
@@ -140,6 +140,7 @@ void CtrlTree::onUpdate( Subject<VarTree, tree_update*> &rTree,
     }
     else if ( arg->i_type == 1 ) // Global change or deletion
     {
+        m_firstPos = m_rTree.begin();
         makeImage();
     }
     else if ( arg->i_type == 2 ) // Item-append
diff --git a/modules/gui/skins2/src/skin_main.cpp b/modules/gui/skins2/src/skin_main.cpp
index d4aca6a307c6..62468b25fb91 100644
--- a/modules/gui/skins2/src/skin_main.cpp
+++ b/modules/gui/skins2/src/skin_main.cpp
@@ -245,8 +245,7 @@ static void Run( intf_thread_t *p_intf )
                                            FIND_ANYWHERE );
         if( p_playlist )
         {
-            p_playlist->status.i_view = -1;
-            playlist_Control( p_playlist, PLAYLIST_AUTOPLAY );
+            playlist_LockControl( p_playlist, PLAYLIST_AUTOPLAY );
             vlc_object_release( p_playlist );
         }
     }
diff --git a/modules/gui/skins2/vars/playtree.cpp b/modules/gui/skins2/vars/playtree.cpp
index bcfaa7824a56..08a19563245e 100644
--- a/modules/gui/skins2/vars/playtree.cpp
+++ b/modules/gui/skins2/vars/playtree.cpp
@@ -200,6 +200,7 @@ void Playtree::buildTree()
     buildNode( p_view->p_root, *this );
 
     vlc_mutex_unlock( &m_pPlaylist->object_lock );
-    checkParents( NULL );
+//  What is it ?
+//    checkParents( NULL );
 }
 
-- 
GitLab