rpms/lxmusic/devel lxmusic-0.4.0-check-for-valid-playlist-positions.patch, NONE, 1.1 lxmusic-0.4.0-invalidate-cur_track_iter.patch, NONE, 1.1 lxmusic-0.4.0-remove-cur_track_iter.patch, NONE, 1.1 lxmusic.spec, 1.5, 1.6

Christoph Wickert cwickert at fedoraproject.org
Wed Dec 16 22:49:55 UTC 2009


Author: cwickert

Update of /cvs/pkgs/rpms/lxmusic/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv629

Modified Files:
	lxmusic.spec 
Added Files:
	lxmusic-0.4.0-check-for-valid-playlist-positions.patch 
	lxmusic-0.4.0-invalidate-cur_track_iter.patch 
	lxmusic-0.4.0-remove-cur_track_iter.patch 
Log Message:
* Wed Dec 16 2009 Christoph Wickert <cwickert at fedoraproject.org> - 0.4.0-2
- Fix crash when emptying large playlists (#539729)


lxmusic-0.4.0-check-for-valid-playlist-positions.patch:
 lxmusic.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--- NEW FILE lxmusic-0.4.0-check-for-valid-playlist-positions.patch ---
--- trunk/lxmusic/src/lxmusic.c	2009/12/11 21:38:41	2190
+++ trunk/lxmusic/src/lxmusic.c	2009/12/11 22:01:10	2191
@@ -1813,9 +1813,9 @@
         {
 	    xmmsv_t *pos_val;
 	    
-            if( xmmsv_dict_get( val, "position", &pos_val ) ) 
+            if( xmmsv_dict_get( val, "position", &pos_val ) && xmmsv_get_int( pos_val, &pos ) && (pos >= 0 ) ) 
             {
-		xmmsv_get_int( pos_val, &pos );
+		;
                 /* mark currently played song in the playlist with bold font. */
                 GtkTreePath* path = gtk_tree_path_new_from_indices( pos, -1 );
                 GtkTreeIter it;

lxmusic-0.4.0-invalidate-cur_track_iter.patch:
 lxmusic.c |    8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

--- NEW FILE lxmusic-0.4.0-invalidate-cur_track_iter.patch ---
--- trunk/lxmusic/src/lxmusic.c	2009/12/11 04:00:56	2189
+++ trunk/lxmusic/src/lxmusic.c	2009/12/11 21:38:41	2190
@@ -1613,14 +1613,20 @@
                 GtkTreeIter it;
 		xmmsv_get_int( int_value, &pos );
                 path = gtk_tree_path_new_from_indices( pos, -1 );
-                if( gtk_tree_model_get_iter( (GtkTreeModel*)list_store, &it, path ) )
+                if( gtk_tree_model_get_iter( (GtkTreeModel*)list_store, &it, path ) ) 
+		{
                     gtk_list_store_remove( list_store, &it );
+		    /* invalidate currently played track */
+		    if ( it.stamp == cur_track_iter.stamp ) 
+			cur_track_iter.stamp = 0;
+		}
                 gtk_tree_path_free( path );
 	    }
             break;
         case XMMS_PLAYLIST_CHANGED_CLEAR:
         {
             gtk_list_store_clear( list_store );
+	    cur_track_iter.stamp = 0;
             break;
         }
         case XMMS_PLAYLIST_CHANGED_MOVE:

lxmusic-0.4.0-remove-cur_track_iter.patch:
 lxmusic.c |   53 +++++++++++++++++++++++++++++++++++++++--------------
 1 file changed, 39 insertions(+), 14 deletions(-)

--- NEW FILE lxmusic-0.4.0-remove-cur_track_iter.patch ---
--- trunk/lxmusic/src/lxmusic.c	2009/12/13 05:21:24	2194
+++ trunk/lxmusic/src/lxmusic.c	2009/12/13 21:08:32	2195
@@ -107,7 +107,6 @@
 static uint32_t play_time = 0;
 static int32_t cur_track_duration = 0;
 static int32_t cur_track_id = 0;
-static GtkTreeIter cur_track_iter = {0};
 
 static int repeat_mode = REPEAT_NONE;
 
@@ -130,7 +129,10 @@
 static int win_xpos = 0;
 static int win_ypos = 0;
 
-void on_play_btn_clicked(GtkButton* btn, gpointer user_data);
+void 			on_locate_cur_track	(GtkAction* act, gpointer user_data);
+void 			on_play_btn_clicked	(GtkButton* btn, gpointer user_data);
+
+static GtkTreeIter	get_current_track_iter	();
 
 static void load_config()
 {
@@ -1211,7 +1213,7 @@
                         COL_TITLE, title,
                         COL_LEN, time_buf, -1 );
 
-    current_track_updated = ut->it.user_data == cur_track_iter.user_data;
+    current_track_updated = ut->id == cur_track_id;
     if ( current_track_updated ) 
     {
 	/* send desktop notification if current track was updated */  
@@ -1416,8 +1418,8 @@
         g_free(cur_playlist);
         cur_playlist = g_strdup(name);
 
-        cur_track_iter.stamp = 0; /* invalidate the GtkTreeIter of currenyly played track. */
-        cur_track_id = -1;
+	/* invalidate currenyly played track id. */
+        cur_track_id = 0;
 
         /* update the menu */
         if( cur_playlist )
@@ -1617,8 +1619,10 @@
 		{
                     gtk_list_store_remove( list_store, &it );
 		    /* invalidate currently played track */
-		    if ( it.stamp == cur_track_iter.stamp ) 
-			cur_track_iter.stamp = 0;
+		    xmmsv_dict_get( value, "id", &int_value );
+		    xmmsv_get_int( int_value, &id );
+		    if ( id == cur_track_id ) 
+			cur_track_id = 0;
 		}
                 gtk_tree_path_free( path );
 	    }
@@ -1626,7 +1630,7 @@
         case XMMS_PLAYLIST_CHANGED_CLEAR:
         {
             gtk_list_store_clear( list_store );
-	    cur_track_iter.stamp = 0;
+	    cur_track_id = 0;
             break;
         }
         case XMMS_PLAYLIST_CHANGED_MOVE:
@@ -1811,21 +1815,24 @@
 	xmmsv_get_string( name_val, &name );
         if( name && cur_playlist && !strcmp(cur_playlist, name) )
         {
-	    xmmsv_t *pos_val;
-	    
+	    xmmsv_t *pos_val, *int_value;
+
             if( xmmsv_dict_get( val, "position", &pos_val ) && xmmsv_get_int( pos_val, &pos ) && (pos >= 0 ) ) 
             {
-		;
                 /* mark currently played song in the playlist with bold font. */
                 GtkTreePath* path = gtk_tree_path_new_from_indices( pos, -1 );
                 GtkTreeIter it;
                 if( gtk_tree_model_get_iter( GTK_TREE_MODEL(list_store), &it, path ) )
                 {
+		    GtkTreeIter cur_track_iter = get_current_track_iter();
+		    /* prev. current track */
                     if( cur_track_iter.stamp )
                         gtk_list_store_set(list_store, &cur_track_iter, COL_WEIGHT, PANGO_WEIGHT_NORMAL, -1);
-		    
                     gtk_list_store_set(list_store, &it, COL_WEIGHT, PANGO_WEIGHT_BOLD, -1);
-                    cur_track_iter = it;
+
+		    /* update id of currently played track */
+		    xmmsv_dict_get( val, "id", &int_value );
+		    xmmsv_get_int( int_value, &cur_track_id );
                 }
 		/* scroll to currently played song */
 		gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(playlist_view), path, NULL, FALSE, 0.0, 0.0 );
@@ -1836,9 +1843,9 @@
     return TRUE;
 }
 
-
 void on_locate_cur_track(GtkAction* act, gpointer user_data)
 {
+    GtkTreeIter cur_track_iter = get_current_track_iter();
     if( cur_track_iter.stamp )
     {
         GtkTreeModelFilter* mf;
@@ -1860,6 +1867,24 @@
     }
 }
 
+static GtkTreeIter get_current_track_iter() 
+{
+    GtkTreeIter it, found_it = {0};
+    int count=0;
+    if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL(list_store), &it )) 
+    {
+	do {
+	    count++;
+	    gint weight;
+	    gtk_tree_model_get (GTK_TREE_MODEL(list_store), 
+				&it, COL_WEIGHT, &weight, -1);
+	    if (weight == PANGO_WEIGHT_BOLD) 
+		found_it = it;
+	} while (!found_it.stamp && gtk_tree_model_iter_next( GTK_TREE_MODEL(list_store), &it ));
+    }
+    return found_it;
+}
+
 static void get_channel_volumes( const char *key, xmmsv_t *value, void *user_data)
 {
     GSList** volumes = (GSList**)user_data;


Index: lxmusic.spec
===================================================================
RCS file: /cvs/pkgs/rpms/lxmusic/devel/lxmusic.spec,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -p -r1.5 -r1.6
--- lxmusic.spec	4 Sep 2009 22:48:41 -0000	1.5
+++ lxmusic.spec	16 Dec 2009 22:49:54 -0000	1.6
@@ -1,6 +1,6 @@
 Name:           lxmusic
 Version:        0.4.0
-Release:        1%{?dist}
+Release:        2%{?dist}
 Summary:        Lightweight XMMS2 client with simple user interface
 
 Group:          Applications/Multimedia
@@ -8,6 +8,13 @@ License:        GPLv2+
 URL:            http://lxde.org
 Source0:        http://downloads.sourceforge.net/lxde/%{name}-%{version}.tar.gz
 Patch0:         lxmusic-0.3.0-no-tools-menu.patch
+# Fixes for https://bugzilla.redhat.com/show_bug.cgi?id=539729
+# http://lxde.svn.sourceforge.net/viewvc/lxde?view=rev&revision=2190
+Patch1:         lxmusic-0.4.0-invalidate-cur_track_iter.patch
+# http://lxde.svn.sourceforge.net/viewvc/lxde?view=rev&revision=2191
+Patch2:         lxmusic-0.4.0-check-for-valid-playlist-positions.patch
+# http://lxde.svn.sourceforge.net/viewvc/lxde?view=rev&revision=2195
+Patch3:         lxmusic-0.5.4-remove-cur_track_iter.patch
 BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 
 BuildRequires:  gtk2-devel >= 2.12.0 xmms2-devel >= 0.6
@@ -23,6 +30,9 @@ player of LXDE (Lightweight X11 Desktop 
 %prep
 %setup -q
 %patch0 -p1 -b .no-tools
+%patch1 -p2 -b .cur_track_iter
+%patch2 -p2 -b .playlist-positions
+%patch3 -p2 -b .cur_track_iter2
 
 
 %build
@@ -54,6 +64,9 @@ rm -rf $RPM_BUILD_ROOT
 
 
 %changelog
+* Wed Dec 16 2009 Christoph Wickert <cwickert at fedoraproject.org> - 0.4.0-2
+- Fix crash when emptying large playlists (#539729)
+
 * Sat Sep 05 2009 Christoph Wickert <cwickert at fedoraproject.org> - 0.4.0-1
 - Update to 0.4.0
 




More information about the fedora-extras-commits mailing list