[Xfce4-commits] <parole:master> Properly use symbolic icons in the playlist

Sean Davis noreply at xfce.org
Sat Nov 9 15:54:01 CET 2013


Updating branch refs/heads/master
         to 4812174d4b580f1fdb4101d9f5be405a7099deb5 (commit)
       from 3436ff74f9c6bd8376903f0b9b184b8876321c5f (commit)

commit 4812174d4b580f1fdb4101d9f5be405a7099deb5
Author: Sean Davis <smd.seandavis at gmail.com>
Date:   Sat Nov 9 09:52:15 2013 -0500

    Properly use symbolic icons in the playlist

 src/parole-medialist.c |   66 ++++++++++++++++++++++++++++++++++++++++++------
 src/parole-medialist.h |   13 +++++++---
 src/parole-player.c    |   43 ++++++++-----------------------
 3 files changed, 79 insertions(+), 43 deletions(-)

diff --git a/src/parole-medialist.c b/src/parole-medialist.c
index 7cd1653..bd12a27 100644
--- a/src/parole-medialist.c
+++ b/src/parole-medialist.c
@@ -322,7 +322,7 @@ parole_media_list_add (ParoleMediaList *list, ParoleFile *file, gboolean disc, g
                         NAME_COL, parole_file_get_display_name (file),
                         DATA_COL, file,
                         LENGTH_COL, parole_taglibc_get_media_length (file),
-                        PIXBUF_COL, NULL,
+                        STATE_COL, PAROLE_MEDIA_STATE_NONE,
                         -1);
     
     if ( emit || select_row )
@@ -1485,14 +1485,54 @@ parole_media_list_class_init (ParoleMediaListClass *klass)
 }
 
 static void
