Merge lp:~cjcurran/indicator-sound/protect-against-rogue-property-updates-volume-slider into lp:~indicator-applet-developers/indicator-sound/trunk_3

Proposed by Conor Curran
Status: Merged
Approved by: Ted Gould
Approved revision: 217
Merged at revision: 217
Proposed branch: lp:~cjcurran/indicator-sound/protect-against-rogue-property-updates-volume-slider
Merge into: lp:~indicator-applet-developers/indicator-sound/trunk_3
Diff against target: 77 lines (+13/-9)
2 files modified
src/slider-menu-item.c (+2/-1)
src/volume-widget.c (+11/-8)
To merge this branch: bzr merge lp:~cjcurran/indicator-sound/protect-against-rogue-property-updates-volume-slider
Reviewer Review Type Date Requested Status
Ted Gould (community) Approve
Review via email: mp+52914@code.launchpad.net

Description of the change

Fixes the bug attached. I found two issues,

1.I was unpacking a double into a boolean on the service side of the volume slider !! (don't know how this was not noticed until now)

Secondly I was not protecting against property updates on the volume slider which are not of the gdouble type. For some reason rogue property updates were being triggered on the slider item when I player started or closed. When trying to extract a double from variant that is not a double you will get 0 and I was in turn then setting the slider value to 0 which in turn triggered the gtk 'value-changed' callback which was then setting the pulse volume to you guessed it 0.
ah

To post a comment you must log in.
Revision history for this message
Ted Gould (ted) wrote :

  review approve
  merge approve

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/slider-menu-item.c'
2--- src/slider-menu-item.c 2011-02-07 13:03:24 +0000
3+++ src/slider-menu-item.c 2011-03-10 19:58:09 +0000
4@@ -92,10 +92,11 @@
5 input = g_variant_get_variant(value);
6 }
7
8- gboolean volume_input = g_variant_get_double(input);
9 if (value != NULL){
10 if (IS_SLIDER_MENU_ITEM (mi)) {
11 SliderMenuItemPrivate* priv = SLIDER_MENU_ITEM_GET_PRIVATE (SLIDER_MENU_ITEM (mi));
12+ gdouble volume_input = g_variant_get_double(input);
13+ //g_debug ("slider menu item about to update volume %f", volume_input);
14 active_sink_update_volume (priv->a_sink, volume_input);
15 active_sink_ensure_sink_is_unmuted (priv->a_sink);
16 }
17
18=== modified file 'src/volume-widget.c'
19--- src/volume-widget.c 2011-03-09 01:17:01 +0000
20+++ src/volume-widget.c 2011-03-10 19:58:09 +0000
21@@ -128,6 +128,7 @@
22 GVariant* value, gpointer userdata)
23 {
24 g_return_if_fail (IS_VOLUME_WIDGET (userdata));
25+ g_return_if_fail (g_variant_is_of_type (value, G_VARIANT_TYPE_DOUBLE) );
26 VolumeWidget* mitem = VOLUME_WIDGET(userdata);
27 VolumeWidgetPrivate * priv = VOLUME_WIDGET_GET_PRIVATE(mitem);
28 //g_debug("scrub-widget::property_update for prop %s", property);
29@@ -136,7 +137,6 @@
30 GtkWidget *slider = ido_scale_menu_item_get_scale((IdoScaleMenuItem*)priv->ido_volume_slider);
31 GtkRange *range = (GtkRange*)slider;
32 gdouble update = g_variant_get_double (value);
33- //g_debug("volume-widget - update level with value %f", update);
34 gtk_range_set_value(range, update);
35 update_accessible_desc(priv->indicator);
36 }
37@@ -163,13 +163,14 @@
38
39 static gboolean
40 volume_widget_change_value_cb (GtkRange *range,
41- GtkScrollType scroll,
42- gdouble new_value,
43- gpointer user_data)
44+ GtkScrollType scroll,
45+ gdouble new_value,
46+ gpointer user_data)
47 {
48 g_return_val_if_fail (IS_VOLUME_WIDGET (user_data), FALSE);
49 VolumeWidget* mitem = VOLUME_WIDGET(user_data);
50- volume_widget_update(mitem, new_value);
51+ //g_debug ("changed value %f", new_value);
52+ volume_widget_update(mitem, new_value);
53 return FALSE;
54 }
55
56@@ -178,17 +179,19 @@
57 which set the slider to 0 or 100. Ignore all other events.
58 */
59 static gboolean
60-volume_widget_value_changed_cb(GtkRange *range, gpointer user_data)
61+volume_widget_value_changed_cb (GtkRange *range, gpointer user_data)
62 {
63+
64 g_return_val_if_fail (IS_VOLUME_WIDGET (user_data), FALSE);
65 VolumeWidget* mitem = VOLUME_WIDGET(user_data);
66 VolumeWidgetPrivate * priv = VOLUME_WIDGET_GET_PRIVATE(mitem);
67- GtkWidget *slider = ido_scale_menu_item_get_scale((IdoScaleMenuItem*)priv->ido_volume_slider);
68+ GtkWidget *slider = ido_scale_menu_item_get_scale((IdoScaleMenuItem*)priv->ido_volume_slider);
69 gdouble current_value = CLAMP(gtk_range_get_value(GTK_RANGE(slider)), 0, 100);
70-
71+ //g_debug ("value changed %f", gtk_range_get_value(GTK_RANGE(slider)));
72 if(current_value == 0 || current_value == 100){
73 volume_widget_update(mitem, current_value);
74 }
75+
76 return FALSE;
77 }
78

Subscribers

People subscribed via source and target branches