[Xfce4-commits] <parole:bluesabre/gtk3> Add previous and next to tray plugin
Sean Davis
noreply at xfce.org
Sun Aug 25 04:08:02 CEST 2013
Updating branch refs/heads/bluesabre/gtk3
to b1cf05d232ced98c1395043fba69c6f6807cd096 (commit)
from 0cc56610666e7773226b5b2d2bb07018a28b0d7f (commit)
commit b1cf05d232ced98c1395043fba69c6f6807cd096
Author: Sean Davis <smd.seandavis at gmail.com>
Date: Sat Aug 24 22:07:14 2013 -0400
Add previous and next to tray plugin
docs/plugin-api/tmpl/Parole-Plugins-unused.sgml | 16 +++++++
docs/plugin-api/tmpl/parole-provider-player.sgml | 18 --------
src/misc/parole-provider-player.c | 50 ++++++++++++++++++++++
src/misc/parole-provider-player.h | 8 ++++
src/parole-plugin-player.c | 33 ++++++++++++++
src/plugins/tray/tray-provider.c | 43 +++++++++++++++++++
6 files changed, 150 insertions(+), 18 deletions(-)
diff --git a/docs/plugin-api/tmpl/Parole-Plugins-unused.sgml b/docs/plugin-api/tmpl/Parole-Plugins-unused.sgml
index fa8070d..66c12b5 100644
--- a/docs/plugin-api/tmpl/Parole-Plugins-unused.sgml
+++ b/docs/plugin-api/tmpl/Parole-Plugins-unused.sgml
@@ -197,6 +197,22 @@ static void sample_provider_finalize (GObject *object)
@file:
@Returns:
+<!-- ##### FUNCTION parole_provider_player_get_main_window ##### -->
+<para>
+
+</para>
+
+ at player:
+ at Returns:
+
+<!-- ##### FUNCTION parole_provider_player_get_stream ##### -->
+<para>
+
+</para>
+
+ at player:
+ at Returns:
+
<!-- ##### FUNCTION parole_stream_init_properties ##### -->
<para>
diff --git a/docs/plugin-api/tmpl/parole-provider-player.sgml b/docs/plugin-api/tmpl/parole-provider-player.sgml
index 88cf7eb..c9706e5 100644
--- a/docs/plugin-api/tmpl/parole-provider-player.sgml
+++ b/docs/plugin-api/tmpl/parole-provider-player.sgml
@@ -70,15 +70,6 @@ playback status.
@PAROLE_STATE_PAUSED:
@PAROLE_STATE_PLAYING:
-<!-- ##### FUNCTION parole_provider_player_get_main_window ##### -->
-<para>
-
-</para>
-
- at player:
- at Returns:
-
-
<!-- ##### FUNCTION parole_provider_player_pack ##### -->
<para>
@@ -99,15 +90,6 @@ playback status.
@Returns:
-<!-- ##### FUNCTION parole_provider_player_get_stream ##### -->
-<para>
-
-</para>
-
- at player:
- at Returns:
-
-
<!-- ##### FUNCTION parole_provider_player_play_uri ##### -->
<para>
diff --git a/src/misc/parole-provider-player.c b/src/misc/parole-provider-player.c
index 8bd9cac..9c3d537 100644
--- a/src/misc/parole-provider-player.c
+++ b/src/misc/parole-provider-player.c
@@ -326,6 +326,56 @@ gboolean parole_provider_player_stop (ParoleProviderPlayer *player)
/**
+ * parole_provider_player_play_previous:
+ * @player: a #ParoleProviderPlayer
+ *
+ * Issue a play previous command to the player.
+ *
+ * Returns: TRUE if the command is processed, FALSE otherwise.
+ *
+ * Since: 0.6
+ **/
+gboolean parole_provider_player_play_previous (ParoleProviderPlayer *player)
+{
+ gboolean ret = FALSE;
+
+ g_return_val_if_fail (PAROLE_IS_PROVIDER_PLAYER (player), FALSE);
+
+ if ( PAROLE_PROVIDER_PLAYER_GET_INTERFACE (player)->play_previous )
+ {
+ ret = (*PAROLE_PROVIDER_PLAYER_GET_INTERFACE (player)->play_previous) (player);
+ }
+
+ return ret;
+}
+
+
+/**
+ * parole_provider_player_play_next:
+ * @player: a #ParoleProviderPlayer
+ *
+ * Issue a play next command to the player.
+ *
+ * Returns: TRUE if the command is processed, FALSE otherwise.
+ *
+ * Since: 0.6
+ **/
+gboolean parole_provider_player_play_next (ParoleProviderPlayer *player)
+{
+ gboolean ret = FALSE;
+
+ g_return_val_if_fail (PAROLE_IS_PROVIDER_PLAYER (player), FALSE);
+
+ if ( PAROLE_PROVIDER_PLAYER_GET_INTERFACE (player)->play_next )
+ {
+ ret = (*PAROLE_PROVIDER_PLAYER_GET_INTERFACE (player)->play_next) (player);
+ }
+
+ return ret;
+}
+
+
+/**
* parole_provider_player_seek:
* @player: a #ParoleProviderPlayer
* @pos: position to seek.
diff --git a/src/misc/parole-provider-player.h b/src/misc/parole-provider-player.h
index 060a6a9..06af0ed 100644
--- a/src/misc/parole-provider-player.h
+++ b/src/misc/parole-provider-player.h
@@ -73,6 +73,10 @@ struct _ParoleProviderPlayerIface
gboolean (*stop) (ParoleProviderPlayer *player);
+ gboolean (*play_previous) (ParoleProviderPlayer *player);
+
+ gboolean (*play_next) (ParoleProviderPlayer *player);
+
gboolean (*seek) (ParoleProviderPlayer *player,
gdouble pos);
@@ -112,6 +116,10 @@ gboolean parole_provider_player_resume (ParoleProviderPlayer *player);
gboolean parole_provider_player_stop (ParoleProviderPlayer *player);
+gboolean parole_provider_player_play_previous(ParoleProviderPlayer *player);
+
+gboolean parole_provider_player_play_next (ParoleProviderPlayer *player);
+
gboolean parole_provider_player_seek (ParoleProviderPlayer *player,
gdouble pos);
diff --git a/src/parole-plugin-player.c b/src/parole-plugin-player.c
index 6f14269..2700cd8 100644
--- a/src/parole-plugin-player.c
+++ b/src/parole-plugin-player.c
@@ -30,6 +30,7 @@
#include <src/misc/parole-provider-player.h>
+#include "parole-dbus.h"
#include "parole-plugin-player.h"
#include "parole-plugins-manager.h"
#include "parole-medialist.h"
@@ -56,6 +57,20 @@ struct ParolePluginPlayerPrivate
G_DEFINE_TYPE_WITH_CODE (ParolePluginPlayer, parole_plugin_player, G_TYPE_OBJECT,
G_IMPLEMENT_INTERFACE (PAROLE_TYPE_PROVIDER_PLAYER, parole_plugin_player_iface_init))
+
+static void
+parole_plugin_player_send_message (const gchar *message)
+{
+ DBusGProxy *proxy;
+
+ proxy = parole_get_proxy (PAROLE_DBUS_PATH, PAROLE_DBUS_INTERFACE);
+
+ dbus_g_proxy_call_no_reply (proxy, message,
+ G_TYPE_INVALID,
+ G_TYPE_INVALID);
+
+ g_object_unref (proxy);
+}
static GtkWidget *
parole_plugin_player_get_main_window (ParoleProviderPlayer *provider)
@@ -153,6 +168,22 @@ parole_plugin_player_stop (ParoleProviderPlayer *provider)
}
static gboolean
+parole_plugin_player_play_previous (ParoleProviderPlayer *provider)
+{
+ parole_plugin_player_send_message ("PrevTrack");
+
+ return TRUE;
+}
+
+static gboolean
+parole_plugin_player_play_next (ParoleProviderPlayer *provider)
+{
+ parole_plugin_player_send_message ("NextTrack");
+
+ return TRUE;
+}
+
+static gboolean
parole_plugin_player_seek (ParoleProviderPlayer *provider, gdouble pos)
{
ParolePluginPlayer *player;
@@ -184,6 +215,8 @@ static void parole_plugin_player_iface_init (ParoleProviderPlayerIface *iface)
iface->pause = parole_plugin_player_pause;
iface->resume = parole_plugin_player_resume;
iface->stop = parole_plugin_player_stop;
+ iface->play_previous = parole_plugin_player_play_previous;
+ iface->play_next = parole_plugin_player_play_next;
iface->seek = parole_plugin_player_seek;
iface->open_media_chooser = parole_plugin_player_open_media_chooser;
}
diff --git a/src/plugins/tray/tray-provider.c b/src/plugins/tray/tray-provider.c
index b3f6d1f..e955505 100644
--- a/src/plugins/tray/tray-provider.c
+++ b/src/plugins/tray/tray-provider.c
@@ -95,6 +95,22 @@ play_pause_activated_cb (TrayProvider *tray)
}
static void
+previous_activated_cb (TrayProvider *tray)
+{
+ menu_selection_done_cb (tray);
+
+ parole_provider_player_play_previous (tray->player);
+}
+
+static void
+next_activated_cb (TrayProvider *tray)
+{
+ menu_selection_done_cb (tray);
+
+ parole_provider_player_play_next (tray->player);
+}
+
+static void
open_activated_cb (TrayProvider *tray)
{
parole_provider_player_open_media_chooser (tray->player);
@@ -119,6 +135,33 @@ popup_menu_cb (GtkStatusIcon *icon, guint button,
gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
/*
+ * Previous Track
+ */
+ mi = gtk_image_menu_item_new_from_stock (GTK_STOCK_MEDIA_PREVIOUS, NULL);
+ gtk_menu_item_set_label(GTK_MENU_ITEM(mi), _("Previous Track"));
+ gtk_widget_set_sensitive (mi, TRUE);
+ gtk_widget_show (mi);
+ g_signal_connect_swapped (mi, "activate", G_CALLBACK (previous_activated_cb), tray);
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
+
+ /*
+ * Next Track
+ */
+ mi = gtk_image_menu_item_new_from_stock (GTK_STOCK_MEDIA_NEXT, NULL);
+ gtk_menu_item_set_label(GTK_MENU_ITEM(mi), _("Next Track"));
+ gtk_widget_set_sensitive (mi, TRUE);
+ gtk_widget_show (mi);
+ g_signal_connect_swapped (mi, "activate", G_CALLBACK (next_activated_cb), tray);
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
+
+ /*
+ * Separator.
+ */
+ mi = gtk_separator_menu_item_new ();
+ gtk_widget_show (mi);
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
+
+ /*
* Open
*/
mi = gtk_image_menu_item_new_from_stock (GTK_STOCK_OPEN, NULL);
More information about the Xfce4-commits
mailing list