Commit Graph

189 Commits

Author SHA1 Message Date
James Teh
d26dcaee2e Bug 1546633: PanelMultiView: Send mousedown event when activating a button via the keyboard. r=Gijs
Previously, we sent a command event and a click event.
Normally, the command event executes the action, then the click event closes the menu.
However, in some cases (e.g. the Library button), there is no command event handler and the mousedown event executes the action instead.

Differential Revision: https://phabricator.services.mozilla.com/D29151
2019-05-02 10:35:57 +00:00
James Teh
7c62cc8c15 Bug 1545766: PanelMultiView: Don't override keyboard navigation in embedded documents. r=Gijs
Extension panels contain embedded documents; i.e. a <browser> element.
We want users to be able to tab to these and we want them to be focused automatically if a subview is opened from the keyboard, so treat them as tabbable.
However, once an embedded document is focused, we can't manage keyboard navigation inside it, so don't try.
Previously, we tried, which meant keys were overridden even though they didn't do anything, breaking keyboard navigation in extensions altogether.

Differential Revision: https://phabricator.services.mozilla.com/D28442
2019-05-02 10:35:49 +00:00
Ciure Andrei
2355f6b949 Backed out 2 changesets (bug 1545766, bug 1546633) for causing browser_PanelMultiView_keyboard.js to perma fail CLOSED TREE
Backed out changeset 041741ce1646 (bug 1546633)
Backed out changeset fbc294a6fe78 (bug 1545766)
2019-05-01 09:02:48 +03:00
James Teh
dff2e75717 Bug 1546633: PanelMultiView: Send mousedown event when activating a button via the keyboard. r=Gijs
Previously, we sent a command event and a click event.
Normally, the command event executes the action, then the click event closes the menu.
However, in some cases (e.g. the Library button), there is no command event handler and the mousedown event executes the action instead.

Differential Revision: https://phabricator.services.mozilla.com/D29151
2019-05-01 04:01:35 +00:00
James Teh
0b5ee08d3e Bug 1545766: PanelMultiView: Don't override keyboard navigation in embedded documents. r=Gijs
Extension panels contain embedded documents; i.e. a <browser> element.
We want users to be able to tab to these and we want them to be focused automatically if a subview is opened from the keyboard, so treat them as tabbable.
However, once an embedded document is focused, we can't manage keyboard navigation inside it, so don't try.
Previously, we tried, which meant keys were overridden even though they didn't do anything, breaking keyboard navigation in extensions altogether.

Differential Revision: https://phabricator.services.mozilla.com/D28442
2019-05-01 04:01:35 +00:00
Gijs Kruitbosch
558aee4033 Bug 1544447 - add support for numpad enter key and add tests to check activation works, r=Jamie
Differential Revision: https://phabricator.services.mozilla.com/D28431
2019-04-23 11:44:36 +00:00
Gijs Kruitbosch
03b31be5e6 Bug 1539984 - pass along whether a focus change was tripped by a keypress to ensure :-moz-focusring works as designed, r=Jamie
Differential Revision: https://phabricator.services.mozilla.com/D27874
2019-04-23 11:12:02 +00:00
Bogdan Tara
97333d123d Backed out changeset 6fea732af766 (bug 1539984) for browser_PanelMultiView_keyboard.js failures CLOSED TREE 2019-04-23 06:41:42 +03:00
Gijs Kruitbosch
4d92a15d46 Bug 1539984 - pass along whether a focus change was tripped by a keypress to ensure :-moz-focusring works as designed, r=Jamie
Differential Revision: https://phabricator.services.mozilla.com/D27874
2019-04-22 23:41:56 +00:00
James Teh
560861f867 Bug 1454865: PanelMultiView: When entering a subview using the keyboard, focus the first button after the Back button in the subview. r=Gijs
Differential Revision: https://phabricator.services.mozilla.com/D26067
2019-04-15 01:38:15 +00:00
James Teh
ea887cd7b3 Bug 1477673: Refactor PanelMultiView keyboard navigation to use a TreeWalker. r=Gijs,johannh
Previously, this code cached a list of controls on first use and used that for navigation.
This refactor addresses several issues:

