[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