diff --git a/panel-plugin/xfce-mixer-plugin.c b/panel-plugin/xfce-mixer-plugin.c index af26ba2..ffb9f57 100644 --- a/panel-plugin/xfce-mixer-plugin.c +++ b/panel-plugin/xfce-mixer-plugin.c @@ -660,6 +660,8 @@ xfce_mixer_plugin_set_track (XfceMixerPlugin *mixer_plugin, mixer_plugin->track = track; + xfce_volume_button_set_has_track (mixer_plugin->button, track != NULL); + /* Replace the track label */ g_free (mixer_plugin->track_label); mixer_plugin->track_label = NULL; diff --git a/panel-plugin/xfce-volume-button.c b/panel-plugin/xfce-volume-button.c index 67dc781..fae6436 100644 --- a/panel-plugin/xfce-volume-button.c +++ b/panel-plugin/xfce-volume-button.c @@ -103,6 +103,9 @@ struct _XfceVolumeButton { GtkButton __parent__; + /* If the button controls a track */ + gboolean *has_track; + /* Image widget for the volume icon */ GtkWidget *image; @@ -197,6 +200,9 @@ xfce_volume_button_class_init (XfceVolumeButtonClass *klass) static void xfce_volume_button_init (XfceVolumeButton *button) { + /* Initially we assume the button has no associated mixer track */ + button->has_track = FALSE; + /* By default we expect the button not to be muted */ button->is_muted = FALSE; @@ -336,6 +342,10 @@ xfce_volume_button_button_pressed (GtkWidget *widget, /* Check if the middle mouse button was pressed */ if (event->button == 2) { + /* If we do not have a track, we dont need to do anything here */ + if (!button->has_track) + return TRUE; + /* Determine the new mute state by negating the current state */ mute = !button->is_muted; @@ -366,6 +376,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); + /* If we do not have a track, we dont need to do anything here either */ + if (!button->has_track) + 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); @@ -414,9 +428,10 @@ 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)) + if (G_UNLIKELY (button->is_muted || !button->has_track)) { - /* By definition, use the first icon if the button is muted */ + /* By definition, use the first icon if the button is muted or + * has no associated mixer track */ pixbuf = button->pixbufs[0]; } else @@ -475,6 +490,22 @@ xfce_volume_button_set_volume (XfceVolumeButton *button, } + +void +xfce_volume_button_set_has_track (XfceVolumeButton *button, + gboolean has_track) +{ + g_return_if_fail (IS_XFCE_VOLUME_BUTTON (button)); + + /* Change has_track value */ + button->has_track = has_track; + + /* Update the state of the button */ + xfce_volume_button_update (button); +} + + + void xfce_volume_button_set_icon_size (XfceVolumeButton *button, gint size) diff --git a/panel-plugin/xfce-volume-button.h b/panel-plugin/xfce-volume-button.h index acdefa3..3340e82 100644 --- a/panel-plugin/xfce-volume-button.h +++ b/panel-plugin/xfce-volume-button.h @@ -41,6 +41,8 @@ GtkWidget *xfce_volume_button_new (void); void xfce_volume_button_set_muted (XfceVolumeButton *button, gboolean muted); +void xfce_volume_button_set_has_track (XfceVolumeButton *button, + gboolean has_track); void xfce_volume_button_set_volume (XfceVolumeButton *button, gdouble volume); void xfce_volume_button_update (XfceVolumeButton *button);