1. There is now a separate focus order for tab/shift+tab and down/up arrows.
    This allows menulists, textboxes, etc. which use the arrow keys themselves to be focused with tab, but skipped with the arrows.
    This means the user won't fall into these controls when using the up/down arrow keys and be confused by the subsequent arrowing behaviour.

2. When a menulist, textbox, etc. is focused, the arrow keys, space and enter are now passed to the control.
    This is a better fix for handling of the arrow keys by menulists (bug 1522092).
    It also fixes left arrow in a textarea moving to the previous view instead of moving the caret (bug 1489874).

3. This improves handling of dynamic updates to the panel.
    For example, elements that are initially disabled and enabled later will be navigable.
    This is because the next element is determined dynamically by the TreeWalker, rather than using a cached list.

4. The interim fix for bug 1522092 disabled PanelMultiView keyboard navigation.
    This caused some regressions, including arrow keys/activation on the Site Identity Report a Problem link (bug 1539976) and some controls not being navigable if the Site Identity panel is opened using the mouse (bug 1539984).
    With the above fixes, we can now re-enable PanelMultiView keyboard navigation in the Site identity panel and thus fix these regressions.

5. Previously, PanelMultiView keyboard navigation was disabled in the main toolbar overflow menu.
    This is because the search box can be added to the overflow menu, which previously caused problems for the arrow keys.
    With the above fixes, we can now safely enable PanelMultiView keyboard navigation in the overflow menu.

6. PanelMultiView keyboard tests have been added.
    Previously, we relied on tests specific to various panels to exercise this functionality.

Differential Revision: https://phabricator.services.mozilla.com/D25905
2019-04-15 01:38:08 +00:00
Cosmin Sabou
04b730e5f8 Backed out 2 changesets (bug 1477673, bug 1454865) for browser chrome failures on browser_PanelMultiView_keyboard. CLOSED TREE
Backed out changeset eca8a6e641c0 (bug 1454865)
Backed out changeset 69db665d8263 (bug 1477673)
2019-04-09 14:29:08 +03:00
James Teh
6913074384 Bug 1454865: PanelMultiView: When entering a subview using the keyboard, focus the first button after the Back button in the subview. r=Gijs
Differential Revision: https://phabricator.services.mozilla.com/D26067
2019-04-09 09:54:41 +00:00
James Teh
2cbc3ca2b2 Bug 1477673: Refactor PanelMultiView keyboard navigation to use a TreeWalker. r=Gijs,johannh
Previously, this code cached a list of controls on first use and used that for navigation.
This refactor addresses several issues:

1. There is now a separate focus order for tab/shift+tab and down/up arrows.
    This allows menulists, textboxes, etc. which use the arrow keys themselves to be focused with tab, but skipped with the arrows.
    This means the user won't fall into these controls when using the up/down arrow keys and be confused by the subsequent arrowing behaviour.

2. When a menulist, textbox, etc. is focused, the arrow keys, space and enter are now passed to the control.
    This is a better fix for handling of the arrow keys by menulists (bug 1522092).
    It also fixes left arrow in a textarea moving to the previous view instead of moving the caret (bug 1489874).

3. This improves handling of dynamic updates to the panel.
    For example, elements that are initially disabled and enabled later will be navigable.
    This is because the next element is determined dynamically by the TreeWalker, rather than using a cached list.

4. The interim fix for bug 1522092 disabled PanelMultiView keyboard navigation.
    This caused some regressions, including arrow keys/activation on the Site Identity Report a Problem link (bug 1539976) and some controls not being navigable if the Site Identity panel is opened using the mouse (bug 1539984).
    With the above fixes, we can now re-enable PanelMultiView keyboard navigation in the Site identity panel and thus fix these regressions.

5. Previously, PanelMultiView keyboard navigation was disabled in the main toolbar overflow menu.
    This is because the search box can be added to the overflow menu, which previously caused problems for the arrow keys.
    With the above fixes, we can now safely enable PanelMultiView keyboard navigation in the overflow menu.

