Updating branch refs/heads/master
         to 02fab972c3397e51fd9289313eec0d9d2d605809 (commit)
       from cdd5b9e9206c97a5324f9dc6518efa33ac14ae58 (commit)

commit 02fab972c3397e51fd9289313eec0d9d2d605809
Author: Sean Davis <smd.seanda...@gmail.com>
Date:   Sat Jul 14 11:43:41 2012 -0400

    Rearranged playlist buttons, added shuffle and repeat.  Shuffle and Repeat 
playlist buttons now toggle menu items as well... but not the other way around 
yet.

 data/interfaces/playlist.ui |   55 +++++++++---------
 src/parole-medialist.c      |  129 ++++++++++++++++++-------------------------
 src/parole-medialist.h      |    6 ++
 src/parole-player.c         |   65 ++++++++++++++++++++++
 src/parole-player.h         |    7 ++
 5 files changed, 159 insertions(+), 103 deletions(-)

diff --git a/data/interfaces/playlist.ui b/data/interfaces/playlist.ui
index 8b09d5f..d9bb444 100644
--- a/data/interfaces/playlist.ui
+++ b/data/interfaces/playlist.ui
@@ -2,30 +2,32 @@
 <interface>
   <requires lib="gtk+" version="2.24"/>
   <!-- interface-naming-policy project-wide -->
-  <object class="GtkImage" id="image1">
+  <object class="GtkImage" id="image_add">
     <property name="visible">True</property>
     <property name="can_focus">False</property>
     <property name="stock">gtk-add</property>
   </object>
-  <object class="GtkImage" id="image2">
+  <object class="GtkImage" id="image_clear">
     <property name="visible">True</property>
     <property name="can_focus">False</property>
-    <property name="stock">gtk-remove</property>
+    <property name="stock">gtk-clear</property>
   </object>
-  <object class="GtkImage" id="image3">
+  <object class="GtkImage" id="image_remove">
     <property name="visible">True</property>
     <property name="can_focus">False</property>
-    <property name="stock">gtk-go-up</property>
+    <property name="stock">gtk-remove</property>
   </object>
-  <object class="GtkImage" id="image4">
+  <object class="GtkImage" id="image_repeat">
     <property name="visible">True</property>
     <property name="can_focus">False</property>
-    <property name="stock">gtk-go-down</property>
+    <property name="pixel_size">20</property>
+    <property name="icon_name">media-playlist-repeat</property>
   </object>
-  <object class="GtkImage" id="image5">
+  <object class="GtkImage" id="image_shuffle">
     <property name="visible">True</property>
     <property name="can_focus">False</property>
-    <property name="stock">gtk-save-as</property>
+    <property name="pixel_size">20</property>
+    <property name="icon_name">media-playlist-shuffle</property>
   </object>
   <object class="GtkVBox" id="playlist-box">
     <property name="visible">True</property>
@@ -80,7 +82,7 @@
                     <property name="can_focus">True</property>
                     <property name="receives_default">True</property>
                     <property name="use_action_appearance">False</property>
-                    <property name="image">image1</property>
+                    <property name="image">image_add</property>
                     <signal name="clicked" 
handler="parole_media_list_add_clicked_cb" swapped="no"/>
                   </object>
                   <packing>
@@ -90,14 +92,14 @@
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkButton" id="save-playlist">
+                  <object class="GtkButton" id="remove-media">
                     <property name="visible">True</property>
                     <property name="sensitive">False</property>
                     <property name="can_focus">True</property>
                     <property name="receives_default">True</property>
                     <property name="use_action_appearance">False</property>
-                    <property name="image">image5</property>
-                    <signal name="clicked" handler="parole_media_list_save_cb" 
swapped="no"/>
+                    <property name="image">image_remove</property>
+                    <signal name="clicked" 
handler="parole_media_list_remove_clicked_cb" swapped="no"/>
                   </object>
                   <packing>
                     <property name="expand">False</property>
@@ -106,49 +108,46 @@
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkButton" id="remove-media">
+                  <object class="GtkButton" id="clear-media">
                     <property name="visible">True</property>
