[Xfce4-commits] <parole:master> 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.
Sean Davis
noreply at xfce.org
Mon Jul 23 01:24:41 CEST 2012
Updating branch refs/heads/master
to 02fab972c3397e51fd9289313eec0d9d2d605809 (commit)
from cdd5b9e9206c97a5324f9dc6518efa33ac14ae58 (commit)
commit 02fab972c3397e51fd9289313eec0d9d2d605809
Author: Sean Davis <smd.seandavis at 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;
More information about the Xfce4-commits
mailing list