Updating branch refs/heads/gber/improvements to 521f16c2f9904c11af1d1a0ee09db504ac727771 (commit) from c307eeda920f331185b204da2f8ba0633c316e90 (commit)
commit 521f16c2f9904c11af1d1a0ee09db504ac727771 Author: Guido Berhoerster <guido+x...@berhoerster.name> Date: Fri Sep 21 12:00:36 2012 +0200 Indicate in the plugin tooltip whether the track is muted Let XfceVolumeButton keep state istelf by adding a "is-muted" property and remove the "mute-toggled" signal. NEWS | 1 + panel-plugin/xfce-mixer-plugin.c | 16 +++++-- panel-plugin/xfce-volume-button.c | 84 ++++++++++++++++++++---------------- panel-plugin/xfce-volume-button.h | 3 +- 4 files changed, 61 insertions(+), 43 deletions(-) diff --git a/NEWS b/NEWS index c056db7..c4ccfac 100644 --- a/NEWS +++ b/NEWS @@ -16,6 +16,7 @@ and ignore mouse wheel and mute toggle events (bug #6625, bug #7630). - Avoid the deprecated GtkTooltips API and let XfceVolumeButton handle tooltips. +- Indicate in the plugin tooltip whether the track is muted. 4.8.0 diff --git a/panel-plugin/xfce-mixer-plugin.c b/panel-plugin/xfce-mixer-plugin.c index da09a72..82f7db3 100644 --- a/panel-plugin/xfce-mixer-plugin.c +++ b/panel-plugin/xfce-mixer-plugin.c @@ -68,8 +68,9 @@ static gboolean xfce_mixer_plugin_size_changed (XfcePanelPlugin static void xfce_mixer_plugin_clicked (XfceMixerPlugin *mixer_plugin); static void xfce_mixer_plugin_volume_changed (XfceMixerPlugin *mixer_plugin, gdouble volume); -static void xfce_mixer_plugin_mute_toggled (XfceMixerPlugin *mixer_plugin, - gboolean mute); +static void xfce_mixer_plugin_is_muted_property_changed (XfceMixerPlugin *mixer_plugin, + GParamSpec *pspec, + GObject *object); static void xfce_mixer_plugin_update_track (XfceMixerPlugin *mixer_plugin); #ifdef HAVE_GST_MIXER_NOTIFICATION static void xfce_mixer_plugin_bus_message (GstBus *bus, @@ -205,7 +206,7 @@ xfce_mixer_plugin_init (XfceMixerPlugin *mixer_plugin) /* Create volume button for the plugin */ mixer_plugin->button = xfce_volume_button_new (); g_signal_connect_swapped (G_OBJECT (mixer_plugin->button), "volume-changed", G_CALLBACK (xfce_mixer_plugin_volume_changed), mixer_plugin); - g_signal_connect_swapped (G_OBJECT (mixer_plugin->button), "mute-toggled", G_CALLBACK (xfce_mixer_plugin_mute_toggled), mixer_plugin); + g_signal_connect_swapped (G_OBJECT (mixer_plugin->button), "notify::is-muted", G_CALLBACK (xfce_mixer_plugin_is_muted_property_changed), mixer_plugin); g_signal_connect_swapped (G_OBJECT (mixer_plugin->button), "clicked", G_CALLBACK (xfce_mixer_plugin_clicked), mixer_plugin); gtk_container_add (GTK_CONTAINER (mixer_plugin->hvbox), mixer_plugin->button); gtk_widget_show (mixer_plugin->button); @@ -553,9 +554,12 @@ xfce_mixer_plugin_volume_changed (XfceMixerPlugin *mixer_plugin, static void -xfce_mixer_plugin_mute_toggled (XfceMixerPlugin *mixer_plugin, - gboolean mute) +xfce_mixer_plugin_is_muted_property_changed (XfceMixerPlugin *mixer_plugin, + GParamSpec *pspec, + GObject *object) { + gboolean mute; + g_return_if_fail (mixer_plugin != NULL); g_return_if_fail (GST_IS_MIXER (mixer_plugin->card)); g_return_if_fail (GST_IS_MIXER_TRACK (mixer_plugin->track)); @@ -564,6 +568,8 @@ xfce_mixer_plugin_mute_toggled (XfceMixerPlugin *mixer_plugin, mixer_plugin->ignore_bus_messages = TRUE; #endif + g_object_get (object, "is-muted", &mute, NULL); + if (G_LIKELY (xfce_mixer_track_type_new (mixer_plugin->track) == XFCE_MIXER_TRACK_TYPE_PLAYBACK)) { /* Apply mute change to the sound card */ diff --git a/panel-plugin/xfce-volume-button.c b/panel-plugin/xfce-volume-button.c index ca2236b..e80c792 100644 --- a/panel-plugin/xfce-volume-button.c +++ b/panel-plugin/xfce-volume-button.c @@ -48,6 +48,7 @@ enum PROP_0, PROP_TRACK_LABEL, PROP_IS_CONFIGURED, + PROP_IS_MUTED, N_PROPERTIES, }; @@ -57,7 +58,6 @@ enum enum { VOLUME_CHANGED, - MUTE_TOGGLED, LAST_SIGNAL, }; @@ -106,8 +106,6 @@ static void xfce_volume_button_volume_changed (XfceVolumeButton *butt gdouble volume); static void xfce_volume_button_update_icons (XfceVolumeButton *button, GtkIconTheme *icon_theme); -static void xfce_volume_button_mute_toggled (XfceVolumeButton *button, - gboolean mute); @@ -118,8 +116,6 @@ struct _XfceVolumeButtonClass /* Signals */ void (*volume_changed) (XfceVolumeButton *button, gdouble volume); - void (*mute_toggled) (XfceVolumeButton *button, - gboolean mute); }; struct _XfceVolumeButton @@ -198,7 +194,6 @@ xfce_volume_button_class_init (XfceVolumeButtonClass *klass) gobject_class->get_property = xfce_volume_button_get_property; klass->volume_changed = xfce_volume_button_volume_changed; - klass->mute_toggled = xfce_volume_button_mute_toggled; g_object_class_install_property (gobject_class, PROP_TRACK_LABEL, @@ -216,6 +211,14 @@ xfce_volume_button_class_init (XfceVolumeButtonClass *klass) FALSE, G_PARAM_READABLE | G_PARAM_WRITABLE)); + g_object_class_install_property (gobject_class, + PROP_IS_MUTED, + g_param_spec_boolean ("is-muted", + "is-muted", + "is-muted", + FALSE, + G_PARAM_READABLE | G_PARAM_WRITABLE)); + button_signals[VOLUME_CHANGED] = g_signal_new ("volume-changed", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, @@ -226,17 +229,6 @@ xfce_volume_button_class_init (XfceVolumeButtonClass *klass) G_TYPE_NONE, 1, G_TYPE_DOUBLE); - - button_signals[MUTE_TOGGLED] = g_signal_new ("mute-toggled", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, - G_STRUCT_OFFSET (XfceVolumeButtonClass, mute_toggled), - NULL, - NULL, - g_cclosure_marshal_VOID__BOOLEAN, - G_TYPE_NONE, - 1, - G_TYPE_BOOLEAN); } @@ -321,6 +313,7 @@ static void xfce_volume_button_set_property (GObject *object, { XfceVolumeButton *button = XFCE_VOLUME_BUTTON (object); gboolean is_configured; + gboolean is_muted; switch (prop_id) { @@ -330,6 +323,14 @@ static void xfce_volume_button_set_property (GObject *object, if (button->is_configured) xfce_volume_button_update (button); break; + case PROP_IS_MUTED: + is_muted = g_value_get_boolean (value); + if (button->is_configured && button->is_muted != is_muted) + { + button->is_muted = is_muted; + xfce_volume_button_update (button); + } + break; case PROP_IS_CONFIGURED: is_configured = g_value_get_boolean (value); if (button->is_configured != is_configured) @@ -358,6 +359,9 @@ static void xfce_volume_button_get_property (GObject *object, case PROP_TRACK_LABEL: g_value_set_string (value, button->track_label); break; + case PROP_IS_MUTED: + g_value_set_boolean (value, button->is_muted); + break; case PROP_IS_CONFIGURED: g_value_set_boolean (value, button->is_configured); break; @@ -457,9 +461,6 @@ xfce_volume_button_button_pressed (GtkWidget *widget, /* Toggle the button's mute state */ xfce_volume_button_set_muted (button, mute); - - /* Notify listeners of the mute change */ - g_signal_emit_by_name (button, "mute-toggled", mute); } /* Middle mouse button was handled, do not propagate the event any further */ @@ -538,7 +539,7 @@ xfce_volume_button_update (XfceVolumeButton *button) if (G_UNLIKELY (!button->is_configured || button->is_muted || value < VOLUME_EPSILON)) { - /* By definition, use the first icon if the button is muted or the volume is 0 */ + /* By definition, use the first icon if the button is muted or the volume is 0% */ pixbuf = button->pixbufs[0]; } else @@ -561,8 +562,11 @@ xfce_volume_button_update (XfceVolumeButton *button) gtk_widget_set_tooltip_text (GTK_WIDGET (button), _("No valid device and/or element.")); else { - /* Set tooltip (e.g. 'Master: 50%') */ - tip_text = g_strdup_printf (_("%s: %i%%"), button->track_label, (gint) value); + /* Set tooltip (e.g. 'Master: 50% (muted)') */ + if (button->is_muted) + tip_text = g_strdup_printf (_("%s: muted"), button->track_label); + else + tip_text = g_strdup_printf (_("%s: %i%%"), button->track_label, (gint) (value * 100)); gtk_widget_set_tooltip_text (GTK_WIDGET (button), tip_text); g_free (tip_text); } @@ -581,15 +585,30 @@ xfce_volume_button_volume_changed (XfceVolumeButton *button, void xfce_volume_button_set_muted (XfceVolumeButton *button, - gboolean muted) + gboolean is_muted) { + GValue value = G_VALUE_INIT; + g_return_if_fail (IS_XFCE_VOLUME_BUTTON (button)); - /* Change mute value */ - button->is_muted = muted; + g_value_init (&value, G_TYPE_BOOLEAN); + g_value_set_boolean (&value, is_muted); + g_object_set_property (G_OBJECT (button), "is-muted", &value); +} - /* Update the state of the button */ - xfce_volume_button_update (button); + + +gboolean +xfce_volume_button_get_muted (XfceVolumeButton *button) +{ + GValue value = G_VALUE_INIT; + + g_return_val_if_fail (IS_XFCE_VOLUME_BUTTON (button), FALSE); + + g_value_init (&value, G_TYPE_BOOLEAN); + g_object_get_property (G_OBJECT (button), "is-muted", &value); + + return g_value_get_boolean (&value); } @@ -652,15 +671,6 @@ xfce_volume_button_set_icon_size (XfceVolumeButton *button, -static void -xfce_volume_button_mute_toggled (XfceVolumeButton *button, - gboolean mute) -{ - /* Do nothing */ -} - - - void xfce_volume_button_set_track_label (XfceVolumeButton *button, const gchar *track_label) diff --git a/panel-plugin/xfce-volume-button.h b/panel-plugin/xfce-volume-button.h index eb10f6e..4217ecc 100644 --- a/panel-plugin/xfce-volume-button.h +++ b/panel-plugin/xfce-volume-button.h @@ -41,9 +41,10 @@ GType xfce_volume_button_get_type (void) G_GNUC_CONST; GtkWidget *xfce_volume_button_new (void); void xfce_volume_button_set_muted (XfceVolumeButton *button, - gboolean muted); + gboolean is_muted); void xfce_volume_button_set_volume (XfceVolumeButton *button, gdouble volume); +gboolean xfce_volume_button_get_muted (XfceVolumeButton *button); void xfce_volume_button_update (XfceVolumeButton *button); void xfce_volume_button_set_icon_size (XfceVolumeButton *button, gint size); _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org https://mail.xfce.org/mailman/listinfo/xfce4-commits