From 86387ed2ffe20e87c2d449cdee7b9ff9f49d41a6 Mon Sep 17 00:00:00 2001 From: Qball Cow Date: Fri, 12 Feb 2010 22:19:46 +0100 Subject: [PATCH] Add start/stop to context menu Status icon. --- src/plugin.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 48 insertions(+), 5 deletions(-) diff --git a/src/plugin.c b/src/plugin.c index b1adfa3..3cee2d8 100644 --- a/src/plugin.c +++ b/src/plugin.c @@ -35,6 +35,9 @@ #define SHOUT_COMMAND "mplayer -ao pulse -nocache http://192.150.0.120:8000/mpd.ogg" #include + + +gboolean stopped = FALSE; GPid ogg123_pid = -1; @@ -64,17 +67,51 @@ static const char * shout_get_translation_domain(void) return GETTEXT_PACKAGE; } +static void shout_si_start(void) +{ + stopped = FALSE; + start_ogg123(); + +} +static void shout_si_stop(void) +{ + stop_ogg123(); + stopped = TRUE; +} + +static void shout_si_show_pref(void) +{ + preferences_show_pref_window(plugin.id); +} + static gboolean shout_si_button_press_event(GtkWidget *icon, GdkEventButton *event, gpointer data) { - if(event->button == 1) + if(event->button == 3) { + GtkWidget *item; + GtkMenu *menu = gtk_menu_new(); + g_object_ref_sink(G_OBJECT(menu)); + + if(ogg123_pid < 0 && mpd_player_get_state(connection) == MPD_STATUS_STATE_PLAY) { + item = gtk_image_menu_item_new_with_label(_("Start")); + g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(shout_si_start), NULL); + gtk_menu_shell_append(GTK_MENU(menu), item); + } + else if (ogg123_pid >= 0 && mpd_player_get_state(connection) == MPD_STATUS_STATE_PLAY) { + item = gtk_image_menu_item_new_with_label(_("Stop")); + g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(shout_si_stop), NULL); + gtk_menu_shell_append(GTK_MENU(menu), item); + } + item = gtk_image_menu_item_new_with_label(_("Preferences")); + g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(shout_si_show_pref), NULL); + gtk_menu_shell_append(GTK_MENU(menu), item); + + gtk_widget_show_all(GTK_WIDGET(menu)); + gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, event->button, event->time); + g_object_unref(menu); /* Again, check for active page and set button otherwise */ return TRUE; } - else if (event->button == 3) - { - preferences_show_pref_window(plugin.id); - } return FALSE; } static void shout_add_si_icon(void) @@ -192,9 +229,15 @@ static void shout_pid_callback (GPid pid, gtk_widget_set_sensitive(gtk_bin_get_child(GTK_BIN(si_shout)),FALSE); gtk_widget_set_tooltip_text(si_shout, _("Not Playing")); } + + if(mpd_player_get_state(connection) == MPD_STATUS_STATE_PLAY && !stopped) + { + start_ogg123(); + } } static void start_ogg123(void) { + if(stopped) return; if(ogg123_pid == -1) { gchar *uri = cfg_get_single_value_as_string_with_default(config, "shout-plugin", "command", SHOUT_COMMAND); -- 2.11.4.GIT