6. PanelMultiView keyboard tests have been added.
    Previously, we relied on tests specific to various panels to exercise this functionality.

Differential Revision: https://phabricator.services.mozilla.com/D25905
2019-04-09 09:54:39 +00:00
James Teh
252b6ae1d2 Bug 1536521: Use a capturing listener for PanelMultiView's keydown handler. r=Gijs
PanelMultiView adds the keydown handler on the window so that it handles key presses when a panel appears but doesn't get focus, as happens when a button to open a panel is clicked with the mouse.
However, this means the listener is on an ancestor of the panel, which means that handlers such as ToolbarKeyboardNavigator are deeper in the tree.
Previously, PanelMultiView used a bubbling (default) listener.
This meant that ToolbarKeyboardNavigator handled the event first, causing it to interfere when a panel opened within the toolbar; e.g. the Library menu.
To fix this, use a capturing listener for PanelMultiView so it gets the event first.

Differential Revision: https://phabricator.services.mozilla.com/D24848
2019-03-26 10:33:11 +00:00
Neil Deakin
ce9efe8f68 Bug 1519953, replace calls to retrieve boxobject position and size with getBoundingClientRect, r=gijs 2019-03-01 12:26:45 -05:00
Brian Grinstead
e27d4c7f9e Bug 1508446 - Require that [accesskey] gets set on <xul:label> to enable formatting without referencing a binding parent;r=paolo
Previously, if the accesskey attribute was missing then the label would reach up
to binding parent to find it's accesskey. In practice, bindings already do
[xbl:inherits=accesskey] to send it down to the label anyway.

The problem with this is that for controls without accesskeys, the attribute doesn't get set,
so the label will access the control from JS. This is fine for XBL, since typically
the label XBL will construct at the same time as the control, but when migrating
to Custom Elements, the label gets connected even when the control is hidden.

Differential Revision: https://phabricator.services.mozilla.com/D12355
2019-02-26 16:41:47 +00:00
Neil Deakin
ca92e4b698 Bug 1519952, replace calls to boxobject screenX and screenY with the equivalent on XULElement, r=paolo 2019-02-15 15:26:17 -05:00
Kris Maglione
856fa07b17 Bug 1514594: Part 3 - Change ChromeUtils.import API.
***
Bug 1514594: Part 3a - Change ChromeUtils.import to return an exports object; not pollute global. r=mccr8

This changes the behavior of ChromeUtils.import() to return an exports object,
rather than a module global, in all cases except when `null` is passed as a
second argument, and changes the default behavior not to pollute the global
scope with the module's exports. Thus, the following code written for the old
model:

  ChromeUtils.import("resource://gre/modules/Services.jsm");

