[gnome-control-center] sound: Fix mouse scrolls on sliders
- From: Bastien Nocera <hadess src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-control-center] sound: Fix mouse scrolls on sliders
- Date: Mon, 25 Jun 2012 12:42:52 +0000 (UTC)
commit bb531687ca957072470a5851c499993fe056ea85
Author: Matthias Clasen <mclasen redhat com>
Date: Mon Mar 19 22:11:00 2012 +0000
sound: Fix mouse scrolls on sliders
Use gdk_event_get_scroll_deltas() to get the scroll direction.
https://bugzilla.gnome.org/show_bug.cgi?id=671724
panels/sound/gvc-balance-bar.c | 43 +++++++++++++++++++++++---------
panels/sound/gvc-channel-bar.c | 42 ++++++++++++++++++++++++-------
panels/sound/gvc-channel-bar.h | 4 +-
panels/sound/gvc-stream-status-icon.c | 2 +-
4 files changed, 66 insertions(+), 25 deletions(-)
---
diff --git a/panels/sound/gvc-balance-bar.c b/panels/sound/gvc-balance-bar.c
index bae395d..a24174a 100644
--- a/panels/sound/gvc-balance-bar.c
+++ b/panels/sound/gvc-balance-bar.c
@@ -425,32 +425,51 @@ on_scale_scroll_event (GtkWidget *widget,
GvcBalanceBar *bar)
{
gdouble value;
+ gdouble dx, dy;
value = gtk_adjustment_get_value (bar->priv->adjustment);
+ if (!gdk_event_get_scroll_deltas ((GdkEvent*)event, &dx, &dy)) {
+ dx = 0.0;
+ dy = 0.0;
+
+ switch (event->direction) {
+ case GDK_SCROLL_UP:
+ case GDK_SCROLL_RIGHT:
+ dy = 1.0;
+ break;
+ case GDK_SCROLL_DOWN:
+ case GDK_SCROLL_LEFT:
+ dy = -1.0;
+ break;
+ default:
+ ;
+ }
+ }
+
if (bar->priv->btype == BALANCE_TYPE_LFE) {
- if (event->direction == GDK_SCROLL_UP) {
- if (value + ADJUSTMENT_MAX_NORMAL/100.0 > ADJUSTMENT_MAX_NORMAL)
+ if (dy > 0) {
+ if (value + dy * ADJUSTMENT_MAX_NORMAL/100.0 > ADJUSTMENT_MAX_NORMAL)
value = ADJUSTMENT_MAX_NORMAL;
else
- value = value + ADJUSTMENT_MAX_NORMAL/100.0;
- } else if (event->direction == GDK_SCROLL_DOWN) {
- if (value - ADJUSTMENT_MAX_NORMAL/100.0 < 0)
+ value = value + dy * ADJUSTMENT_MAX_NORMAL/100.0;
+ } else if (dy < 0) {
+ if (value + dy * ADJUSTMENT_MAX_NORMAL/100.0 < 0)
value = 0.0;
else
- value = value - ADJUSTMENT_MAX_NORMAL/100.0;
+ value = value + dy * ADJUSTMENT_MAX_NORMAL/100.0;
}
} else {
- if (event->direction == GDK_SCROLL_UP) {
- if (value + 0.01 > 1.0)
+ if (dy > 0) {
+ if (value + dy * 0.01 > 1.0)
value = 1.0;
else
- value = value + 0.01;
- } else if (event->direction == GDK_SCROLL_DOWN) {
- if (value - 0.01 < -1.0)
+ value = value + dy * 0.01;
+ } else if (dy < 0) {
+ if (value + dy * 0.01 < -1.0)
value = -1.0;
else
- value = value - 0.01;
+ value = value + dy * 0.01;
}
}
gtk_adjustment_set_value (bar->priv->adjustment, value);
diff --git a/panels/sound/gvc-channel-bar.c b/panels/sound/gvc-channel-bar.c
index ef12640..3d854c9 100644
--- a/panels/sound/gvc-channel-bar.c
+++ b/panels/sound/gvc-channel-bar.c
@@ -416,16 +416,20 @@ on_scale_button_release_event (GtkWidget *widget,
}
gboolean
-gvc_channel_bar_scroll (GvcChannelBar *bar, GdkScrollDirection direction)
+gvc_channel_bar_scroll (GvcChannelBar *bar, GdkEventScroll *event)
{
GtkAdjustment *adj;
gdouble value;
+ GdkScrollDirection direction;
+ gdouble dx, dy;
g_return_val_if_fail (bar != NULL, FALSE);
g_return_val_if_fail (GVC_IS_CHANNEL_BAR (bar), FALSE);
+ direction = event->direction;
+
if (bar->priv->orientation == GTK_ORIENTATION_VERTICAL) {
- if (direction != GDK_SCROLL_UP && direction != GDK_SCROLL_DOWN)
+ if (direction == GDK_SCROLL_LEFT || direction == GDK_SCROLL_RIGHT)
return FALSE;
} else {
/* Switch direction for RTL */
@@ -442,25 +446,43 @@ gvc_channel_bar_scroll (GvcChannelBar *bar, GdkScrollDirection direction)
direction = GDK_SCROLL_DOWN;
}
+ if (!gdk_event_get_scroll_deltas ((GdkEvent*)event, &dx, &dy)) {
+ dx = 0.0;
+ dy = 0.0;
+
+ switch (direction) {
+ case GDK_SCROLL_UP:
+ case GDK_SCROLL_LEFT:
+ dy = 1.0;
+ break;
+ case GDK_SCROLL_DOWN:
+ case GDK_SCROLL_RIGHT:
+ dy = -1.0;
+ break;
+ default:
+ ;
+ }
+ }
+
adj = gtk_range_get_adjustment (GTK_RANGE (bar->priv->scale));
if (adj == bar->priv->zero_adjustment) {
- if (direction == GDK_SCROLL_UP)
+ if (dy > 0)
gvc_channel_bar_set_is_muted (bar, FALSE);
return TRUE;
}
value = gtk_adjustment_get_value (adj);
- if (direction == GDK_SCROLL_UP) {
- if (value + SCROLLSTEP > ADJUSTMENT_MAX)
+ if (dy > 0) {
+ if (value + dy * SCROLLSTEP > ADJUSTMENT_MAX)
value = ADJUSTMENT_MAX;
else
- value = value + SCROLLSTEP;
- } else if (direction == GDK_SCROLL_DOWN) {
- if (value - SCROLLSTEP < 0)
+ value = value + dy * SCROLLSTEP;
+ } else if (dy < 0) {
+ if (value + dy * SCROLLSTEP < 0)
value = 0.0;
else
- value = value - SCROLLSTEP;
+ value = value + dy * SCROLLSTEP;
}
gvc_channel_bar_set_is_muted (bar, (value == 0.0));
@@ -475,7 +497,7 @@ on_scale_scroll_event (GtkWidget *widget,
GdkEventScroll *event,
GvcChannelBar *bar)
{
- return gvc_channel_bar_scroll (bar, event->direction);
+ return gvc_channel_bar_scroll (bar, event);
}
static void
diff --git a/panels/sound/gvc-channel-bar.h b/panels/sound/gvc-channel-bar.h
index 6d3402d..0b607e8 100644
--- a/panels/sound/gvc-channel-bar.h
+++ b/panels/sound/gvc-channel-bar.h
@@ -81,8 +81,8 @@ gboolean gvc_channel_bar_get_ellipsize (GvcChannelBar *bar);
void gvc_channel_bar_set_ellipsize (GvcChannelBar *bar,
gboolean ellipsized);
-gboolean gvc_channel_bar_scroll (GvcChannelBar *bar,
- GdkScrollDirection direction);
+gboolean gvc_channel_bar_scroll (GvcChannelBar *bar,
+ GdkEventScroll *event);
G_END_DECLS
diff --git a/panels/sound/gvc-stream-status-icon.c b/panels/sound/gvc-stream-status-icon.c
index 1f02613..88d5198 100644
--- a/panels/sound/gvc-stream-status-icon.c
+++ b/panels/sound/gvc-stream-status-icon.c
@@ -293,7 +293,7 @@ on_status_icon_scroll_event (GtkStatusIcon *status_icon,
GdkEventScroll *event,
GvcStreamStatusIcon *icon)
{
- return gvc_channel_bar_scroll (GVC_CHANNEL_BAR (icon->priv->bar), event->direction);
+ return gvc_channel_bar_scroll (GVC_CHANNEL_BAR (icon->priv->bar), event);
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]