gecko-dev/dom/webidl/XULElement.webidl
James Teh 9e968bb929 Bug 1506787: Support tabindex attribute (including value -1) on non-control XUL elements. r=smaug
Previously, the tabindex attribute wasn't supported on non-control XUL elements at all.
The only way to make those focusable was to use -moz-user-focus: normal.
However, that caused the element to be included in the tab order; there was no way to make it focusable but not tabbable.
This can now be achieved using tabindex="-1".
This will primarily be useful for buttons on toolbars, which will be grouped under a single tab stop for efficiency.

For consistency, this also changes the behaviour of tabindex="-1" with -moz-user-focus: ignore on XUL controls.
Previously, -moz-user-focus: ignore would override tabindex="-1", making the element unfocusable.
Now, the tabindex attribute always overrides if explicitly specified.

Differential Revision: https://phabricator.services.mozilla.com/D12000

--HG--
extra : moz-landing-system : lando
2018-11-17 02:38:27 +00:00

103 lines
2.6 KiB
Plaintext

/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/.
*/
interface XULControllers;
[HTMLConstructor, Func="IsChromeOrXBL"]
interface XULElement : Element {
// Layout properties
[SetterThrows]
attribute DOMString align;
[SetterThrows]
attribute DOMString dir;
[SetterThrows]
attribute DOMString flex;
[SetterThrows]
attribute DOMString ordinal;
[SetterThrows]
attribute DOMString orient;
[SetterThrows]
attribute DOMString pack;
// Properties for hiding elements.
attribute boolean hidden;
attribute boolean collapsed;
// Property for hooking up to broadcasters
[SetterThrows]
attribute DOMString observes;
// Properties for hooking up to popups
[SetterThrows]
attribute DOMString menu;
[SetterThrows]
attribute DOMString contextMenu;
[SetterThrows]
attribute DOMString tooltip;
// Width/height properties
[SetterThrows]
attribute DOMString width;
[SetterThrows]
attribute DOMString height;
[SetterThrows]
attribute DOMString minWidth;
[SetterThrows]
attribute DOMString minHeight;
[SetterThrows]
attribute DOMString maxWidth;
[SetterThrows]
attribute DOMString maxHeight;
// Position properties for
// * popups - these are screen coordinates
// * other elements - these are client coordinates relative to parent stack.
[SetterThrows]
attribute DOMString left;
[SetterThrows]
attribute DOMString top;
// Tooltip
[SetterThrows]
attribute DOMString tooltipText;
// Properties for images
[SetterThrows]
attribute DOMString src;
attribute boolean allowEvents;
[Throws, ChromeOnly]
readonly attribute XULControllers controllers;
[Throws]
readonly attribute BoxObject? boxObject;
[SetterThrows]
attribute long tabIndex;
[Throws]
void focus();
[Throws]
void blur();
[NeedsCallerType]
void click();
void doCommand();
[Constant]
readonly attribute CSSStyleDeclaration style;
// Returns true if this is a menu-type element that has a menu
// frame associated with it.
boolean hasMenu();
// If this is a menu-type element, opens or closes the menu
// depending on the argument passed.
void openMenu(boolean open);
};
XULElement implements GlobalEventHandlers;
XULElement implements TouchEventHandlers;
XULElement implements OnErrorEventHandlerForNodes;