Updating branch refs/heads/gber/improvements to 53d9468b2b5c8ac538d661f8f478026c629aa3c7 (commit) from 26d23803f3b14abe109210432d808cff0b93eb5c (commit)
commit 53d9468b2b5c8ac538d661f8f478026c629aa3c7 Author: Guido Berhoerster <guido+x...@berhoerster.name> Date: Fri Sep 21 12:00:36 2012 +0200 Clearly indicate in the plugin when there is no valid card and/or element If the panel plugin has no valid configuration, that is no valid card and/or element, show the muted icon and ignore mouse wheel and mute toggle events (bug #6625, bug #7630). NEWS | 2 + panel-plugin/xfce-mixer-plugin.c | 6 +- panel-plugin/xfce-volume-button.c | 131 +++++++++++++++++++++++++++++++++++-- panel-plugin/xfce-volume-button.h | 22 ++++--- 4 files changed, 143 insertions(+), 18 deletions(-) diff --git a/NEWS b/NEWS index 5035212..01cfa15 100644 --- a/NEWS +++ b/NEWS @@ -12,6 +12,8 @@ - Make the panel plugin use sensible default settings (first card, master track) in the absence of an existing configuration (bug #5716, bug #6624, bug #7125). +- Clearly indicate in the plugin when there is no valid card and/or element + and ignore mouse wheel and mute toggle events (bug #6625, bug #7630). 4.8.0 diff --git a/panel-plugin/xfce-mixer-plugin.c b/panel-plugin/xfce-mixer-plugin.c index de64a92..2bfcefa 100644 --- a/panel-plugin/xfce-mixer-plugin.c +++ b/panel-plugin/xfce-mixer-plugin.c @@ -607,10 +607,11 @@ xfce_mixer_plugin_update_track (XfceMixerPlugin *mixer_plugin) g_return_if_fail (IS_XFCE_MIXER_PLUGIN (mixer_plugin)); - /* Reset tooltip and return if the card or track is invalid */ + /* Set the volume button to invalid state and return if the card or track is invalid */ if (!GST_IS_MIXER (mixer_plugin->card) || !GST_IS_MIXER_TRACK (mixer_plugin->track)) { - gtk_tooltips_set_tip (mixer_plugin->tooltips, mixer_plugin->button, NULL, NULL); + xfce_volume_button_set_is_configured (XFCE_VOLUME_BUTTON (mixer_plugin->button), FALSE); + gtk_tooltips_set_tip (mixer_plugin->tooltips, mixer_plugin->button, _("No valid device and/or element."), NULL); return; } @@ -638,6 +639,7 @@ xfce_mixer_plugin_update_track (XfceMixerPlugin *mixer_plugin) muted = !GST_MIXER_TRACK_HAS_FLAG (mixer_plugin->track, GST_MIXER_TRACK_RECORD); /* Update the volume button */ + xfce_volume_button_set_is_configured (XFCE_VOLUME_BUTTON (mixer_plugin->button), TRUE); xfce_volume_button_set_volume (XFCE_VOLUME_BUTTON (mixer_plugin->button), volume); xfce_volume_button_set_muted (XFCE_VOLUME_BUTTON (mixer_plugin->button), muted); diff --git a/panel-plugin/xfce-volume-button.c b/panel-plugin/xfce-volume-button.c index adb94a7..3b5d90e 100644 --- a/panel-plugin/xfce-volume-button.c +++ b/panel-plugin/xfce-volume-button.c @@ -42,6 +42,16 @@ +/* Properties */ +enum +{ + PROP_0, + PROP_IS_CONFIGURED, + N_PROPERTIES, +}; + + + /* Signal identifiers */ enum { @@ -72,6 +82,14 @@ static void xfce_volume_button_class_init (XfceVolumeButtonClass *klas static void xfce_volume_button_init (XfceVolumeButton *button); static void xfce_volume_button_dispose (GObject *object); static void xfce_volume_button_finalize (GObject *object); +static void xfce_volume_button_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec); +static void xfce_volume_button_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec); #if 0 static gboolean xfce_volume_button_key_pressed (GtkWidget *widget, GdkEventKey *event, @@ -119,6 +137,9 @@ struct _XfceVolumeButton /* Array of preloaded icons */ GdkPixbuf **pixbufs; + /* Whether the button is configured */ + gboolean is_configured; + /* Mute state of the button */ gboolean is_muted; }; @@ -169,10 +190,20 @@ xfce_volume_button_class_init (XfceVolumeButtonClass *klass) gobject_class = G_OBJECT_CLASS (klass); gobject_class->dispose = xfce_volume_button_dispose; gobject_class->finalize = xfce_volume_button_finalize; + gobject_class->set_property = xfce_volume_button_set_property; + 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_IS_CONFIGURED, + g_param_spec_boolean ("is-configured", + "is-configured", + "is-configured", + 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, @@ -201,6 +232,8 @@ xfce_volume_button_class_init (XfceVolumeButtonClass *klass) static void xfce_volume_button_init (XfceVolumeButton *button) { + button->is_configured = FALSE; + /* By default we expect the button not to be muted */ button->is_muted = FALSE; @@ -261,6 +294,52 @@ xfce_volume_button_finalize (GObject *object) +static void xfce_volume_button_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + XfceVolumeButton *button = XFCE_VOLUME_BUTTON (object); + gboolean is_configured; + + switch (prop_id) + { + case PROP_IS_CONFIGURED: + is_configured = g_value_get_boolean (value); + if (button->is_configured != is_configured) + { + button->is_configured = is_configured; + xfce_volume_button_update (button); + } + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + + + +static void xfce_volume_button_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + XfceVolumeButton *button = XFCE_VOLUME_BUTTON (object); + + switch (prop_id) + { + case PROP_IS_CONFIGURED: + g_value_set_boolean (value, button->is_configured); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + + + GtkWidget* xfce_volume_button_new (void) { @@ -341,14 +420,18 @@ xfce_volume_button_button_pressed (GtkWidget *widget, /* Check if the middle mouse button was pressed */ if (event->button == 2) { - /* Determine the new mute state by negating the current state */ - mute = !button->is_muted; + /* Only toggle mute if button is in configured state */ + if (button->is_configured) + { + /* Determine the new mute state by negating the current state */ + mute = !button->is_muted; - /* Toggle the button's mute state */ - xfce_volume_button_set_muted (button, mute); + /* 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); + /* 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 */ return TRUE; @@ -371,6 +454,10 @@ xfce_volume_button_scrolled (GtkWidget *widget, g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE); g_return_val_if_fail (IS_XFCE_VOLUME_BUTTON (button), FALSE); + /* Ignore scroll events if the button is not in configured state */ + if (!button->is_configured) + return TRUE; + /* Get current adjustment value and the step increment size */ g_object_get (G_OBJECT (button->adjustment), "value", &value, "step-increment", &step_increment, NULL); @@ -419,7 +506,7 @@ xfce_volume_button_update (XfceVolumeButton *button) /* Determine the difference between upper and lower bound (= volume range) */ range = (upper - lower) / (G_N_ELEMENTS (icons) - 2); - if (G_UNLIKELY (button->is_muted || value < VOLUME_EPSILON)) + 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 */ pixbuf = button->pixbufs[0]; @@ -530,3 +617,33 @@ xfce_volume_button_mute_toggled (XfceVolumeButton *button, { /* Do nothing */ } + + + +void +xfce_volume_button_set_is_configured (XfceVolumeButton *button, + gboolean is_configured) +{ + GValue value = G_VALUE_INIT; + + g_return_if_fail (IS_XFCE_VOLUME_BUTTON (button)); + + g_value_init (&value, G_TYPE_BOOLEAN); + g_value_set_boolean (&value, is_configured); + g_object_set_property (G_OBJECT (button), "is-configured", &value); +} + + + +gboolean +xfce_volume_button_get_is_configured (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-configured", &value); + + return g_value_get_boolean (&value); +} diff --git a/panel-plugin/xfce-volume-button.h b/panel-plugin/xfce-volume-button.h index acdefa3..a92f0e7 100644 --- a/panel-plugin/xfce-volume-button.h +++ b/panel-plugin/xfce-volume-button.h @@ -1,6 +1,7 @@ /* vi:set expandtab sw=2 sts=2: */ /*- * Copyright (c) 2008 Jannis Pohlmann <jan...@xfce.org> + * Copyright (c) 2012 Guido Berhoerster <guido+x...@berhoerster.name> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -35,17 +36,20 @@ typedef struct _XfceVolumeButton XfceVolumeButton; #define IS_XFCE_VOLUME_BUTTON_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_XFCE_VOLUME_BUTTON)) #define XFCE_VOLUME_BUTTON_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_XFCE_VOLUME_BUTTON, XfceVolumeButtonClass)) -GType xfce_volume_button_get_type (void) G_GNUC_CONST; +GType xfce_volume_button_get_type (void) G_GNUC_CONST; -GtkWidget *xfce_volume_button_new (void); +GtkWidget *xfce_volume_button_new (void); -void xfce_volume_button_set_muted (XfceVolumeButton *button, - gboolean muted); -void xfce_volume_button_set_volume (XfceVolumeButton *button, - gdouble volume); -void xfce_volume_button_update (XfceVolumeButton *button); -void xfce_volume_button_set_icon_size (XfceVolumeButton *button, - gint size); +void xfce_volume_button_set_muted (XfceVolumeButton *button, + gboolean muted); +void xfce_volume_button_set_volume (XfceVolumeButton *button, + gdouble volume); +void xfce_volume_button_update (XfceVolumeButton *button); +void xfce_volume_button_set_icon_size (XfceVolumeButton *button, + gint size); +void xfce_volume_button_set_is_configured (XfceVolumeButton *button, + gboolean is_configured); +gboolean xfce_volume_button_get_is_configured (XfceVolumeButton *button); G_END_DECLS; _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org https://mail.xfce.org/mailman/listinfo/xfce4-commits