scrolled window: Use shift to modify scroll direction
It has been a long-standing request to interpret scroll events with Shift held down as horizontal instead of vertical, and some applications are already doing this on their own. https://bugzilla.gnome.org/show_bug.cgi?id=132197
This commit is contained in:
parent
00544e9090
commit
d823c39caf
@ -2908,7 +2908,10 @@ gtk_scrolled_window_scroll_event (GtkWidget *widget,
|
|||||||
gboolean handled = FALSE;
|
gboolean handled = FALSE;
|
||||||
gdouble delta_x;
|
gdouble delta_x;
|
||||||
gdouble delta_y;
|
gdouble delta_y;
|
||||||
gdouble delta;
|
GdkScrollDirection direction;
|
||||||
|
gboolean shifted;
|
||||||
|
|
||||||
|
shifted = (event->state & GDK_SHIFT_MASK) != 0;
|
||||||
|
|
||||||
scrolled_window = GTK_SCROLLED_WINDOW (widget);
|
scrolled_window = GTK_SCROLLED_WINDOW (widget);
|
||||||
priv = scrolled_window->priv;
|
priv = scrolled_window->priv;
|
||||||
@ -2917,6 +2920,15 @@ gtk_scrolled_window_scroll_event (GtkWidget *widget,
|
|||||||
|
|
||||||
if (gdk_event_get_scroll_deltas ((GdkEvent *) event, &delta_x, &delta_y))
|
if (gdk_event_get_scroll_deltas ((GdkEvent *) event, &delta_x, &delta_y))
|
||||||
{
|
{
|
||||||
|
if (shifted)
|
||||||
|
{
|
||||||
|
gdouble delta;
|
||||||
|
|
||||||
|
delta = delta_x;
|
||||||
|
delta_x = delta_y;
|
||||||
|
delta_y = delta;
|
||||||
|
}
|
||||||
|
|
||||||
if (delta_x != 0.0 &&
|
if (delta_x != 0.0 &&
|
||||||
may_hscroll (scrolled_window))
|
may_hscroll (scrolled_window))
|
||||||
{
|
{
|
||||||
@ -2963,12 +2975,13 @@ gtk_scrolled_window_scroll_event (GtkWidget *widget,
|
|||||||
handled = TRUE;
|
handled = TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else if (gdk_event_get_scroll_direction ((GdkEvent *)event, &direction))
|
||||||
{
|
{
|
||||||
GtkWidget *range;
|
GtkWidget *range;
|
||||||
gboolean may_scroll;
|
gboolean may_scroll;
|
||||||
|
|
||||||
if (event->direction == GDK_SCROLL_UP || event->direction == GDK_SCROLL_DOWN)
|
if ((!shifted && (direction == GDK_SCROLL_UP || direction == GDK_SCROLL_DOWN)) ||
|
||||||
|
(shifted && (direction == GDK_SCROLL_LEFT || direction == GDK_SCROLL_RIGHT)))
|
||||||
{
|
{
|
||||||
range = priv->vscrollbar;
|
range = priv->vscrollbar;
|
||||||
may_scroll = may_vscroll (scrolled_window);
|
may_scroll = may_vscroll (scrolled_window);
|
||||||
@ -2983,6 +2996,7 @@ gtk_scrolled_window_scroll_event (GtkWidget *widget,
|
|||||||
{
|
{
|
||||||
GtkAdjustment *adj = gtk_range_get_adjustment (GTK_RANGE (range));
|
GtkAdjustment *adj = gtk_range_get_adjustment (GTK_RANGE (range));
|
||||||
gdouble new_value;
|
gdouble new_value;
|
||||||
|
gdouble delta;
|
||||||
|
|
||||||
delta = _gtk_range_get_wheel_delta (GTK_RANGE (range), event);
|
delta = _gtk_range_get_wheel_delta (GTK_RANGE (range), event);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user