зеркало из https://github.com/mozilla/pjs.git
Bug 395564 - "scrollbar's arrow buttons should be disabled when they can't scroll further" [p=twanno@lycos.nl (Teune van Steeg) r+sr=roc a1.9=schrep]
This commit is contained in:
Родитель
57b5de490a
Коммит
b61ca1712b
|
@ -19,18 +19,17 @@
|
|||
<handler event="command" action="event.stopPropagation();"/>
|
||||
</handlers>
|
||||
</binding>
|
||||
|
||||
|
||||
<binding id="scrollbar" extends="chrome://global/content/bindings/scrollbar.xml#scrollbar-base">
|
||||
<content>
|
||||
<xul:scrollbarbutton sbattr="scrollbar-up-top" type="decrement" xbl:inherits="disabled,sborient=orient"/>
|
||||
<xul:scrollbarbutton sbattr="scrollbar-down-top" type="increment" xbl:inherits="disabled,sborient=orient"/>
|
||||
<xul:scrollbarbutton sbattr="scrollbar-up-top" type="decrement" xbl:inherits="curpos,maxpos,disabled,sborient=orient"/>
|
||||
<xul:scrollbarbutton sbattr="scrollbar-down-top" type="increment" xbl:inherits="curpos,maxpos,disabled,sborient=orient"/>
|
||||
<xul:slider flex="1" xbl:inherits="disabled,curpos,maxpos,pageincrement,increment,orient,sborient=orient">
|
||||
<xul:thumb sbattr="scrollbar-thumb" xbl:inherits="orient,sborient=orient,collapsed=disabled"
|
||||
align="center" pack="center"/>
|
||||
</xul:slider>
|
||||
<xul:scrollbarbutton sbattr="scrollbar-up-bottom" type="decrement" xbl:inherits="disabled,sborient=orient"/>
|
||||
<xul:scrollbarbutton sbattr="scrollbar-down-bottom" type="increment" xbl:inherits="disabled,sborient=orient"/>
|
||||
<xul:scrollbarbutton sbattr="scrollbar-up-bottom" type="decrement" xbl:inherits="curpos,maxpos,disabled,sborient=orient"/>
|
||||
<xul:scrollbarbutton sbattr="scrollbar-down-bottom" type="increment" xbl:inherits="curpos,maxpos,disabled,sborient=orient"/>
|
||||
</content>
|
||||
</binding>
|
||||
</bindings>
|
||||
|
||||
|
|
|
@ -271,14 +271,26 @@ nsNativeThemeGTK::GetGtkWidgetAndState(PRUint8 aWidgetType, nsIFrame* aFrame,
|
|||
aState->maxpos = CheckIntAttr(tmpFrame, nsWidgetAtoms::maxpos);
|
||||
}
|
||||
|
||||
// In order to simulate native GTK scrollbar click behavior, we set the
|
||||
// active attribute on the element to true if it's pressed with any mouse
|
||||
// button. This allows us to show that it's active without setting :active
|
||||
if (aWidgetType == NS_THEME_SCROLLBAR_BUTTON_UP ||
|
||||
aWidgetType == NS_THEME_SCROLLBAR_BUTTON_DOWN ||
|
||||
aWidgetType == NS_THEME_SCROLLBAR_BUTTON_LEFT ||
|
||||
aWidgetType == NS_THEME_SCROLLBAR_BUTTON_RIGHT) {
|
||||
if (CheckBooleanAttr(aFrame, nsWidgetAtoms::active))
|
||||
// set the state to disabled when the scrollbar is scrolled to
|
||||
// the beginning or the end, depending on the button type.
|
||||
PRInt32 curpos = CheckIntAttr(aFrame, nsWidgetAtoms::curpos);
|
||||
PRInt32 maxpos = CheckIntAttr(aFrame, nsWidgetAtoms::maxpos);
|
||||
if ((curpos == 0 && (aWidgetType == NS_THEME_SCROLLBAR_BUTTON_UP ||
|
||||
aWidgetType == NS_THEME_SCROLLBAR_BUTTON_LEFT)) ||
|
||||
(curpos == maxpos &&
|
||||
(aWidgetType == NS_THEME_SCROLLBAR_BUTTON_DOWN ||
|
||||
aWidgetType == NS_THEME_SCROLLBAR_BUTTON_RIGHT)))
|
||||
aState->disabled = PR_TRUE;
|
||||
|
||||
// In order to simulate native GTK scrollbar click behavior,
|
||||
// we set the active attribute on the element to true if it's
|
||||
// pressed with any mouse button.
|
||||
// This allows us to show that it's active without setting :active
|
||||
else if (CheckBooleanAttr(aFrame, nsWidgetAtoms::active))
|
||||
aState->active = PR_TRUE;
|
||||
|
||||
if (aWidgetFlags) {
|
||||
|
@ -1134,6 +1146,16 @@ nsNativeThemeGTK::WidgetStateChanged(nsIFrame* aFrame, PRUint8 aWidgetType,
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
if ((aWidgetType == NS_THEME_SCROLLBAR_BUTTON_UP ||
|
||||
aWidgetType == NS_THEME_SCROLLBAR_BUTTON_DOWN ||
|
||||
aWidgetType == NS_THEME_SCROLLBAR_BUTTON_LEFT ||
|
||||
aWidgetType == NS_THEME_SCROLLBAR_BUTTON_RIGHT) &&
|
||||
(aAttribute == nsWidgetAtoms::curpos ||
|
||||
aAttribute == nsWidgetAtoms::maxpos)) {
|
||||
*aShouldRepaint = PR_TRUE;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
// XXXdwh Not sure what can really be done here. Can at least guess for
|
||||
// specific widgets that they're highly unlikely to have certain states.
|
||||
// For example, a toolbar doesn't care about any states.
|
||||
|
|
Загрузка…
Ссылка в новой задаче