rpms/lxmusic/F-12 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 23:01:38 UTC 2009
Author: cwickert
Update of /cvs/pkgs/rpms/lxmusic/F-12
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv3096/F-12
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/F-12/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 23:01:37 -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.4.0-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