is approximately the same as the following, in the new model:

  var {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");

Since the two behaviors are mutually incompatible, this patch will land with a
scripted rewrite to update all existing callers to use the new model rather
than the old.
***
Bug 1514594: Part 3b - Mass rewrite all JS code to use the new ChromeUtils.import API. rs=Gijs

This was done using the followng script:

https://bitbucket.org/kmaglione/m-c-rewrites/src/tip/processors/cu-import-exports.jsm
***
Bug 1514594: Part 3c - Update ESLint plugin for ChromeUtils.import API changes. r=Standard8

Differential Revision: https://phabricator.services.mozilla.com/D16747
***
Bug 1514594: Part 3d - Remove/fix hundreds of duplicate imports from sync tests. r=Gijs

Differential Revision: https://phabricator.services.mozilla.com/D16748
***
Bug 1514594: Part 3e - Remove no-op ChromeUtils.import() calls. r=Gijs

Differential Revision: https://phabricator.services.mozilla.com/D16749
***
Bug 1514594: Part 3f.1 - Cleanup various test corner cases after mass rewrite. r=Gijs
***
Bug 1514594: Part 3f.2 - Cleanup various non-test corner cases after mass rewrite. r=Gijs

Differential Revision: https://phabricator.services.mozilla.com/D16750
2019-01-17 10:18:31 -08:00
Gijs Kruitbosch
90dcdd79c2 Bug 1520607 - only disable and re-enable autopositioning while in the process of showing subviews, r=sfoster,mconley
Differential Revision: https://phabricator.services.mozilla.com/D17105
2019-01-23 11:17:00 +00:00
Paolo Amadini
fc784c6722 Bug 1509388 - Part 1 - Don't use a toolbarbutton element for the download-subview-toolbarbutton binding. r=Gijs
Download items in the Downloads Subview of the Library Panel are implemented using a XBL binding that is associated to a "toolbarbutton" element, but inherits from "button-base" in order to avoid the display="xul:button" of the "toolbarbutton" binding. This is because the item contains an inner button, and using a button CSS frame for the outer element would break hover behavior and mouse events.

This changes the binding so it doesn't use a "toolbarbutton" element, which is a different way to avoid the outer button CSS frame, and eventually allows removing support for the "display" attribute in XBL.

Differential Revision: https://phabricator.services.mozilla.com/D14572
2018-12-13 18:47:28 +00:00
Dão Gottwald
9931da215f Bug 1509651 - Stop flushing style for knowing the UI direction. r=florian
Differential Revision: https://phabricator.services.mozilla.com/D12827
2018-11-26 11:59:04 +00:00
Dorel Luca
65d585e698 Backed out changeset fab7024e7658 (bug 1508446) for reftest failures in reftest/tests/layout/reftests/xul/accesskey.xul 2018-11-22 02:50:01 +02:00
Brian Grinstead
8654826e69 Bug 1508446 - Require that [accesskey] gets set on <xul:label> to enable formatting;r=paolo
Previously, if the accesskey attribute was missing then the label would reach up
to binding parent to find it's accesskey. In practice, bindings already do
[xbl:inherits=accesskey] to send it down to the label anyway.

The problem with this is that for controls without accesskeys, the attribute doesn't get set,
so the label will access the control from JS. This is fine for XBL, since typically
the label XBL will construct at the same time as the control, but when migrating
to Custom Elements, the label gets connected even when the control is hidden.

Differential Revision: https://phabricator.services.mozilla.com/D12355
2018-11-21 22:35:44 +00:00
James Teh
7ac659d370 Bug 1506503: PanelMultiView: Automatically focus the first item if a panel is opened via the keyboard. r=johannh,paolo
Previously, we had specific code to do this for the "View site information" button (#identity-box) when activated via the keyboard.
To work well for keyboard and screen reader users, all such popups (e.g. Firefox menu, Page Actions, etc.) should do this.
These are all based on panelMultiView.
The arguments passed to PanelMultiView.openPopup can include the event which triggered the popup.
We now use this to detect keypress events and focus the first item in the panel in that case.

Differential Revision: https://phabricator.services.mozilla.com/D11605
2018-11-16 22:51:59 +00:00
Mark Banner
462116b7f9 Bug 1486739 - Add missing dangling commas in browser/, services/, taskcluster/ and toolkit/. r=mossop
Automatic changes by ESLint, except for manual corrections for .xml files.

Differential Revision: https://phabricator.services.mozilla.com/D4439
2018-08-31 05:59:17 +00:00
Mark Striemer
0097c01e8d Bug 1482731 - Support Home and End in PanelMultiView navigation r=dao
Differential Revision: https://phabricator.services.mozilla.com/D4087
2018-08-28 09:17:56 +00:00
Paolo Amadini
323238e7d1 Bug 1484275 - Fix opening the main menu while another popup is open on Windows. r=Gijs
Differential Revision: https://phabricator.services.mozilla.com/D3979
2018-08-23 14:04:43 +01:00
Brendan Dahl
3949a6f239 Bug 1485147 - Fix app menu for browser.xhtml. r=bgrins
The XUL elements were not being created because of the wrong createElement
call.

MozReview-Commit-ID: 54RqUJQAqHq

Differential Revision: https://phabricator.services.mozilla.com/D3998
2018-08-22 17:04:52 +00:00
Sahil Bhosale
d2a6ae42b3 Bug 1481401 - PanelMultiView.jsm: replace _dwu getter with _getBoundsWithoutFlushing method. r=dao 2018-08-10 02:27:00 +03:00
Brian Grinstead
1c86f46ecd Bug 1479125 - Migrate calls that expect an element to be returned to use element variation firstChild etc to firstElementChild etc;r=Paolo
This allows the JS to work in HTML documents, where whitespace is preserved. In XUL
documents, whitespace is ignored when parsing so text nodes are generally not returned.

The following changes were made, with manual cleanups as necessary (i.e. when firstChild actually
refers to a text node, or when firstChild is used in a loop to empty out an element):

  firstChild->firstElementChild
  lastChild->lastElementChild
  nextSibling->nextElementSibling
  previousSibling->previousElementSibling
  childNodes->children

MozReview-Commit-ID: 95NQ8syBhYw
2018-08-08 15:22:53 -07:00
Paolo Amadini
d44153a482 Bug 1473748 - Part 2 - Simplify how navigable elements are initialized. r=johannh
MozReview-Commit-ID: HN2ZYXNVi6m
2018-07-23 11:28:23 +01:00
Paolo Amadini
5bfedd8bf1 Bug 1473748 - Part 1 - Use the type of element instead of the "subviewbutton" and "subviewkeynav" classes to initialize the list of navigable elements. r=johannh
MozReview-Commit-ID: IgxwGRNLsct
2018-07-26 14:58:43 +01:00
Boris Zbarsky
e98236cf07 Bug 1476145 part 3. Stop using getInterface(nsIDOMWindowUtils) in browser/. r=gijs 2018-07-24 19:47:41 -04:00
Johann Hofmann
bfdb0dd5e0 Bug 1467385 - Use PanelMultiView APIs for keyboard navigation in the identity popup. r=Paolo
PanelMultiView has its own concept of "selected", so we should use this rather than move focus
using advanceFocusIntoSubTree.

MozReview-Commit-ID: DW2JqqggLl1
2018-07-02 14:34:25 +02:00
James Teh
6506f3f242 Bug 1454866 part 1: PanelMultiView: Provide a way to allow keyboard navigation to an element without affecting visual presentation. r=johannh
PanelMultiView has specific code to support keyboard navigation.
However, it only includes elements with class subviewbutton, which has visual styling.
Some views have controls which should be included in keyboard navigation, but for which the subviewbutton styling is not appropriate.
Therefore, also include elements with the new class subviewkeynav, which is specific to keyboard navigation and has no visual styling.

MozReview-Commit-ID: 8A5q9nbGpdc
2018-04-23 10:37:42 +10:00
Neil Deakin
ddc248eb52 Bug 1446961, remove obsolete calls to showPopup and replace usages of the popup box object with the same methods defined on popups, r=paolo 2018-04-27 11:04:36 -04:00
Kris Maglione
b3990a2d91 Bug 1456686: Part 1 - Fix unused and shadowed explicit imports. r=standard8
These issues were previously ignored due to the nature of our global import
rules. They need to be fixed before that rule can be updated.

MozReview-Commit-ID: DCChktTc5TW
2018-04-24 20:18:09 -07:00
Mike Conley
c61c0c4adc Bug 1442020 - Make PanelMultiView's description height workaround account for the possibility that panels have closed before a refresh driver tick. r=Paolo
MozReview-Commit-ID: IIjGYjoxMx5
2018-03-08 14:24:18 -05:00
Sam Foster
cd8e6dc737 Bug 1402845 - Fix panelview sizing when customRectGetter is used. r=mikedeboer,Paolo
* The extension content drives the sizing of the browser and popup that contains it via the Extension:BrowserResized message. The ignoreResizes property throttles/debounces this initially, stashing the dimensions received rather than triggering resize of the popup for every message. When the popup is a subview and fixedWidth, we ignore width but *do* want to use the stashed height value.

* Until the panel is given visibility, it has 0 height, so after setting visibility, wait until the next refresh-driver tick before measuring any header which should get added to the overall view height

MozReview-Commit-ID: AgcruVb9QPA
2017-10-05 10:23:53 -07:00
Mark Banner
ec9360ee83 Bug 1434446 - Enable no-unused-vars for global scope on jsm files in browser/. r=mossop
MozReview-Commit-ID: ERT1Fili25d
2018-03-01 20:06:06 +00:00
Tooru Fujisawa
9019d32d7a Backed out changeset 29e1fceaf48d (bug 1193394) 2018-03-01 19:55:08 +09:00
Tooru Fujisawa
b34b481966 Bug 1193394 - Part 4: Wait for the next event tick before calling promiseDocumentFlushed in descriptionHeightWorkaround. r=bustage CLOSED TREE 2018-03-01 18:44:38 +09:00
Paolo Amadini
0d4fc0c2a2 Bug 1420939 - Add an asynchronous version of the description height workaround. r=Gijs
This prevents synchronous reflows when opening subviews. This also removes a superfluous invocation of the workaround while the panel is still hidden.

MozReview-Commit-ID: DohLjntVaPU
2018-02-27 22:02:55 +00:00
Paolo Amadini
e0207ede2f Bug 1428839 - Part 8 - Fix the sliding transition when views are reordered. r=Gijs
Views moved to a different panel and then moved back could be placed after the subviews they give access to, if the other subviews were not moved. The transition would be incorrect when these subviews are opened later.

MozReview-Commit-ID: 6JJa0p0McxL
2018-02-28 13:43:51 +00:00
Paolo Amadini
6fe953d651 Bug 1428839 - Part 7 - Reduce calls to _cleanupTransitionPhase. r=Gijs
The transition code now returns early if the panel was closed during an "await" statement.

Given that transitions can only be interrupted when closing the panel, and the _cleanupTransitionPhase method handles exclusively state related to the panel rather than the individual views, it is now possible to call the _cleanupTransitionPhase method only when the panel is hidden or at the end of a transition.

MozReview-Commit-ID: GYRKyyhJBPK
2018-02-27 22:56:15 +00:00
Paolo Amadini
958e4b9a52 Bug 1428839 - Part 6 - Remove previous workaround for the panel resizing at the end of the transition. r=Gijs
This was added in bug 1354141 and is not needed anymore.

MozReview-Commit-ID: 42oF7LpCa6R
2018-02-27 16:13:48 +00:00
Paolo Amadini
6e06c84d01 Bug 1428839 - Part 5 - Open the anchor when subview navigation starts and close it asynchronously afterwards. r=Gijs
The anchor state does not need to be cleaned up synchronously, so we can handle it seperately from the transition state.

MozReview-Commit-ID: 1CBP9OS5WmM
2018-02-27 15:52:07 +00:00
Paolo Amadini
bc4ac85924 Bug 1428839 - Part 4 - Avoid re-entrancy in PanelMultiView navigation functions. r=Gijs
We now use the "active" property of views to track whether navigation is possible. This has the advantage of being already handled correctly when views are moved to a different panel, and is in line with the purpose of the "active" state. The note about using the "popupshown" event for navigation has been updated accordingly.

Keyboard navigation is also linked to the "active" property now, so there is no need to track the state of the "_transitioning" property anymore.

Since the goBack and showSubView methods can only be called when the view is active, we don't need to check for attempts to start a transition while the panel is closed anymore.

MozReview-Commit-ID: 3KT3A5EwGFy
2018-02-27 15:33:33 +00:00
Paolo Amadini
9f32b9648e Bug 1428839 - Part 3 - Clean up view properties when opening them. r=Gijs
This allows the state to be handled correctly when views are moved to a different panel.

The "margin-inline-start" style property on the view stack is also reset unconditionally, allowing less state to be stored in the transition details object.

MozReview-Commit-ID: IpgnYsVvx0w
2018-02-27 15:35:42 +00:00