summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMoritz Bruder <[email protected]>2017-04-28 09:50:52 +0200
committerraveit65 <[email protected]>2017-06-16 14:40:45 +0200
commit7df3511c658fed53fad6d8601035cea427f7fbcc (patch)
treea1868f1f947e80e25a7b4577c50055281fdf2354
parente6d3887e68181afc634dde19601f4d2f47436b23 (diff)
downloadmate-media-7df3511c658fed53fad6d8601035cea427f7fbcc.tar.bz2
mate-media-7df3511c658fed53fad6d8601035cea427f7fbcc.tar.xz
applet: fix minor rounding mistakes
The chosen volume step increment isn't necessarily an integer. The volume however is stored as integer. Whenever the volume is synced back from the mixer decimal digits may be cut off behind the dot. This commit tries to counteract the effect by rounding to hundreths of the maximum volume when syncing back from the mixer. As the volume is shown in percent the new behavior should be more reasonable to the user. There are no more irregular jumps and there is no additional 99% step.
-rw-r--r--mate-volume-control/gvc-channel-bar.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/mate-volume-control/gvc-channel-bar.c b/mate-volume-control/gvc-channel-bar.c
index 912eaa6..c4c85b5 100644
--- a/mate-volume-control/gvc-channel-bar.c
+++ b/mate-volume-control/gvc-channel-bar.c
@@ -381,11 +381,18 @@ update_adjustment_value (GvcChannelBar *bar)
else
value = mate_mixer_stream_control_get_volume (bar->priv->control);
+ gdouble maximum = gtk_adjustment_get_upper (bar->priv->adjustment);
+ gdouble minimum = gtk_adjustment_get_lower (bar->priv->adjustment);
+ gdouble range = maximum - minimum;
+
+ /* round value to nearest hundreth of the range */
+ gdouble new_value = minimum + round (((value - minimum) / range) * 100) * (range / 100);
+
g_signal_handlers_block_by_func (G_OBJECT (bar->priv->adjustment),
on_adjustment_value_changed,
bar);
- gtk_adjustment_set_value (bar->priv->adjustment, value);
+ gtk_adjustment_set_value (bar->priv->adjustment, new_value);
g_signal_handlers_unblock_by_func (G_OBJECT (bar->priv->adjustment),
on_adjustment_value_changed,
@@ -861,6 +868,7 @@ gvc_channel_bar_scroll (GvcChannelBar *bar, GdkScrollDirection direction)
}
gtk_adjustment_set_value (bar->priv->adjustment, value);
+
return TRUE;
}