[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.
Christoph Mende
noreply at xfce.org
Mon Jul 23 01:25:49 CEST 2012
Updating branch refs/heads/master
to e5438a783449a94c580e571b3cea262ecad41a39 (commit)
from aef73c682154ee088c5345ec89d3ea36bb73e717 (commit)
commit e5438a783449a94c580e571b3cea262ecad41a39
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 6daf8e0..8dd2abd 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)
@@ -545,6 +556,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
@@ -1976,6 +2013,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"));
@@ -2032,6 +2073,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.
@@ -2158,6 +2205,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