TIP 563: scrollwheel on horizontal scrollbar scrolls without shift too

Login
Bounty program for improvements to Tcl and certain Tcl packages.
Author:         Harald Oehlmann <oehhar@users.sourceforge.net>
State:          Final
Type:           Project
Vote:           Done
Created:        02-Feb-2020
Keywords:       Tk, bindings
Tcl-Version:    8.7
Tk-Branch:      tip-563-scrollbar-scrollwheel
Vote-Summary:	Accepted 9/0/0
Votes-For:	FV, SL, KK, JD, BG, JN, KW
Votes-Against:	none
Votes-Present:	none

Abstract

Horizontal scrollbars require the shift key to be scrolled by a scroll wheel. The proposal is to scroll a horizontal scrollbar also without shift by the scroll wheel.

Specification

The widgets scrollbar and ttk::scrollbar with -orient horizontal parameter feature the same scroll wheel binding without modifier shift (which is currently a no-op) as with modifier shift.

To achieve symmetry, the same widgets, but with -orient vertical should also scroll with modifier shift (which is currently a no-op).

Rationale

Scrollwheel scrolling direction within Tk is assigned as follows:

  • No modifier: vertical scrolling
  • shift modifier: horizontal scrolling

This is a very clear rule.

When the mouse pointer is over a horizontal scrollbar, the scroll wheel without shift modifier is inactive. There is never a vertical scrolling on a horizontal scrollbar.

I find it intuitive that the scroll wheel without modifier should scroll a horizontal scrollbar.

Here is some code to test:

grid [text .t -wrap none -yscrollcommand {.y set} -xscrollcommand {.x set}] -row 1 -column 1 -sticky nesw
grid [scrollbar .y -command {.t yview}] -row 1 -column 2 -sticky ns
grid [scrollbar .x -orient horizontal -command {.t xview}] -row 2 -column 1 -sticky ew
grid rowconfigure . 1 -weight 1
grid columnconfigure . 1 -weight 1
.t insert end [string repeat [string repeat 1 100]\n 100]

Implementation

Implementation is in branch tip-563-scrollbar-scrollwheel.

Discussion

See this ticket with a couple of discussion how this is solved over platforms and programs: https://core.tcl-lang.org/tk/tktview?name=2b8fa6fd91

Copyright

This document has been placed in the public domain.

History