-                    <property name="sensitive">False</property>
                     <property name="can_focus">True</property>
                     <property name="receives_default">True</property>
                     <property name="use_action_appearance">False</property>
-                    <property name="image">image2</property>
-                    <signal name="clicked" 
handler="parole_media_list_remove_clicked_cb" swapped="no"/>
+                    <property name="image">image_clear</property>
+                    <signal name="clicked" 
handler="parole_media_list_clear_clicked_cb" swapped="no"/>
                   </object>
                   <packing>
-                    <property name="expand">False</property>
+                    <property name="expand">True</property>
                     <property name="fill">True</property>
                     <property name="position">2</property>
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkButton" id="media-up">
+                  <object class="GtkToggleButton" id="repeat-media">
                     <property name="visible">True</property>
-                    <property name="sensitive">False</property>
                     <property name="can_focus">True</property>
                     <property name="receives_default">True</property>
                     <property name="use_action_appearance">False</property>
-                    <property name="image">image3</property>
-                    <signal name="clicked" 
handler="parole_media_list_media_up_clicked_cb" swapped="no"/>
+                    <property name="image">image_repeat</property>
+                    <signal name="toggled" 
handler="parole_media_list_repeat_toggled_cb" swapped="no"/>
                   </object>
                   <packing>
-                    <property name="expand">False</property>
+                    <property name="expand">True</property>
                     <property name="fill">True</property>
                     <property name="position">3</property>
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkButton" id="media-down">
+                  <object class="GtkToggleButton" id="shuffle-media">
                     <property name="visible">True</property>
-                    <property name="sensitive">False</property>
                     <property name="can_focus">True</property>
                     <property name="receives_default">True</property>
                     <property name="use_action_appearance">False</property>
-                    <property name="image">image4</property>
-                    <signal name="clicked" 
handler="parole_media_list_media_down_clicked_cb" swapped="no"/>
+                    <property name="image">image_shuffle</property>
+                    <signal name="toggled" 
handler="parole_media_list_shuffle_toggled_cb" swapped="no"/>
                   </object>
                   <packing>
-                    <property name="expand">False</property>
+                    <property name="expand">True</property>
                     <property name="fill">True</property>
                     <property name="position">4</property>
                   </packing>
diff --git a/src/parole-medialist.c b/src/parole-medialist.c
index 850bdeb..41ace6b 100644
--- a/src/parole-medialist.c
+++ b/src/parole-medialist.c
@@ -99,19 +99,19 @@ static void parole_media_list_clear_list      
(ParoleMediaList *list);
 /*
  * Callbacks for GtkBuilder
  */
