Closed Bug 16277 Opened 25 years ago Closed 24 years ago

Scroll bars should follow user's Smart Scrolling preference

Categories

(Core :: XUL, enhancement, P3)

PowerPC
Mac System 8.5
enhancement

Tracking

()

VERIFIED FIXED
mozilla0.9

People

(Reporter: mpt, Assigned: hyatt)

References

()

Details

(Keywords: embed, helpwanted, platform-parity)

Scroll bars should follow the user's preference, set in the Appearance control
panel, about whether the arrow buttons appear at the same end, or at opposite
ends, of the scroll bar. XPFE widgets obviously aren't trying to mimic every
aspect of native widgets, but for those with Smart Scrolling turned on, this
difference between Mozilla scroll bars and those in other MacOS programs would
be just *too* annoying.

Users of other OSes may also enjoy this feature. If so, it should be available
in the prefs, *except* on MacOS (because MacOS already provides somewhere, the
Appearance control panel, in which to set it).

Note that bug #16245 also involves getting stuff from the Appearance control
panel -- in that case, colors. It would save time to fix both of these at once.

-- mpt (additional keywords: scrollbar, scrollbars, Kaleidoscope)
Count me as one Linux/Windows user who would like this.
Status: NEW → RESOLVED
Closed: 25 years ago
Resolution: --- → LATER
Whiteboard: HELP WANTED
resolving as later
Status: RESOLVED → VERIFIED
QA Contact: claudius → elig
Verifying as LATER; anyone who'd like to pick this up and implement it themselves
to the XPToolkit team's satisfaction, of course, is welcome to.
I'll even throw in a free dinner at Moz Cafe with the XPToolkit team!
This should probably be:

Place scrollbar arrows
 o Together
 o Opposite Ends
 o Normal Position (Operating System Setting)

Obviously most OSes have a hardcoded "opposite ends", but this pref is at least
cross-platform.
From some screenshots it looks like BeOS uses two thumbs on each end (or at
least the option to), so whoever implements this should do that too at the same
time.
*** Bug 22750 has been marked as a duplicate of this bug. ***
BeOS is not the only OS supporting both arrows at both ends. See <A HREF="http://

bugzilla.mozilla.org/show_bug.cgi?id=22750 ">bug #22750</A> on enabling this

behavior on Mac OS.
Reopening and assign to nobody@mozilla.org, in the hope that someone in the Mac 
community will try the scrollbars in beta 1 and be galvanized into fixing this.
Status: VERIFIED → REOPENED
Keywords: helpwanted
Resolution: LATER → ---
Whiteboard: HELP WANTED
... Reassigning.
Assignee: trudelle → nobody
Status: REOPENED → NEW
Keywords: pp
Summary: [PP] Scroll bars should follow user's Smart Scrolling preference → Scroll bars should follow user's Smart Scrolling preference
Blocks: 33527
Blocks: 4252
Blocks: 39375
Blocks: 26828
No longer blocks: 39375
Add self to CC.

People who are bugged by this bug were also bugged by bug 46174
Blocks: 49144
You can get which style of scroll bar the user is using with:

http://developer.apple.com/techpubs/macos8/HumanInterfaceToolbox/AppManager/﷒0﷓

i.e. call GetThemeScrollBarArrowStyle

This officially returns 0 or 1 depending on whether the arrows are in the lower 
right or seperate at both ends. However *numerous* utilities exist that can get 
the arrows into the third state of "both arrows at both ends" which was pulled 
late in the beta development cycle of 8.5 (vers?). I've personally had both 
arrows at both ends for a couple of years now with no ill effects.

I'd hazard a guess that the constant for both at both ends is "2" :-)

I'm hoping all we need to do to fix this is add both arrows at both ends to

http://lxr.mozilla.org/mozilla/source/xpfe/global/resources/content/
scrollbarBindings.xml

and then get jiggy with some preferences and some css "hidden" attributes to 
handle turning it off on platforms that don't do this.

Final stage is prefs UI and autodetection of the OS's preferred setting, which 
can be hardcoded on Windows and Unix and detected as explained above on Mac OS.
Been talking to Jag about this one. Here's a summmary of what we said:

Probably should apply this only in Mac classic skin, at least for now.

Way to do this is with XBL and CSS. 

Currently scrollbars are styled in scrollbar.css which in the classic skin binds 
them to the appropriate platform version of classicBindings.xml.

This XBL file defines how the scrollbar is laid out, so one way to proceed it to 
remove the scrollbar definition from this file and instead have 3 (or more?) 
scrollbarBindings.xml files - one for each arrow style. 

Then one needs to use CSS to pick which XBL binding will be used[*]

The way to do this is to add an attribute to the scrollbar thusly:

<scrollbar nativestyle="babe">		(both at both ends)

and then match on that ending in CSS:

scrollbar[nativestyle="babe"] {
	-moz-Binding: ... whatever... babeScrollbarBindings.xml;
}

