mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-21 09:49:14 +00:00
Bug 882800 - Use IndieUI inspired scroll requests. r=davidb
This commit is contained in:
parent
6ba9bc75ac
commit
f7e31f61e3
@ -16,6 +16,8 @@ XPCOMUtils.defineLazyModuleGetter(this, 'Utils',
|
||||
'resource://gre/modules/accessibility/Utils.jsm');
|
||||
XPCOMUtils.defineLazyModuleGetter(this, 'EventManager',
|
||||
'resource://gre/modules/accessibility/EventManager.jsm');
|
||||
XPCOMUtils.defineLazyModuleGetter(this, 'ObjectWrapper',
|
||||
'resource://gre/modules/ObjectWrapper.jsm');
|
||||
|
||||
Logger.debug('content-script.js');
|
||||
|
||||
@ -182,6 +184,21 @@ function scroll(aMessage) {
|
||||
while (acc) {
|
||||
let elem = acc.DOMNode;
|
||||
|
||||
// This is inspired by IndieUI events. Once they are
|
||||
// implemented, it should be easy to transition to them.
|
||||
// https://dvcs.w3.org/hg/IndieUI/raw-file/tip/src/indie-ui-events.html#scrollrequest
|
||||
let uiactions = elem.getAttribute ? elem.getAttribute('uiactions') : '';
|
||||
if (uiactions && uiactions.split(' ').indexOf('scroll') >= 0) {
|
||||
let evt = elem.ownerDocument.createEvent('CustomEvent');
|
||||
let details = horiz ? { deltaX: page * elem.clientWidth } :
|
||||
{ deltaY: page * elem.clientHeight };
|
||||
evt.initCustomEvent(
|
||||
'scrollrequest', true, true,
|
||||
ObjectWrapper.wrap(details, elem.ownerDocument.defaultView));
|
||||
if (!elem.dispatchEvent(evt))
|
||||
return;
|
||||
}
|
||||
|
||||
// We will do window scrolling next.
|
||||
if (elem == content.document)
|
||||
break;
|
||||
@ -202,25 +219,6 @@ function scroll(aMessage) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
let controllers = acc.
|
||||
getRelationByType(
|
||||
Ci.nsIAccessibleRelation.RELATION_CONTROLLED_BY);
|
||||
for (let i = 0; controllers.targetsCount > i; i++) {
|
||||
let controller = controllers.getTarget(i);
|
||||
// If the section has a controlling slider, it should be considered
|
||||
// the page-turner.
|
||||
if (controller.role == Ci.nsIAccessibleRole.ROLE_SLIDER) {
|
||||
// Sliders are controlled with ctrl+right/left. I just decided :)
|
||||
let evt = content.document.createEvent('KeyboardEvent');
|
||||
evt.initKeyEvent(
|
||||
'keypress', true, true, null,
|
||||
true, false, false, false,
|
||||
(page > 0) ? evt.DOM_VK_RIGHT : evt.DOM_VK_LEFT, 0);
|
||||
controller.DOMNode.dispatchEvent(evt);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
acc = acc.parent;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user