aboutsummaryrefslogtreecommitdiff
path: root/src/volume-widget.c
diff options
context:
space:
mode:
authorConor Curran <conor.curran@canonical.com>2011-03-23 10:17:41 +0000
committerConor Curran <conor.curran@canonical.com>2011-03-23 10:17:41 +0000
commit6d49a88f63282e4171d82b96177ecd9ca5441f1c (patch)
treed12435b6d66dc895a6745b2664d70baab1a42bea /src/volume-widget.c
parent6375d3eb602251a2374944817e34b9695ae50b65 (diff)
parenta82ab70e9e82f09ba3d2446dba1b57ead1bde5f8 (diff)
downloadayatana-indicator-sound-6d49a88f63282e4171d82b96177ecd9ca5441f1c.tar.gz
ayatana-indicator-sound-6d49a88f63282e4171d82b96177ecd9ca5441f1c.tar.bz2
ayatana-indicator-sound-6d49a88f63282e4171d82b96177ecd9ca5441f1c.zip
protection against rogue dbusmenu properties
Diffstat (limited to 'src/volume-widget.c')
-rw-r--r--src/volume-widget.c58
1 files changed, 28 insertions, 30 deletions
diff --git a/src/volume-widget.c b/src/volume-widget.c
index a54441c..e8e7bae 100644
--- a/src/volume-widget.c
+++ b/src/volume-widget.c
@@ -128,48 +128,48 @@ static void
volume_widget_property_update( DbusmenuMenuitem* item, gchar* property,
GVariant* value, gpointer userdata)
{
- g_return_if_fail (IS_VOLUME_WIDGET (userdata));
+ g_return_if_fail (IS_VOLUME_WIDGET(userdata));
VolumeWidget* mitem = VOLUME_WIDGET(userdata);
VolumeWidgetPrivate * priv = VOLUME_WIDGET_GET_PRIVATE(mitem);
+
if(g_ascii_strcasecmp(DBUSMENU_VOLUME_MENUITEM_LEVEL, property) == 0){
g_return_if_fail (g_variant_is_of_type (value, G_VARIANT_TYPE_DOUBLE) );
if(priv->grabbed == FALSE){
GtkWidget *slider = ido_scale_menu_item_get_scale((IdoScaleMenuItem*)priv->ido_volume_slider);
GtkRange *range = (GtkRange*)slider;
gdouble update = g_variant_get_double (value);
+ gtk_range_set_value(range, update);
/*
- g_debug ("volume widget volume prop update with %f", update);
+ g_debug ("volume-widget::volume_widget_property_update - volume - value %f", update);
*/
- gtk_range_set_value(range, update);
update_accessible_desc(priv->indicator);
}
}
- if(g_ascii_strcasecmp(DBUSMENU_VOLUME_MENUITEM_MUTE, property) == 0){
-/*
- g_debug ("volume widget - mute update ");
-*/
- g_return_if_fail (g_variant_is_of_type (value, G_VARIANT_TYPE_INT32) );
+ else if(g_ascii_strcasecmp(DBUSMENU_VOLUME_MENUITEM_MUTE, property) == 0){
+ g_return_if_fail (g_variant_is_of_type (value, G_VARIANT_TYPE_BOOLEAN));
if(priv->grabbed == FALSE){
GtkWidget *slider = ido_scale_menu_item_get_scale((IdoScaleMenuItem*)priv->ido_volume_slider);
GtkRange *range = (GtkRange*)slider;
- gint update = g_variant_get_int32 (value);
+ gboolean update = g_variant_get_boolean (value);
gdouble level;
-/*
- g_debug ("volume widget - mute update %i", update);
-*/
-
- if (update == 1){
+ if (update == TRUE){
level = 0;
}
else{
- level = g_variant_get_double (dbusmenu_menuitem_property_get_variant (priv->twin_item,
- DBUSMENU_VOLUME_MENUITEM_LEVEL));
+ GVariant* variant = dbusmenu_menuitem_property_get_variant (priv->twin_item,
+ DBUSMENU_VOLUME_MENUITEM_LEVEL);
+/*
+ g_debug ("variant for the volume - is it null = %i", variant == NULL);
+*/
+ g_return_if_fail (g_variant_is_of_type (variant, G_VARIANT_TYPE_DOUBLE) );
+
+ level = g_variant_get_double (variant);
}
- gtk_range_set_value(range, level);
/*
- g_debug ("volume-widget - update mute with value %i", update);
+ g_debug ("volume-widget::volume_widget_property_update - mute - value %i and level = %f", update, level);
*/
+ gtk_range_set_value(range, level);
}
}
}
@@ -185,13 +185,13 @@ volume_widget_set_twin_item(VolumeWidget* self,
G_CALLBACK(volume_widget_property_update), self);
gdouble initial_level = g_variant_get_double (dbusmenu_menuitem_property_get_variant(twin_item,
DBUSMENU_VOLUME_MENUITEM_LEVEL));
- gint initial_mute = g_variant_get_int32 (dbusmenu_menuitem_property_get_variant(twin_item,
- DBUSMENU_VOLUME_MENUITEM_MUTE));
+ gboolean initial_mute = g_variant_get_boolean (dbusmenu_menuitem_property_get_variant(twin_item,
+ DBUSMENU_VOLUME_MENUITEM_MUTE));
//g_debug("volume_widget_set_twin_item initial level = %f", initial_level);
GtkWidget *slider = ido_scale_menu_item_get_scale((IdoScaleMenuItem*)priv->ido_volume_slider);
GtkRange *range = (GtkRange*)slider;
- if(initial_mute == 1){
+ if(initial_mute == TRUE){
initial_level = 0;
}
gtk_range_set_value(range, initial_level);
@@ -206,9 +206,11 @@ volume_widget_change_value_cb (GtkRange *range,
{
g_return_val_if_fail (IS_VOLUME_WIDGET (user_data), FALSE);
VolumeWidget* mitem = VOLUME_WIDGET(user_data);
+
/*
g_debug ("changed value %f", new_value);
*/
+
volume_widget_update(mitem, new_value, "change-value");
return FALSE;
}
@@ -222,22 +224,18 @@ volume_widget_value_changed_cb (GtkRange *range, gpointer user_data)
{
g_return_val_if_fail (IS_VOLUME_WIDGET (user_data), FALSE);
- VolumeWidget* mitem = VOLUME_WIDGET(user_data);
+ VolumeWidget* mitem = VOLUME_WIDGET (user_data);
VolumeWidgetPrivate * priv = VOLUME_WIDGET_GET_PRIVATE(mitem);
GtkWidget *slider = ido_scale_menu_item_get_scale((IdoScaleMenuItem*)priv->ido_volume_slider);
gdouble current_value = CLAMP(gtk_range_get_value(GTK_RANGE(slider)), 0, 100);
-/*
- g_debug ("value changed %f", gtk_range_get_value(GTK_RANGE(slider)));
-*/
-
- gint mute = g_variant_get_int32 (dbusmenu_menuitem_property_get_variant (priv->twin_item,
- DBUSMENU_VOLUME_MENUITEM_MUTE));
- if((current_value == 0 && mute != 1) || current_value == 100){
+ gboolean mute = g_variant_get_boolean (dbusmenu_menuitem_property_get_variant (priv->twin_item,
+ DBUSMENU_VOLUME_MENUITEM_MUTE));
+ if((current_value == 0 && mute == FALSE) || current_value == 100){
/*
g_debug ("value changed - actual set %f", current_value);
*/
- volume_widget_update(mitem, current_value, "value-changed");
+ volume_widget_update (mitem, current_value, "value-changed");
}
return FALSE;