and so on for the other two styles.

Setting the attribute  is where C++ comes in. Somewhere around mac/scrollbar.cpp 
or thereabouts we query the function listed above to find out the OS setting, 
then we set an attribute on the newly created scrollbar saying which end style we 
want.

I copied Jag on this bug, so I hope he'll elucidate where I've failed to explain 
it properly.

Hey, I think I just grokked what XBL is for...

[*]Will also need to use CSS to style Mac scrollbar arrows a little, some of the 
3D border is omitted when the two arrows are close together.
Hyatt suggests another approach....

1/ Expose the current smart scrolling style as a preference. Set it on
startup?[1][2]

2/ In the XBL for scrollbars, have some JavaScript that reads the preference and
arranges for things to look right.

The arranging part would be:

i/ apply any CSS styles needed to make the scrollbars look right. This should be
easy, XBL can apply CSS to the bound element

ii/ Hide or show the extra arrows... simple approach... simply have all 4 arrows
in the XUL and use display:none. Better, according to hyatt, clone the existing
arrows in the Javascript in the XBL.

Can anyone help with the 1st part - how to add new prefs that are backed by C++
code? I'd like to evaluate their values:

* at worst, on startup
* better, on new window open
* best every time they're read
	(but see [1] and [2] below for why this is maybe not best)

[1] Ultimately this is a Bad way of doing it - we need a Javascript function
call that rechecks this each time its called.
[2] Even given [1] this needs to change when the user changes the preference in
the operating system. At this point Hyatt & BenG started talking about mutation
events and how cool if would be if "XBL" was notified (i.e. re-evaluated) when
prefs changeed, which would make [1] unnecessary.
Reassign to module owner to get this back on the radar (hopefully).

Jason Alcock mentions this issue on 11/15/2000 at
http://www.macintouch.com/netscape6.html:

Application refuses to acknowledge smart scrolling.
Assignee: nobody → trudelle
Keywords: nsmac2
QA Contact: elig → jrgm
->evaughan, ->moz0.9, adding embed keyword. We need to support this in a
clean/efficient manner after mutation events land.
Assignee: trudelle → evaughan
Keywords: embed
Target Milestone: --- → mozilla0.9
2 things - I see how to add a metric to nsLookAndFeel to capture the style, its 
about 1 hour's work. 

Secondly work Beard is doing on theme compliant scrollbars etc will effect this, 
so talk to him before begining a fix. 

(also talk to someone about BeOS)
Mine.
Status: NEW → ASSIGNED
No, really.  It's still mine.
Assignee: evaughan → hyatt
Status: ASSIGNED → NEW
Fixed.
Status: NEW → RESOLVED
Closed: 25 years ago24 years ago
Resolution: --- → FIXED
Hyatt! Wow. My sensors detect you fixed that bug in a maxium of 59 seconds :-)

Seriously though - I wonder if you cracked the whole thing which is to make it 
track the operating system's current setting. I guess I need to pull, build and 
find out...
I'm not sure this is 100% fixed - if you open a link in a new window, the scroll
bars in the new window don't follow the smart scrolling prefs. The view source
window doesn't follow the smart scrolling prefs. Should this be reopened or
should new bugs be filed (now that the basic functionality is there)?
Verifying fixed (modulo the bugs that lordpixel mentioned), 2000121514 build, Mac 
OS 9.0. Party in the streets.
Status: RESOLVED → VERIFIED
Is this really fixed? It doesn't work in 2001010816. My system is configured to
display both arrows at the bottom of the scroll bar, and Mozilla displays with
one at each end. Reload doesn't change it, opening a new window doesn't change it.
Works for me in 2001020908, after reload.

You are on MacOS right? BeOS implementation isn't complete yet, and there's 
currently no work been done to enable it on Windows or Linux. (though in 
principle it could be done on those platforms)
Yes, I'm on Mac OS. Turns out though I was using Moz 0.7 it was accessing a
profile I'd created under NS 6.0.1.  I created a new profile under Moz 0.7 and
the scroll bars displayed properly.

Shouldn't this have also worked in the NS profile, though, when accessed through
Moz 0.7?
I got this to work right under the Classic and Modern themes installed along
with Moz 0.7, but not the Blue one.  It also doesn't work under the
Modern-Mozillium variant available at netscape.com.
blue isn't supported, you could write a patch to fix it. mozillium is in a grey 
area, i think there's a bug somewhere about fixing it.
Ah right: see this newsgroup posting from (netscape.public.dev.skins) :

news://news.mozilla.org/3A2C032E.8050000%40netscape.com

As described in the posting, due to shortcomings in Netscape 6 skins will need to 
be updated to take advantage of this feature.

You'll need to mail the person who maintains the skin and ask them to fix it. 
*** Bug 96895 has been marked as a duplicate of this bug. ***
You need to log in before you can comment on or make changes to this bug.