-void           parole_media_list_media_up_clicked_cb   (GtkButton *button, 
+void           parole_media_list_add_clicked_cb        (GtkButton *button, 
                                                         ParoleMediaList *list);
                                                         
-void           parole_media_list_media_down_clicked_cb (GtkButton *button, 
+void           parole_media_list_remove_clicked_cb     (GtkButton *button, 
                                                         ParoleMediaList *list);
 
-void           parole_media_list_save_cb               (GtkButton *button,
-                                                        ParoleMediaList *list);
-                                                        
-void           parole_media_list_add_clicked_cb        (GtkButton *button, 
+void           parole_media_list_clear_clicked_cb      (GtkButton *button, 
                                                         ParoleMediaList *list);
-                                                        
-void           parole_media_list_remove_clicked_cb     (GtkButton *button, 
+
+void           parole_media_list_repeat_toggled_cb     (GtkToggleButton 
*button,
+                                                        ParoleMediaList *list);
+
+void           parole_media_list_shuffle_toggled_cb    (GtkToggleButton 
*button,
                                                         ParoleMediaList *list);
 
 void           parole_media_list_row_activated_cb      (GtkTreeView *view, 
@@ -179,6 +179,8 @@ enum
     MEDIA_ACTIVATED,
     MEDIA_CURSOR_CHANGED,
     URI_OPENED,
+    SHUFFLE_TOGGLED,
+    REPEAT_TOGGLED,
     LAST_SIGNAL
 };
 
@@ -435,6 +437,32 @@ parole_media_list_add_clicked_cb (GtkButton *button, 
ParoleMediaList *list)
     parole_media_list_open_internal (list);
 }
 
+void 
+parole_media_list_clear_clicked_cb (GtkButton *button, ParoleMediaList *list)
+{
+       parole_media_list_clear_list (list);
+}
+
+void
+parole_media_list_repeat_toggled_cb (GtkToggleButton *button, ParoleMediaList 
*list)
+{
+       gboolean toggled;
+    
+    toggled = gtk_toggle_button_get_active (button);
+    
+    g_signal_emit (G_OBJECT (list), signals [REPEAT_TOGGLED], 0, toggled);
+}
+
+void
+parole_media_list_shuffle_toggled_cb (GtkToggleButton *button, ParoleMediaList 
*list)
+{
+       gboolean toggled;
+    
+    toggled = gtk_toggle_button_get_active (button);
+    
+    g_signal_emit (G_OBJECT (list), signals [SHUFFLE_TOGGLED], 0, toggled);
+}
+
 void parole_media_list_close_save_dialog_cb (GtkButton *button, 
ParolePlaylistSave *data)
 {
     gtk_widget_destroy (GTK_WIDGET (data->chooser));
@@ -920,40 +948,6 @@ parole_media_list_move_many_down (GList *path_list, 
GtkTreeModel *model)
 }
 
 /**
- * parole_media_list_media_down_clicked_cb:
- * 
- * 
- **/
-void
-parole_media_list_media_down_clicked_cb (GtkButton *button, ParoleMediaList 
*list)
-{
-    GtkTreeIter iter;
-    GList *path_list = NULL;
-    GtkTreeModel *model;
-    guint len;
-    
-    path_list = gtk_tree_selection_get_selected_rows (list->priv->sel, &model);
-
-    len = g_list_length (path_list);
-
-    if ( len == 1 )
-    {
-       GtkTreePath *path;
-       path = g_list_nth_data (path_list, 0);
-       if ( G_LIKELY (gtk_tree_model_get_iter (model, &iter, path)) )
-           parole_media_list_move_one_down (list->priv->store, &iter);
-    }
-    else
-    {
-       parole_media_list_move_many_down (path_list, model);
-    }
-    
-    g_list_foreach (path_list, (GFunc) gtk_tree_path_free, NULL);
-    g_list_free (path_list);
-}
-
-
-/**
  * parole_media_list_move_on_up:
  * 
  * @store: a #GtkListStore
@@ -1032,39 +1026,6 @@ parole_media_list_move_many_up (GList *path_list, 
GtkTreeModel *model)
 }
 
 /**
- * parole_media_list_media_up_clicked_cb:
- * 
- * 
- **/
-void
-parole_media_list_media_up_clicked_cb (GtkButton *button, ParoleMediaList 
*list)
-{
-    GtkTreeIter iter;
-    GList *path_list = NULL;
-    GtkTreeModel *model;
-    guint len;
-    
-    path_list = gtk_tree_selection_get_selected_rows (list->priv->sel, &model);
-
-    len = g_list_length (path_list);
-
-    if ( len == 1 )
-    {
-       GtkTreePath *path;
-       path = g_list_nth_data (path_list, 0);
-       if ( G_LIKELY (gtk_tree_model_get_iter (model, &iter, path)) )
-           parole_media_list_move_one_up (list->priv->store, &iter);
-    }
-    else
-    {
-       parole_media_list_move_many_up (path_list, model);
-    }
-    
-    g_list_foreach (path_list, (GFunc) gtk_tree_path_free, NULL);
-    g_list_free (path_list);
-}
-
-/**
  * parole_media_list_row_activated_cb:
  * 
  * 
@@ -1448,6 +1409,24 @@ parole_media_list_class_init (ParoleMediaListClass 
*klass)
                       NULL, NULL,
                       g_cclosure_marshal_VOID__STRING,
                       G_TYPE_NONE, 1, G_TYPE_STRING);
+                      
+       signals[SHUFFLE_TOGGLED] = 
+        g_signal_new ("shuffle-toggled",
+                      PAROLE_TYPE_MEDIA_LIST,
+                      G_SIGNAL_RUN_LAST,
+                      G_STRUCT_OFFSET (ParoleMediaListClass, shuffle_toggled),
+                      NULL, NULL,
+                      g_cclosure_marshal_VOID__BOOLEAN,
+                      G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
+                      
+       signals[REPEAT_TOGGLED] = 
+        g_signal_new ("repeat-toggled",
+                      PAROLE_TYPE_MEDIA_LIST,
+                      G_SIGNAL_RUN_LAST,
+                      G_STRUCT_OFFSET (ParoleMediaListClass, repeat_toggled),
+                      NULL, NULL,
+                      g_cclosure_marshal_VOID__BOOLEAN,
+                      G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
 
     g_type_class_add_private (klass, sizeof (ParoleMediaListPrivate));
     
diff --git a/src/parole-medialist.h b/src/parole-medialist.h
index 36b08a3..321a23e 100644
--- a/src/parole-medialist.h
+++ b/src/parole-medialist.h
@@ -60,6 +60,12 @@ typedef struct
                                                                     
     void                       (*uri_opened)                       
(ParoleMediaList *list,
                                                                     const 
gchar *uri);
+                                                                    
+       void                    (*shuffle_toggled)                  
(ParoleMediaList *list,
+                                                                    gboolean 
shuffle_toggled);
+                                                                    
+       void                    (*repeat_toggled)                   
(ParoleMediaList *list,
+                                                                    gboolean 
repeat_toggled);
     
 } ParoleMediaListClass;
 
diff --git a/src/parole-player.c b/src/parole-player.c
index 7644055..4eadb4f 100644
--- a/src/parole-player.c
+++ b/src/parole-player.c
@@ -257,6 +257,8 @@ struct ParolePlayerPrivate
     GtkWidget          *playlist_nt;
     GtkWidget          *main_nt;       /*Main notebook*/
     GtkWidget          *show_hide_playlist;
+    GtkWidget          *shuffle_menu_item;
+    GtkWidget          *repeat_menu_item;
     GtkWidget          *play_pause;
     GtkWidget          *seekf;
     GtkWidget          *seekb;
@@ -293,6 +295,15 @@ struct ParolePlayerPrivate
         
 };
 
+enum
+{
+    SHUFFLE_TOGGLED,
+    REPEAT_TOGGLED,
+    LAST_SIGNAL
+};
+
+static guint signals [LAST_SIGNAL] = { 0 };
+
 G_DEFINE_TYPE (ParolePlayer, parole_player, G_TYPE_OBJECT)
 
 void parole_show_about (GtkWidget *widget)
@@ -539,6 +550,32 @@ parole_player_media_cursor_changed_cb (ParoleMediaList 
*list, gboolean media_sel
 }
 
 static void
+parole_player_media_list_shuffle_toggled_cb (ParoleMediaList *list, gboolean 
shuffle_toggled, ParolePlayer *player)
+{
+    gboolean toggled;
+    
+    toggled = gtk_check_menu_item_get_active 
(GTK_CHECK_MENU_ITEM(player->priv->shuffle_menu_item));
+    
+    if (toggled != shuffle_toggled)
+    {
+       gtk_check_menu_item_set_active ( 
GTK_CHECK_MENU_ITEM(player->priv->shuffle_menu_item), shuffle_toggled);
+    }
+}
+
+static void
+parole_player_media_list_repeat_toggled_cb (ParoleMediaList *list, gboolean 
repeat_toggled, ParolePlayer *player)
+{
+    gboolean toggled;
+    
+    toggled = gtk_check_menu_item_get_active 
(GTK_CHECK_MENU_ITEM(player->priv->repeat_menu_item));
+    
+    if (toggled != repeat_toggled)
+    {
+       gtk_check_menu_item_set_active ( 
GTK_CHECK_MENU_ITEM(player->priv->repeat_menu_item), repeat_toggled);
+    }
+}
+
+static void
 parole_player_media_progressed_cb (ParoleGst *gst, const ParoleStream *stream, 
gint64 value, ParolePlayer *player)
 {
 #ifdef DEBUG
@@ -1975,6 +2012,10 @@ parole_player_init (ParolePlayer *player)
     player->priv->play_box = GTK_WIDGET (gtk_builder_get_object (builder, 
"play-box"));
     player->priv->playlist_nt = GTK_WIDGET (gtk_builder_get_object (builder, 
"notebook-playlist"));
     player->priv->show_hide_playlist = GTK_WIDGET (gtk_builder_get_object 
(builder, "show-hide-list"));
+    
+    player->priv->shuffle_menu_item = GTK_WIDGET (gtk_builder_get_object 
(builder, "shuffle"));
+    player->priv->repeat_menu_item = GTK_WIDGET (gtk_builder_get_object 
(builder, "repeat"));
+    
     player->priv->control = GTK_WIDGET (gtk_builder_get_object (builder, 
"control"));
     player->priv->go_fs = GTK_WIDGET (gtk_builder_get_object (builder, 
"go_fs"));
     player->priv->leave_fs = GTK_WIDGET (gtk_builder_get_object (builder, 
"leave_fs"));
@@ -2021,6 +2062,12 @@ parole_player_init (ParolePlayer *player)
                      
     g_signal_connect (player->priv->list, "uri-opened",
                      G_CALLBACK (parole_player_uri_opened_cb), player);
+                     
+       g_signal_connect (player->priv->list, "repeat-toggled",
+                     G_CALLBACK (parole_player_media_list_repeat_toggled_cb), 
player);
+                     
+       g_signal_connect (player->priv->list, "shuffle-toggled",
+                     G_CALLBACK (parole_player_media_list_shuffle_toggled_cb), 
player);
     
     /*
      * Load auto saved media list.
@@ -2147,6 +2194,24 @@ parole_player_dbus_class_init (ParolePlayerClass *klass)
     dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (klass),
                                     &dbus_glib_parole_player_object_info);
                                     
+       signals[SHUFFLE_TOGGLED] = 
+        g_signal_new ("shuffle-toggled",
+                      PAROLE_TYPE_PLAYER,
+                      G_SIGNAL_RUN_LAST,
+                      G_STRUCT_OFFSET (ParolePlayerClass, shuffle_toggled),
+                      NULL, NULL,
+                      g_cclosure_marshal_VOID__BOOLEAN,
+                      G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
+                      
+       signals[REPEAT_TOGGLED] = 
+        g_signal_new ("repeat-toggled",
+                      PAROLE_TYPE_PLAYER,
+                      G_SIGNAL_RUN_LAST,
+                      G_STRUCT_OFFSET (ParolePlayerClass, repeat_toggled),
+                      NULL, NULL,
+                      g_cclosure_marshal_VOID__BOOLEAN,
+                      G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
+                                    
 }
 
 static void
diff --git a/src/parole-player.h b/src/parole-player.h
index 8817852..64ba339 100644
--- a/src/parole-player.h
+++ b/src/parole-player.h
@@ -43,6 +43,13 @@ typedef struct
 {
     GObjectClass                parent_class;
     
+    void                       (*shuffle_toggled)                  
(ParolePlayer *list,
+                                                                    gboolean 
shuffle_toggled);
+                                                                    
+       void                    (*repeat_toggled)                   
(ParolePlayer *list,
+                                                                    gboolean 
repeat_toggled);
+
+    
 } ParolePlayerClass;
 
 GType                           parole_player_get_type        (void) 
G_GNUC_CONST;
_______________________________________________
Xfce4-commits mailing list
Xfce4-commits@xfce.org
https://mail.xfce.org/mailman/listinfo/xfce4-commits

Reply via email to