diff options
author | Conor Curran <conor.curran@canonical.com> | 2011-03-23 10:17:41 +0000 |
---|---|---|
committer | Conor Curran <conor.curran@canonical.com> | 2011-03-23 10:17:41 +0000 |
commit | 6d49a88f63282e4171d82b96177ecd9ca5441f1c (patch) | |
tree | d12435b6d66dc895a6745b2664d70baab1a42bea /src/volume-widget.c | |
parent | 6375d3eb602251a2374944817e34b9695ae50b65 (diff) | |
parent | a82ab70e9e82f09ba3d2446dba1b57ead1bde5f8 (diff) | |
download | ayatana-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.c | 58 |
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; |