Proposal: Don't lock autoscroll


#1

Very often, when I’m travelling, I’m using my laptop’s touchpad when using Firefox.

With a touchpad it’s quite hard to exactly hit a hyperlink, which is not too bothersome. But it becomes bothersome with Firefox in the following situation: When you want to open a Hyperlink in a new tab (Windows 10x64: middle mouse button click).

When hitting the middle mouse button on a Hyperlink, the corresponding web page is being opened in a new tab. But, when hitting the middle mouse button outside of a Hyperlink, Page Scrolling mode is activated and locked until you click the middle mouse button again.

This behaviour is very annoying when trying to open a number of web pages from a search result page to new tabs: Instead of opening a new tab, you accedentally scroll far, far away from the position where you have been, just because you’ve been one pixel away from the Hyperlink when hitting the middle mouse button.

Can you, please, change the behaviour of Page Scrolling to only being active while the middle mouse button is being held down? So, releasing the middle mouse button will immediately switch off Page Scrolling mode?

Locking Page Scrolling mode is an unneccesary feature. No other software I know locks Document Scrolling, though they all provide this middle mouse button feature.

Thanks!

Here’s a screenshot depicting Firefox Page Scrolling mode:

_Firefox%20page%20scroll


(jscher2000) #2

Just a note that Firefox calls this autoscrolling (in English versions) and you can, if you like, turn it off completely on the Options/Preferences page. You can use the find bar on the page and look for scroll settings, and there’s a checkbox for it. I don’t know whether it makes sense to change how it works after all these years…


(Mittineague) #3

For me the middle click displays the “auto scroll on” icon, and then, depending on where I put the cursor it scrolls up or down, fast or slow. I have trouble seeing any way this could be easily changed.

I think a better approach would be to have a better indication that the cursor is above a link. highlighting, underlining, font size, cursor icon, etc.


#4

@Mittineague

That wouldn’t help, I’m afraid, because (see the description above) when using a touchpad (or touchscreen), you cannot prevent to move the mouse cursor a bit when hitting the middle button. That’s the human factor. You simply miss hyperlinks on a regular basis.

Touching any of those sensitive devices after autoscrolling is enabled then results in hilarious, unintended scrolling many times. (Using a touchscreen you don’t even see the mouse icon, because your finger covers it.)


(Mittineague) #5

That makes some sense I guess, but I’m confused. Are we talking mouse middle click or touch screen.

AFAIK, touch has no “mouse middle click” so I don’t see how the problem would be applicable. Is there something I’m unaware of?


#6

Yeah, you’re right. That situation sure may be rather uncommon using a touchscreen.

However, it may depend on driver settings. There may be modifier keys defined in the OS to emulate middle mouse click.

I just mentioned the example to emphasize on the core of the issue and to demonstrate that changing icons is only whitewashing the problem.


#7

I just noticed that the desired functionality is already implemented:

If you click the middle mouse button and keep it pressed while dragging the page, autoscroll automatically enables and then disables itself when you release the middle mouse button again.

So, the only thing supposed to be removed is the functionality to lock autoscroll when the middle mouse button is released as no mouse movement occured between pushing and releasing the middle mouse button.

That’s plain easy to implement:

With a probability of 99.9 %, the WM_MBUTTONUP window message event handler looks similar to this:

case WM_MBUTTONDOWN:
  { _mousePos = (POINTS)MAKEPOINTS(lParam);
  ... }
  break;

case WM_MBUTTONUP:
  { POINTS mousePos = MAKEPOINTS(lParam);

    if (mousePos.x != _mousePos.x || mousePos.y != _mousePos.y)
    { _programParameters.autoScroll = false;
    }
  ... }
  break;

Just remove the if statement … and that’s all there is to it.

case WM_MBUTTONUP:
  { _programParameters.autoScroll = false;
  ... }
  break;