+parole_media_list_playing_cell_data_func (GtkTreeViewColumn *column,
+				                          GtkCellRenderer *renderer,
+				                          GtkTreeModel *tree_model,
+				                          GtkTreeIter *iter,
+				                          GtkWidget *view)
+{
+	//RhythmDBEntry *entry;
+	const char *name = NULL;
+
+	//entry = rhythmdb_query_model_iter_to_entry (view->priv->model, iter);
+
+	//if (entry == NULL) {
+	//	return;
+	//}
+    gint state = 0;
+    gtk_tree_model_get (tree_model, iter, STATE_COL, &state, -1);
+
+	//if (entry == view->priv->playing_entry) {
+		switch (state) {
+		case PAROLE_MEDIA_STATE_NONE:
+			name = NULL;
+			break;
+		case PAROLE_MEDIA_STATE_PAUSED:
+			name = "media-playback-pause-symbolic";
+			break;
+		case PAROLE_MEDIA_STATE_PLAYING:
+			name = "media-playback-start-symbolic";
+			break;
+		default:
+			name = NULL;
+			break;
+	//	}
+	}
+
+	g_object_set (renderer, "icon-name", name, NULL);
+
+	//rhythmdb_entry_unref (entry);
+}
+
+static void
 parole_media_list_setup_view (ParoleMediaList *list)
 {
     GtkTreeSelection *sel, *disc_sel;
     GtkListStore *list_store, *disc_list_store;
     GtkCellRenderer *renderer, *disc_renderer;
 
-    list_store = gtk_list_store_new (COL_NUMBERS, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_OBJECT);
-    disc_list_store = gtk_list_store_new (COL_NUMBERS, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_OBJECT);
+    list_store = gtk_list_store_new (COL_NUMBERS, G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_OBJECT);
+    disc_list_store = gtk_list_store_new (COL_NUMBERS, G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_OBJECT);
 
     gtk_tree_view_set_model (GTK_TREE_VIEW (list->priv->view), GTK_TREE_MODEL(list_store));
     gtk_tree_view_set_model (GTK_TREE_VIEW (list->priv->disc_view), GTK_TREE_MODEL(disc_list_store));
@@ -1504,11 +1544,21 @@ parole_media_list_setup_view (ParoleMediaList *list)
 
     renderer = gtk_cell_renderer_pixbuf_new ();
     disc_renderer = gtk_cell_renderer_pixbuf_new ();
+    g_object_set (renderer, "stock-size", GTK_ICON_SIZE_MENU, NULL);
+    g_object_set (disc_renderer, "stock-size", GTK_ICON_SIZE_MENU, NULL);
     
     gtk_tree_view_column_pack_start(list->priv->col, renderer, FALSE);
     gtk_tree_view_column_pack_start(list->priv->disc_col, disc_renderer, FALSE);
-    gtk_tree_view_column_set_attributes(list->priv->col, renderer, "pixbuf", PIXBUF_COL, NULL);
-    gtk_tree_view_column_set_attributes(list->priv->disc_col, disc_renderer, "pixbuf", PIXBUF_COL, NULL);
+    gtk_tree_view_column_set_cell_data_func (list->priv->col, renderer,
+							 (GtkTreeCellDataFunc)
+							 parole_media_list_playing_cell_data_func,
+							 list->priv->view,
+							 NULL);
+    gtk_tree_view_column_set_cell_data_func (list->priv->disc_col, disc_renderer,
+							 (GtkTreeCellDataFunc)
+							 parole_media_list_playing_cell_data_func,
+							 list->priv->disc_view,
+							 NULL);
 
     /**
      * Name col
@@ -1917,7 +1967,7 @@ void parole_media_list_select_row (ParoleMediaList *list, GtkTreeRowReference *r
     }
 }
 
-void parole_media_list_set_row_pixbuf  (ParoleMediaList *list, GtkTreeRowReference *row, GdkPixbuf *pix)
+void parole_media_list_set_row_playback_state  (ParoleMediaList *list, GtkTreeRowReference *row, gint state)
 {
     GtkTreeIter iter;
     GtkTreePath *path;
@@ -1929,12 +1979,12 @@ void parole_media_list_set_row_pixbuf  (ParoleMediaList *list, GtkTreeRowReferen
         if (gtk_notebook_get_current_page(GTK_NOTEBOOK(list->priv->playlist_notebook)) == 0)
         {
             if ( gtk_tree_model_get_iter (GTK_TREE_MODEL (list->priv->store), &iter, path) )
-                gtk_list_store_set (list->priv->store, &iter, PIXBUF_COL, pix, -1);
+                gtk_list_store_set (list->priv->store, &iter, STATE_COL, state, -1);
         }
         else
         {
             if ( gtk_tree_model_get_iter (GTK_TREE_MODEL (list->priv->disc_store), &iter, path) )
-                gtk_list_store_set (list->priv->disc_store, &iter, PIXBUF_COL, pix, -1);
+                gtk_list_store_set (list->priv->disc_store, &iter, STATE_COL, state, -1);
         }
 
         gtk_tree_path_free (path);
diff --git a/src/parole-medialist.h b/src/parole-medialist.h
index 649d4f6..6e3fca2 100644
--- a/src/parole-medialist.h
+++ b/src/parole-medialist.h
@@ -34,7 +34,7 @@ G_BEGIN_DECLS
 
 enum
 {
-    PIXBUF_COL,
+    STATE_COL,
     NAME_COL,
     LENGTH_COL,
     DATA_COL,
@@ -43,6 +43,13 @@ enum
 
 enum
 {
+    PAROLE_MEDIA_STATE_NONE,
+    PAROLE_MEDIA_STATE_PAUSED,
+    PAROLE_MEDIA_STATE_PLAYING
+};
+
+enum
+{
     PAROLE_MEDIA_LIST_PLAYLIST_VIEW_STANDARD,
     PAROLE_MEDIA_LIST_PLAYLIST_VIEW_DISC
 };
@@ -136,9 +143,9 @@ GtkTreeRowReference
 *parole_media_list_get_row_random                   (ParoleMediaList *list);
 
 void
-parole_media_list_set_row_pixbuf                    (ParoleMediaList *list,
+parole_media_list_set_row_playback_state            (ParoleMediaList *list,
                                                      GtkTreeRowReference *row,
-                                                     GdkPixbuf *pix);
+                                                     gint state);
                                      
 gchar              *parole_media_list_get_row_name  (ParoleMediaList *list,
                                                      GtkTreeRowReference *row);
diff --git a/src/parole-player.c b/src/parole-player.c
index 0fabf32..a8daebd 100644
--- a/src/parole-player.c
+++ b/src/parole-player.c
@@ -578,7 +578,7 @@ parole_player_reset (ParolePlayer *player)
 
     if ( player->priv->row )
     {
-        parole_media_list_set_row_pixbuf (player->priv->list, player->priv->row, NULL);
+        parole_media_list_set_row_playback_state (player->priv->list, player->priv->row, PAROLE_MEDIA_STATE_NONE);
         gtk_tree_row_reference_free (player->priv->row);
         player->priv->row = NULL;
     }
@@ -602,7 +602,7 @@ parole_player_dvd_reset (ParolePlayer *player)
 {
     if ( player->priv->row )
     {
-        parole_media_list_set_row_pixbuf (player->priv->list, player->priv->row, NULL);
+        parole_media_list_set_row_playback_state (player->priv->list, player->priv->row, PAROLE_MEDIA_STATE_NONE);
         gtk_tree_row_reference_free (player->priv->row);
         player->priv->row = NULL;
     }
@@ -1139,7 +1139,7 @@ parole_player_disc_selected_cb (ParoleDisc *disc, const gchar *uri, const gchar
         player->priv->wait_for_gst_disc_info = TRUE;
         if ( player->priv->row )
         {
-            parole_media_list_set_row_pixbuf (player->priv->list, player->priv->row, NULL);
+            parole_media_list_set_row_playback_state (player->priv->list, player->priv->row, PAROLE_MEDIA_STATE_NONE);
             gtk_tree_row_reference_free (player->priv->row);
             player->priv->row = NULL;
         }
@@ -1357,15 +1357,11 @@ out:
 static void
 parole_player_playing (ParolePlayer *player, const ParoleStream *stream)
 {
-    GdkPixbuf *pix = NULL;
-    
     gint64 duration;
     gboolean seekable;
     gboolean live;
     
-    pix = parole_icon_load ("media-playback-start", 16);
-    
-    parole_media_list_set_row_pixbuf (player->priv->list, player->priv->row, pix);
+    parole_media_list_set_row_playback_state (player->priv->list, player->priv->row, PAROLE_MEDIA_STATE_PLAYING);
     
     g_object_get (G_OBJECT (stream),
                   "seekable", &seekable,
@@ -1416,9 +1412,6 @@ parole_player_playing (ParolePlayer *player, const ParoleStream *stream)
     player->priv->internal_range_change = FALSE;
     
     gtk_widget_set_tooltip_text (GTK_WIDGET (player->priv->range), seekable ? NULL : _("Media stream is not seekable"));
-
-    if ( pix )
-        g_object_unref (pix);
     
     parole_player_save_uri (player, stream);
     parole_media_list_select_row (player->priv->list, player->priv->row);
@@ -1431,12 +1424,9 @@ parole_player_playing (ParolePlayer *player, const ParoleStream *stream)
 static void
 parole_player_paused (ParolePlayer *player)
 {
-    GdkPixbuf *pix = NULL;
-    
     TRACE ("Player paused");
-    
-    pix = parole_icon_load ("media-playback-pause", 16);
-    parole_media_list_set_row_pixbuf (player->priv->list, player->priv->row, pix);
+
+    parole_media_list_set_row_playback_state (player->priv->list, player->priv->row, PAROLE_MEDIA_STATE_PAUSED);
     
     gtk_action_set_sensitive (player->priv->media_playpause_action, TRUE);
     
@@ -1444,10 +1434,6 @@ parole_player_paused (ParolePlayer *player)
     {
         parole_player_set_playpause_button_from_stock (player, "gtk-media-play");
     }
-    
-    if ( pix )
-        g_object_unref (pix);
-    
 }
 
 static void
@@ -1484,7 +1470,7 @@ parole_player_stopped (ParolePlayer *player)
 
     parole_player_set_playpause_button_from_stock (player, "gtk-media-play");
     
-    parole_media_list_set_row_pixbuf (player->priv->list, player->priv->row, NULL);
+    parole_media_list_set_row_playback_state (player->priv->list, player->priv->row, PAROLE_MEDIA_STATE_NONE);
     
     if ( player->priv->exit )
     {
@@ -1525,7 +1511,7 @@ parole_player_play_next (ParolePlayer *player, gboolean allow_shuffle)
     
     if ( player->priv->row )
     {
-        parole_media_list_set_row_pixbuf (player->priv->list, player->priv->row, NULL);
+        parole_media_list_set_row_playback_state (player->priv->list, player->priv->row, PAROLE_MEDIA_STATE_NONE);
         
         if ( shuffle && allow_shuffle )
             row = parole_media_list_get_row_random (player->priv->list);
@@ -1561,7 +1547,7 @@ parole_player_play_prev (ParolePlayer *player)
     
     if ( player->priv->row )
     {
-        parole_media_list_set_row_pixbuf (player->priv->list, player->priv->row, NULL);
+        parole_media_list_set_row_playback_state (player->priv->list, player->priv->row, PAROLE_MEDIA_STATE_NONE);
         
         row = parole_media_list_get_prev_row (player->priv->list, player->priv->row);
         
@@ -1877,19 +1863,12 @@ parole_player_dvd_chapter_count_change_cb (ParoleGst *gst, gint chapter_count, P
 static void
 parole_player_dvd_chapter_change_cb (ParoleGst *gst, gint chapter_count, ParolePlayer *player)
 {
-    GdkPixbuf *pix = NULL;
-    
-    parole_media_list_set_row_pixbuf (player->priv->list, player->priv->row, NULL);
+    parole_media_list_set_row_playback_state (player->priv->list, player->priv->row, PAROLE_MEDIA_STATE_NONE);
     
     player->priv->row = parole_media_list_get_row_n (player->priv->list, chapter_count-1);
 
-    pix = parole_icon_load ("media-playback-start", 16);
-    
-    parole_media_list_set_row_pixbuf (player->priv->list, player->priv->row, pix);
+    parole_media_list_set_row_playback_state (player->priv->list, player->priv->row, PAROLE_MEDIA_STATE_PLAYING);
     parole_media_list_select_row (player->priv->list, player->priv->row);
-    
-    if ( pix )
-        g_object_unref (pix);
 }
 
 gboolean parole_player_delete_event_cb (GtkWidget *widget, GdkEvent *ev, ParolePlayer *player)


More information about the Xfce4-commits mailing list