Author: jannis Date: 2008-06-21 12:38:04 +0000 (Sat, 21 Jun 2008) New Revision: 27105
Modified: xfce4-mixer/trunk/ChangeLog xfce4-mixer/trunk/panel-plugin/xfce-mixer-plugin.c xfce4-mixer/trunk/xfce4-mixer/xfce-mixer.c Log: * panel-plugin/xfce-mixer-plugin.c: Add support for xfce_mixer_card_connect() so that the volume button is updated whenever the volume of the current mixer track is changed by another program. * panel-plugin/xfce-mixer.c: Parse GST_MESSAGE_VOLUME_CHANGED messages, but don't handle them yet. In the mixer it's much more complicated than in the plugin, gonna do that later. Modified: xfce4-mixer/trunk/ChangeLog =================================================================== --- xfce4-mixer/trunk/ChangeLog 2008-06-21 12:31:48 UTC (rev 27104) +++ xfce4-mixer/trunk/ChangeLog 2008-06-21 12:38:04 UTC (rev 27105) @@ -1,5 +1,15 @@ 2008-06-21 Jannis Pohlmann <[EMAIL PROTECTED]> + * panel-plugin/xfce-mixer-plugin.c: Add support for + xfce_mixer_card_connect() so that the volume button is updated + whenever the volume of the current mixer track is changed by + another program. + * panel-plugin/xfce-mixer.c: Parse GST_MESSAGE_VOLUME_CHANGED + messages, but don't handle them yet. In the mixer it's much more + complicated than in the plugin, gonna do that later. + +2008-06-21 Jannis Pohlmann <[EMAIL PROTECTED]> + * icons/: Add volume level icons (1x muted, 5x different sound wave icons). I'm not exactly satisfied, but it's better than before. Modified: xfce4-mixer/trunk/panel-plugin/xfce-mixer-plugin.c =================================================================== --- xfce4-mixer/trunk/panel-plugin/xfce-mixer-plugin.c 2008-06-21 12:31:48 UTC (rev 27104) +++ xfce4-mixer/trunk/panel-plugin/xfce-mixer-plugin.c 2008-06-21 12:38:04 UTC (rev 27105) @@ -77,6 +77,11 @@ static void xfce_mixer_plugin_replace_values (XfceMixerPlugin *mixer_plugin, const gchar *card_name, const gchar *track_name); +#ifdef HAVE_GST_MIXER_NOTIFICATION +static gboolean xfce_mixer_plugin_bus_message (GstBus *bus, + GstMessage *message, + XfceMixerPlugin *mixer_plugin); +#endif @@ -359,6 +364,10 @@ g_object_unref (G_OBJECT (mixer_plugin->track)); mixer_plugin->card = XFCE_MIXER_CARD (xfce_mixer_utilities_get_card_by_name (mixer_plugin->card_name)); +#ifdef HAVE_GST_MIXER_NOTIFICATION + xfce_mixer_card_connect (mixer_plugin->card, G_CALLBACK (xfce_mixer_plugin_bus_message), mixer_plugin); +#endif + mixer_plugin->track = xfce_mixer_card_get_track_by_name (mixer_plugin->card, mixer_plugin->track_name); volumes = g_new (gint, mixer_plugin->track->num_channels); @@ -389,3 +398,34 @@ mixer_plugin->card_name = g_strdup (card_name); mixer_plugin->track_name = g_strdup (track_name); } + + + +#ifdef HAVE_GST_MIXER_NOTIFICATION +static gboolean +xfce_mixer_plugin_bus_message (GstBus *bus, + GstMessage *message, + XfceMixerPlugin *mixer_plugin) +{ + GstMixerTrack *track = NULL; + gdouble volume; + gint *volumes; + gint num_channels; + + if (G_UNLIKELY (!xfce_mixer_card_get_message_owner (mixer_plugin->card, message))) + return TRUE; + + g_debug ("Message from card received: %s", GST_MESSAGE_TYPE_NAME (message)); + + if (G_LIKELY (gst_mixer_message_get_type (message) == GST_MIXER_MESSAGE_VOLUME_CHANGED)) + { + gst_mixer_message_parse_volume_changed (message, &track, &volumes, &num_channels); + + if (G_UNLIKELY (g_utf8_collate (track->label, mixer_plugin->track->label) == 0)) + { + volume = ((gdouble) volumes[0]) / mixer_plugin->track->max_volume; + xfce_volume_button_set_volume (XFCE_VOLUME_BUTTON (mixer_plugin->button), volume); + } + } +} +#endif Modified: xfce4-mixer/trunk/xfce4-mixer/xfce-mixer.c =================================================================== --- xfce4-mixer/trunk/xfce4-mixer/xfce-mixer.c 2008-06-21 12:31:48 UTC (rev 27104) +++ xfce4-mixer/trunk/xfce4-mixer/xfce-mixer.c 2008-06-21 12:38:04 UTC (rev 27105) @@ -321,6 +321,8 @@ gboolean muted; gboolean record; const gchar *option; + gint *volumes; + gint num_channels; if (G_UNLIKELY (!xfce_mixer_card_get_message_owner (mixer->card, message))) return TRUE; @@ -341,6 +343,8 @@ } else if (type == GST_MIXER_MESSAGE_VOLUME_CHANGED) { + gst_mixer_message_parse_volume_changed (message, &track, &volumes, &num_channels); + g_debug ("Volume on track '%s' changed to %i", track->label, volumes[0]); } else if (type == GST_MIXER_MESSAGE_OPTION_CHANGED) { _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org http://foo-projects.org/mailman/listinfo/xfce4-commits